Evoluce

Dlouho, dlouho nepřibyl tu nový příspěvek… Důvod je prostý: začal jsem experimentovat se statickým generátorem Hugo a založil anglický blog, kam teď hromadím své poznatky, poznámky z prezentací a projektů. Není to jen tak samoúčelné – moje práce je teď mezinárodní, takže veškerý obsah stejně tvořím primárně anglicky.

Kromě toho každé dva týdny nahráváme podcast v češtině „od vývojářů pro vývojáře“. Poslechněte ;)

https://bit.ly/netczpodcast

Evoluce tedy pokračuje, jenom už ne tady.

Multilingual App Toolkit ve VS 2017

Visual Studio 2017 podporuje nástroj pro lokalizaci softwaru Multilingual App Toolkit, jenom je potřeba kromě extension ve VS nainstalovat i balíček pro Visual Studio 2015.

Pomocí instalátoru, který se skrývá pod tlačítkem Download.

Potom je potřeba v IDE nastavit, že soubory s příponou XLF se budou otvírat pomocí Multilingual Editoru (Open With… > Multilingual Editor > OK).

Hyper-V uvnitř Hyper-V, aneb nested virtualization

Windows 10 Anniversary Update a Windows Server 2016 podporují v Hyper-V tzv. „nested virtualization“, tedy virtualizaci uvnitř jiné virtualizace. Donedávna to bylo pro Hyper-V nemožné a bránilo to například provozování mobilních emulátorů ve virtuálních strojích.

Dnes je ale situace jiná, nested virtualizaci je možné aktivovat pomocí PowerShellu.

  1. Ujistěte se, že máte aktivované Hyper-V a k němu Hyper-V Module for Windows PowerShell.
    1. Dá se nainstalovat přes Programs and Features > Turn Windows features on or off > Hyper-V > Hyper-V Management Tools (mám Windows v angličtině).
  2. Vytvořte v Hyper-V virtuální stroj, jako obyčejně.
    1. Ale musí běžet na Windows 10 Anniversary nebo Windows Server 2016
  3. Spusťte PowerShell na hostitelském počítači (na tom, z něhož budete virtuální stroj spouštět).
  4. Vypište si cvičně seznam virtuálek:
    Get-VM

  5. A aktivujte virtualizaci:
    Set-VMProcessor -VMName <nazev> -ExposeVirtualizationExtensions $true

A to je vše. Nyní stačí jen virtuální stroj spustit a také do něj doinstalovat Hyper-V.

Poznámky

Vypnout nested virtualization:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

Aktivovat MAC Address Spoofing:

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On

VSTS, Xamarin.Android a UI Testy

Visual Studio Team Services je vynikající služba pro kontinuální integraci, automatické buildy a testování. Práce s Xamarinem se nedávno mírně změnila, do jisté míry zjednodušila, ale na druhou stranu mírně přestala fungovat. Tohle jsou kroky, které ji zase zprovozní.

Rozkaz zní jasně:

  • proběhne build projektu Android aplikace, vznikne APK
  • proběhne build projektu UI testů
  • testy se pošlou na Xamarin Test Cloud
  • výsledné APK skončí ve složce drop

Výchozí šablona procesu „Xamarin.Android“ obsahuje všechny nutné kroky. Jenom momentálně (30. 11. 2016) nefungují. Je potřeba provést následující úpravy:

V kroku Build Xamarin.Android Project se nastaví napevno JDK verze 8.

image

V kroku Build solution **/*test*.csproj se do MSBuild Arguments doplní parametr:

/p:JavaSdkDirectory="C:/Program Files (x86)/Java/jdk1.8.0_102"

Oba kroky vedou k tomu, abychom se zbavili chyby s nízkou verzí API při kompilaci. Jenom MSBuild pro to nemá kolonku v UI a je potřeba ho instruovat v command line.

Ngrok – tunelujeme do localhostu

Jsou situace, kdy se hodí nabídnout svůj localhost na internetu. Třeba když vám na počítači běží chatbot a chcete ho přidat na Skype a otestovat ve skutečném klientovi. Nebo když si nejste jistí, zda mobilní emulátor správně komunikuje s lokální sítí.

V poslední době jsem si oblíbil Ngrok, nástroj, který dokáže takový tunel vykopat. Funguje velmi jednoduše – stáhnete si utilitku pro Windows, Linux nebo Mac, přidáte cestu k ní do PATH a pak jenom v příkazové řádce napíšete:

ngrok http 3678

image

Ngrok vám vygeneruje HTTP i HTTPS adresy a zajistí, že požadavek na ně se přes jeho servery protuneluje na localhost, na port 3678. Na obrázku je také vidět, jak se logují příchozí požadavky.

Tyto adresy nejsou perzistentní, takže jakmile Ngrok restartujete, dostanete nové. Stálé adresy jsou součástí placeného plánu.

Poznámka na konec: vyskakují-li v reakci na požadavky chyby jako „400 Bad Request“, nejspíš máte špatně nastavený Host Header. Řešení je prosté:

ngrok http [port] -host-header="localhost:[port]"

Případně:

ngrok http [port] -host-header=rewrite

RSS v C#

Kdo si nenapsal vlastní RSS čtečku (nebo alespoň něco, co ji tak či onak připomíná), ať hodí kamenem. Kdysi jsem jednu takovou sofistikovanou čtečku zpráv vyráběl taky a prozíravě si z ní vydestiloval knihovničku (DLL, ne knížky), která obsahovala všechno potřebné: RssFeed, RssArticle a tak…

Continue reading

UWP: Nezobrazí se Share UI

Tenhle problém dokáže pěkně potrápit. V jedné aplikaci jsem generoval obrázek, spojoval ho s Inkem a následně přes Share contract nabízel ke sdílení třeba do mailové aplikace. V emulátoru i na skutečném telefonu všechno fungovalo, dokud byl připojený debugger, nicméně když jsem aplikaci spustil rovnou ze seznamu, Share UI se nezobrazilo a nevyskočila ani žádná chyba.

Continue reading

Tip: Černá obrazovka u Android emulátoru

Visual Studio nabízí super Android emulátor postavený na Hyper-V (on se tedy dá používat i samostatně, bez VS, ale s ním je to samozřejmě lepší :) ). Stala se mi ale po spuštění taková nemilá věc – místo Androidu se zobrazila jenom černá obrazovka. Virtuální stroj běžel, debug se taky připojil, ale nebylo nic vidět.

Nakonec pomohlo vypnout OpenGL v souboru C:\Program Files (x86)\Microsoft XDE\10.0.10586.0\SKUs\Android\xdesku, odstraněním atributu:

GuestDisplayProvider="VsEmulator.OpenGLGuestDisplay"