Category Archives: Development Tools

Zkušenosti s přechodu na TFS a agilní techniky – záznam a slides [WUG Praha 1/2015]

Slides z přednášky 15.1.2015 pro Windows User Group Praha (WUG), kde jsme s kolegou Jirkou Kandou povídali i našich zkušenostech z přechodu HAVITu na TFS a agilní techniky (v období 08/2012 až 12/2014):

Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu:

Omluvte sníženou kvalitu zvuku záznamu, nahrávali jsme tentokrát na dva různé mikrofony a výsledný záznam je sestřihán ze dvou různých zvukových stop (jedna z mikrofonů navíc nebyl zřejmě úplně ideálně umístěn a chytal nežádoucí ruchy).

.NET Memory Internals 2/2 – Heap, Garbage Collector – záznam, slides a dema [MS Fest Praha 2014]

Slides z mé přednášky 30.11.2014 pro konferenci MS Fest Praha:

Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu:

.NET Memory Internals 1/2 – záznam, slides a dema [MS Fest Praha 2014]

Slides z mé přednášky 29.11.2014 pro konferenci MS Fest Praha:

Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel

Mě touto hláškou obšťastnil sign-in dialog ve Visual Studiu v lab Virtual Machine, ale můžete ji potkat i jinde. V mém případě byl důvod v nepřiměřeně se rozcházejícím čase virtuálního stroje a času skutečného (na serverech MSFT).

Stejně tak například bez rozumného času nejde Windows Update.

„Copy Local“ referencí ve Visual Studiu

Copy Local standardně zobrazuje hodnotu True, ale ve skutečnosti to znamená neuvedeno, protože v *.csproj souboru není nic uvedeno. Pokud běží build na stroji, který má assembly uložené v GAC, nebude knihovna zkopírována do složky bin.

2014-10-24_1711

Řešení je jednoduché, stačí hodnotu nastavit na False a zpět na True. Tím dojde k uložení informace do *.csproj souboru a sice v elementu Reference přibyde nový element Private s hodnotou True.

<Reference Include="Havit">
  <HintPath>...</HintPath>
  <Private>True</Private>
</Reference>

MSBuild v rámci TFS Build Service nevytváří Web Deployment Packages

Problém

V projektu máme webovou aplikaci, která má Publish Profile, který má vytvořit Web Deployment balíček. Balíček se úspěšně vytváří jak při spuštění MSBuildu z Visual Studia, tak z příkazové řádky na vývojářském počítači, tak při spuštění z příkazové řádky na počítači s TFS Build Service. Jenže při spuštění z TFS Build Service se balíček nevytvoří.

Proč to nefunguje

Podoba publish profile, který byl vyroben pomocí UI ve Visual Studio 2013 je (plus mínus) takováto:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>Package</WebPublishMethod>
<DesktopBuildPackageLocation>TfsPublish\BalicekKteryChciVytvorit.zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
...
</PropertyGroup>
</Project>

Důvodem, proč se balíček nevytváří je skutečnost, že Visual Studio do publish profilu vytvoří vlastnost DesktopBuildPackageLocation, jenže je očekávána hodnota vlastnosti PackageLocation.

A jak to, že v rámci VS a z příkazové řádky to funguje? Protože PackageLocation se v průběhu načítání C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets nastaví podle DestopBuildPackageLocation.

<PackageLocation Condition="'$(PackageLocation)'=='' and !(('$(OutDir)' != '$(OutputPath)') Or ('$(IsDesktopBuild)' == 'False')) ">$(DesktopBuildPackageLocation)</PackageLocation>

Jenže jen za podmínky, kdy IsDesktopBuild není false (druhou podmínku není ukázanou výše třeba řešit). Otázkou je, kde se nastavuje hodnota vlastnosti IsDesktopBuild. Odpověď se skrývá v témže souboru:

<IsDesktopBuild Condition="'$(IsDesktopBuild)'=='' And '$(TeamFoundationServerUrl)' != ''">False</IsDesktopBuild>

A problém je objasněn – TFS Build Service nastavuje hodnotu TeamFoundationServerUrl, čímž se build liší od spuštění z příkazové řádky.

Možnosti řešení

Nastavení vlastnosti PackageLocation bohužel nefunguje v rámci vlastního targetu, neboť to je již pozdě. Z vlastnosti se odvozují další vlastnosti během načítání target souborů.

  1. Natvrdo nastavit hodnotu IsDesktopBuild na True při spouštění MS Buildu. Nenašel jsem žádné jiné použití této vlastnosti, tedy alespoň prozatím jde o bezpečné řešení.
  2. Během studia zmíněného souboru s MSBuild targety jsem našel, že se MSBuild po importu PublishProfile souboru (pubxml) pokouší importovat ještě další targety, pokud existují. Šlo by tedy takový soubor vytvořit a v něm zkopírovat hodnotu z DesktopBuildPackageLocation do PackageLocation.
    Pokud se projekt jmenuje Web a ten obsahuje publish profile v Properties\PublishProfiles\TfsPublish.pubxml, pak se načítají
  • Web\Properties\PublishProfiles\TfsPublish.wpp.targets (viz vlastnost WebPublishProfileCustomizeTargetFile)
  • Web\*.wpp.targets (viz vlastnost WebPublishPipelineCustomizeTargetFile)
  • Web\..\wpp.deploysettings.targets (viz WebPublishPipelineSolutionTargetFile)

Advanced .NET Debugging – záznam, slides a dema [MS Fest Brno 2014]

Slides z mé přednášky 18.10.2014 pro konferenci MS Fest Brno:

Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu:

Windows Explorer: Založení/přejmenování souboru s názvem začínajícím tečkou

Pokud potřebujete vytvořit nebo přejmenovat ve Windows Exploreru soubor/složku na jméno, které začíná tečkou (.tfignore, .svn, …), funguje jednoduchý trik – přidejte ještě jednu tečku na konec jména(např. „.tfignore.“). Windows Explorer to překousne a záměru je dosaženo.

…starý trik, ale občas si ho musím připomenout.

Jak zaregistrovat příkaz pro kontextové menu Windows Exploreru (např. Notepad2)

Řeším to tak akorát v četnosti, kdy právě zapomenu, jak se to přesně dělá. Tedy pro připomenutí, stačí do registry přidat:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Notepad2]

[HKEY_CLASSES_ROOT\*\shell\Notepad2\command]
@="\"C:\\Program Files\\Notepad2\\Notepad2.exe\" \"%1\""

…název klíče odpovídá textu položky v menu.

Připravený soubor: Notepad2 Shell Context Menu.reg

Vývojářské nástroje a software, který používám [Robert Haken, 06/2014]

Protože velmi často na kurzech i jinde dostávám otázky na software (nejenom vývojářský), který používám, sumarizoval jsem seznam toho, co mám na svých počítačích nainstalováno. Předesílám, že jsem za těch 20 let s počítačem přešel od pojetí maximalisty, který měl na PC nainstalováno kde-co (s přispěním AltaVisty), na přístup minimalistický.

UPDATE: Toto je novější verze předchozího seznamu z 09/2013. Vzniká při příležitosti vynucené reinstalace mého počítače, a tedy rovnou aktualizuji seznam i pro sebe, abych měl příště check-list, co všechno mám instalovat. Podstatné změny oproti předchozí verzi jsou označeny červeně.

Vývojářská platforma

  • Microsoft Visual Studio Ultimate – Základem veškeré vývojářské práce je samozřejmě Visual Studio, nyní už nejenom pro kódování, ale i jako klient k TFS (pro mě raději než web, i když ergonomie UI je děs).
  • Team Foundation Server
  • SQL Server – Management Studio, Profiler, Data Tuning Advisor – Pro běžnou práci s SQL si vystačím s Microsoft nástroji, pro schéma DB využívám Database Diagrams. Žádné další IDE či designer třetí strany nepoužívám.

Visual Studio Add-Ins/Extensions

  • StyleCop (Free) – Doplněk pro kontrolu stylové čistoty zdrojových kódů. Hlídá názvové konvence, formátování kódu a spoustu dalšího. U nás ho máme jako součást continuous integration buildů a jakákoliv nesrovnalost failuje build. Taková automated před-fáze code-review.
  • Web Essentials od Madse Kristensena (Free) – Must-have každého webového vývojáře.
  • Resharper od JetBrains (Paid) – Za nezbytný jsem ho považoval v dobách VS.NET, od VS2005-2010 jsem nepoužíval, nyní se k němu vracím pro pár funkcí, které mi usnadňují život. Využívám v podstatě hlavně vyhledávání (Ctrl[+Shift]+T) a navigaci v kódu.
  • Productivity Power Tools (Free) – V podstatě se jedná o proof of concept pro nové funkce do Visual Studia. Jednak to, co Microsoft nestihl do releasu dostat a to, co testuje na uživatelých, jestli by se hodilo do releasu dalšího.
  • Team Foundation Server Power Tools (Free) – V podstatě z té sady používám jen Windows Shell Extensions a pár drobotin ze skupiny Team Explorer Enhancements.
  • HAVIT Visual Studio Extensions (Private) – Drobné pomůcky z domácí dílny, např. – Surround member with named region (Ctrl+K,R), Collapse all #regions (Ctrl+-), Expand all outlining (Ctrl++), Open local resources file (F6), Check Build, Run Business Layer Generator, atp.

Vývojářské nástroje

  • Fiddler od Teleriku (Free) – Zachytávání a analýza HTTP(S) komunikace na straně klienta.
  • RedGate .NET Developer Bundle, jmenovitě pak  
          • .NET Reflector (Paid) – Nástroj, který umožňuje prohlížet a analyzovat zdrojový kód jednotlivých assembly, včetně samotného .NET Frameworku (decompiler). Díky MVP licenci je pro mě stále jedničkou. Jako free alternativa se nabízejí např. ILSpy nebo dotPeek od JetBrains.
          • ANTS Performance Profiler od RedGate (Paid) – I když performance-profiler je vestavěný ve Visual Studiu, ANTS Performance Profiler je pro mě jedničkou pro své přehledné uživatelské rozhraní.
  • RedGate SQL Toolbelt, jmenovitě pak 
    • SQL Compare a SQL Data Compare od RedGate (Paid) – Nástroj na porovnání schématu/dat mezi dvěma databázemi a jejich synchronizaci. Používám pro deployment nových verzí aplikací.
    • SQL Prompt od RedGate (Paid) – vylepšené intellisense pro SQL Server Management Studio, zejména umí nabízet podmínky do JOINů dle existujících FKs
  • TortoiseSVN (Free) – SVN jsme používali do roku 2012 jako hlavní nástroj pro source-code-management. Po migraci na TFS používám pouze pro přístup k cizím SVN a pro neaktivní archivované projekty.
  • WCAT a WCAT Extension pro Fiddler (Free) – Zátěžová zkouška webové aplikace. Přes Fiddlera lze označit requesty připravené proklikáním z browseru a následně je přehrát jako WCAT stress test.
  • Browser F12 Developer Tools (Chrome/IE)
  • Windows Debugger (WinDbg) od Microsoftu (Free) – debugger. Používám zejména pro analýzu memory-dumpů. Pro .NET používám pscor4.dll rozšíření.
  • Debug Diagnostic Tool (DebugDiag) od Microsoftu (Free) – analýza memory dumpů (nejenom).

Základ desktopu

  • Windows 8.1 64-bit EN – S koupí Lenovo T440s jsem nakonec přešel na Windows 8.1, zejména kvůli lepší (přesto stále bídné) podpoře škálování UI při přecházení mezi různými režimy (panel/dock). Pracuji raději s anglickým prostředím.
      • StarDock Start8 (Paid) – Pro mě naprosto nezbytná pomůcka do doby, než Microsoft vrátí do Windows mini-Start. Nepoužívám na tom vlastně skoro nic jiného, než Search (Win + píšu), ale přesto to je základ mého soužití s Win8.x.
      • Windows Explorer – Pro veškerou práci se soubory používám základní Windows Explorer, obejdu se bez souborových manažerů ála Total Commander.
  • Microsoft Office EN – Outlook pro maily, kontakty a kalendář. Word, Excel. OneNote poměrně intenzivně na zápisky ze schůzek. Visio občas na nějaký ten diagram (za ideální ho nepovažuji, ale vhodnější jsem nenašel). PowerPoint na slides, které se snažím ve svých vystoupeních spíše omezovat. Dříve jsem používal Access s pár naklikanými formuláři pro editaci obsahu jedné DB, ale po skončení podpory .adp již není důvod. Publisher nepoužívám. Project jsem odsoudil do rubriky “kreslítko Gantt-chartů”, i když jsem mnoho marných pokusů přijít mu na chuť udělal.
  • Google Chrome – od jara 2013 můj primární browser. Roky jsem používal Internet Explorer s argumentací, že chci vidět weby tak, jak je vidí většina našich zákazníků. IE však svůj tržní podíl ztrácí, rozdíly renderování se zmenšují a Google Chrome si mě získal svojí jednoduchostí, rychlostí a synchronizacemi.
      • IE Tab Multi (Enhance) – Chrome Extension pro hostování IE v Chrome. Používám ve specifických scénářích (tisk, elektronický podpis, daňová přiznání, atp.)
  • 7Zip (Free) – Komprese/dekomprese. Používám skrze kontextové menu ve Windows Exploreru.
  • PDF Creator (Free) – Virtuální tiskárna s výstupem do PDF souboru.
  • XnView[MP] (Free) – Prohlížeč obrázků/fotek. Neorganizuji fotky (zatím?) do žádných knihoven a pracuji s nimi čistě souborově (organizováno do složek), XnView používám čistě jako výchozí prohlížeč obrázků s jejich otevíráním rovnou do režimu FullScreen, aktuálně jsem zkusil nainstalovat novější podobu XnViewMP. Posledního půl roku jsem místo toho používal IrfanView, ale ač ten je velmi rychlý, v pohodlnosti použití se XnView nevyrovnal.
  • Notepad2 (Free) – lepší Notepad. Nepoužívám příliš často a v podstatě opravdu jenom jako náhradu pomalého Notepadu, takže od toho nic moc nečekám, nic lepšího jsem nehledal. Moc se v něm ani nevyznám a nejspíš bych se bez něj obešel. Dříve jsem používal PSPad editor a musím uznat, že Notepad2 je pro mě subjektivně lepší (rychlejší, přehlednější a zcela nahrazuje výchozí Microsoftí Notepad). Ručně k tomu doplňují registraci do kontextového menu Windows Exploreru (shell).
  • Paint.NET (Free) – Editace obrázků. Nejsem žádný grafik, ani foto-geek. Tato jednoduchá napodobenina PhotoShopu mi na moje úkony bohatě dostačuje a jedinou slabinou je chybějící podpora formátu .PSD. Od foťáku mám licenci Photoshop Lite, ale nevyužívám ji. V mimořádných situacích sáhnu po GIMPu, ale trvale ho instalován nemám.
  • Total Commander (Paid) – Nepoužívám jako hlavní správce souborů, ale především jako FTP klienta. Využití u mě má i pro pár dalších scénářů (prohlížení velmi velkých souborů, porovnávání složek, atp.), nijak intenzivně ho však nevyužívám.
  • CrashPlan+ (Paid) – Automatické zálohování souborů do cloudu. Používám nejširší CrashPlan+ Family Unlimited plan pro počítače své a svých rodinných příslušníků. Nepoužívám dlouho, ale zatím jsem spokojen. Za asi $12/měsíc to na pozadí slízává soubory ze všech počítačů (včetně manželky MacOS) a zálohuje na cloud-storage poskytovatele služby.
  • Dropbox (Free) – Cloud storage. Nevyužívám příliš intenzivně, nemám ani stále spuštěno, ale občas se hodí, např. ke zpřístupnění souborů pro iOS. Mám i OneDrive a GoogleDrive, ale zatím obecně cloud-storage moc nevyužívám.
  • Adobe Reader, Combined Community Codec Pack

Užitečné maličkosti

  • Copy Path To Clipboard od Jgaa’s Internet (Free) – Přidá do kontextového menu Windows Exploreru ke každému souboru/složce volbu „Copy Path to Clipboard“.
  • Paste As File od Chrise Gingericha (Free?) – Přidá do kontextového menu Windows Exploreru volbu „Paste As File“. Používám občas v kombinaci s PrintScreen nebo OneNote Snipping Toolem na ukládání screenshotů do souboru.
  • AutoHotKey (Free) – Používám omezenou funkčnost, zato téměř stále. Používám své AltGr+V pro „Paste as plaintext“ a dále máme ve firmě napsaný jednoduchý skriptík, který na klávesovou zkratku AltGr+A vygeneruje skrz klávesnici edit-stamp používaný při editaci WorkItems v TFS (popř. editaci čehokoliv jiného, jako třeba meeting-requestu) :

image

  • FileLocator Lite (Free) – Vyhledávání souborů na desktopu. Používám od dob Windows XP jako náhradu za standardní nefunkční vyhledávání souborů (ve Windows 2000 jsem problém nikdy neměl). Je docela rychlý a hlavně spolehlivý. Původně se jmenoval Agent Ransack.

Blogging, Publikování

  • WordPress.com (Paid) – HAVIT Knowledge Base běží jako hostovaný blog na WordPress.com, komerční sekce projektu WordPress.org. Předtím jsem používal šest let Community Server a udělal krátký marný pokus s BlogEngine.NET. Využívám služby, které vycházejí asi na $90/rok.
  • Windows Live Writer od Microsoftu (Free) – Publikování blog-postů z desktopu, off-line příprava postů. Aktuálně součást Windows Live Essentials a není jasné, jestli to Microsoft nezařízne. Jiný editor jsem ani nezkoušel. Pro WordPress.com jsem musel nastavení WLW trochu poladit – vypnout HTML-encoding titulků postů.
    • WLW SourceCode Plug-In pro WordPress.com od Riche Hewletta (Free) – Plug-in pro vkládání code-snipettů do postů Windows Live Writeru při publikování na WordPress.com. Žádný zázrak, ale lepší řešení jsem zatím neobjevil.
    • Insert Files Plug-In pro WLW od ScottIsAFool – Plug-in pro vkládání souborových příloh do blog-postů.
  • Camtasia Studio od TechSmith (Paid) – Nahrávání a střih screencastů.

Business Administration

  • Money S3 (Paid) – finanční účetnictví, mzdy
  • Datovka od CZ.NIC Labs (Free) – klient pro obsluhu Datové schránky
  • HAVIT Goran (Paid) – provozní agenda – timesheety, náklady, plánování, fakturace, dovolené, CRM, atd.

Osobní pomůcky

  • SplashID Safe (Paid) – repository na hesla a jiné chráněné údaje. Používám se synchronizací na iOS.
  • Apple iTunes – telefonizuju s nima od iPhone 4 (první pro mě vizuálně přijatelná podoba jinak zdařilé věci, kterou od pra-verze používá manželka) a dopadlo to tak, že máme i AppleTV a v iTunes mám i veškerou svou hudbu. iTunes nejsou žádný zázrak (ovládání dodnes nechápu), ale jako součást uceleného ekosystému mi to vyhovuje.
  • Quicken od Intuit (Paid) – používám čistě pro evidenci volného kapitálu a investičního majetku. Není ideální, ale lepší jsem nenašel. Je to určeno spíše pro US trh (napojení na banky, napojení na burzu) a spíše pro běžný rodinný rozpočet (evidence výdajů atp.). Zvažuju přejít na čistý Excel.

Používal jsem dříve, může se hodit…

    • OutlookOnTheDesktop – po drobné úpravě (mapování klávesové zkratky) používám pro rychlé zobrazení mého týdenního kalendáře (FullScreen). Funguje i s Outlook 2013. Nějak si nerozumí s Win8.x, takže prostě mám neustále puštěné druhé okno Outlooku s kalendářem (první okno s maily).
    • CDBurnerXP (Free) – Vypalování CD/DVD (už velmi zřídka). Původně jsem používal Nero Burning ROM, ale poslední dobou se nějak komplikovaně získává a z celého jednoduchého Nera se stala taková komplikovaná hydra, že jsem si našel CDBurnerXP. Vestavěné vypalování ve Windows (vyjma Burn ISO) jsem nepřijal za důvěryhodné.
    • Log Parser od Microsofty (Free) – command-line utilita, která umožňuje do klást SQL dotazy do textových logů, typicky do logů IIS. Nemám nainstalováno stále, ale občas se pro diagnostiku velmi hodí. Alternativou je importovat log do tabulky SQL serveru a ptát se tam.
    • Help & Manual od EC Software (Paid) – tvorba on-line dokumentace, viz třeba manual.goran.cz. Už jsem to dlouho neměl puštěné… :-)
    • Azure Diagnostics Manager a Cloud Storage Studio – Cerebrata (Paid) – administrace Windows Azure
    • Pencil (Free) – skicování UI. Malé, nenápadné, primitivní a s docela líbivými výstupy. Hodí se v situacích, kdy jde o vizuální vyjádření myšlenky a nepředpokládá se editace (revize) návrhu UI zákazníkem. (V takových situacích používám většinou Excel, se kterým si každý poradí. Vlastně už používám skoro jenom Excel, ale asi se k Pencil pro některé scénáře vrátím.) Zkoušel jsem i PowerPoint Storyboarding, ale nezaujalo mě to.
    • Cruise Control .NET (Free) – Před migrací na TFS náš hlavní build server.
    • Hide Main Menu (Free) – Visual Studio Extension. Na notebooku umožňuje získat řádek kódu navíc :-)
    • VisualSVN (Paid) – Visual Studio Extenction. Napojení na TortoiseSVN funkce přímo z kontextu Visual Studia. Intenzivnější práci se SVN si bez něj nedokážu představit. Používali jsme ve firmě všichni vývojáři dlouhé roky. Po migraci ze SVN na TFS již ani neinstaluji, pro ty občasné potřeby mi stačí holé TortoiseSVN,
    • GhostDoc (Free) – Visual Studio Extension. Generování XML dokumentace. Používal jsem zejména pro kopírování předchozích komentářů při overridech.
    • Ident Guides (Free) – Visual Studio Extension. Zobrazuje svislé čáry dle úrovně odsazení kódu. Existuje několik doplňků tohoto typu a je i obsaženo v mnoha širších balících, nyní je obsaženo i v Productivity Power Tools.
    • Code Contracts od Microsoftu (Free) – snažili jsme se je několik let ve firmě používat až jsme na ně definitivně zanevřeli v okamžiku, kdy jsme nenašli záměr jejich reimplementace nad Roslyn. Jejich stávající implementace pomocí post-compile rewriteru je zoufale pomalá a naprosto neodpovídající přidané hodnotě. Nakonec jsme si vytvořili vlastní tradiční implementaci s překrývající syntaxí, která sice umí jen základní scénáře typu Requires(), Assert(), Assume(), zato se časy buildů našich projektů vrátily z minut na vteřiny.
    • Virtual CloneDrive (Free) – Virtuální CD/DVD mechanika pro připojení .ISO souborů. Nyní si bohatě vystačím s windowsím Mount…
    • inSSIDer (kdysi Free) – Wi-Fi monitor. Zobrazí obsazení kanálů, sílu signálu jednotlivých AP, atp. Hodí se k vyhledání volného místa pro vlastní Wi-Fi, popř. k rychlé diagnostice/přehledu.

Podobné seznamy