HAVIT GIT Workflow Standard [Robert Haken, HAVIT Vzdělávací okénko 19.4.2018]

Záznam ze Vzdělávacího okénka HAVIT z 19. dubna 2018, kde jsem prezentoval nový standard workflow pro používání GIT source control. Je publikován na našem HAVIT YouTube Channelu.

Základní pravidla workflow:

  1. Jediná vývojářská mainline = master.
  2. Rebase upřednostňujeme před merge (přehlednější historie).
  3. Release označujeme tagem „release/…“ (typicky do master).
  4. Hotfix = branch „hotfix/…“ z nasazeného commitu (dle version.txt nebo release-tagu) + nový release tag + merge do master + delete branch
  5. Feature branching („feature/…“) pouze ve vybraných situacích, pokud vím co chci, proč to dělám a umím to.
  6. V lokálním repo se invencím meze nekladou, chceme však Continuous Integration (např. častý rebase)

Global Azure Bootcamp Praha 2018 – záznamy z přednášek

Dne 21. dubna 2018 jsme společně s Miroslavem Holcem pořádali českou instancí celosvětové konference Global Azure Bootcamp.

Na našem HAVIT YouTube Channelu vám nabízíme záznamy z většiny prezentací.

Global Azure Bootcamp Praha 2018 – YouTube Playlist:

  1. Keynote:  Uvítání [Robert Haken, Miroslav Holec]
  2. Keynote: Novinky v Azure PaaS [Robert Haken]
  3. Power BI a otevřená data [Karel Rejthar]
  4. Migrace webové aplikace do Azure – postřehy z praxe [Jiří Kanda]
  5. Úvod do Azure Bot service – aneb jak stvořit vlastního (ro)Bota [Jan Vaněk]
  6. Serverless (Azure Functions) a Cosmos DB (NoSQL) [Valdermar Zavadský]
  7. Vývoj SPA v React + Redux [Pavel Kříž]
  8. Diagnostika aplikací v Azure App Service [Robert Haken]
  9. Kubernetes jako služba v Azure: proč kontajnery a jak na ně [Tomáš Kubica]
  10. Seznámení s GITem [Martin Havel]
  11. Azure CDN a jak ji začít rozumně používat [Jiří Činčura]
  12. Azure IoT [Jan Holešínský, Filip Herudek]
  13. Trailer

…záznamy budou postupně přibývat, jak je zpracováváme.

Podcast .NET.CZ (Episode.25) – Blazor, webový frontend, WebAssembly

Před pár dny jsem byl hostem podcastového pořadu .NET.CZ, kde jsme se bavili od vývoji webových frontendů, WebAssembly a Blazoru, frameworku pro vývoj single page applications (SPA) front-endů v .NET – C# a Razoru.

rangee – Serialize/Deserialize Range in HTML [Lukáš Rada, HAVIT Vzdělávací okénko 12.4.2018]

Záznam ze Vzdělávacího okénka HAVIT z 12. dubna 2018. Je publikován na našem HAVIT YouTube Channelu.

Svou open-source JavaScriptovou komponentu pro serializaci a deserializaci Range objektů (např. z window.getSelection) prezentoval Lukáš Rada.

Global Azure Bootcamp Praha – 21.4.2018 – pozvánka

Zveme vás na Global Azure Bootcamp Praha – 21.4.2018

Přednášející

  • Robert Haken
  • Tomáš Herceg
  • David Gešvindr
  • Jiří Činčura
  • Tomáš Kubica
  • Marek Chmel & Vladimír Mužný
  • David Gešvindr
  • a další osobnosti světa Azure!

Těšit se můžete na

  • Novinky v Azure PaaS
  • Azure Cosmos DB
  • Azure SQL
  • Zkušenosti s Azure CDN
  • Zkušenosti s migrací do Azure
  • Azure Bot Service
  • Power BI a otevřená data
  • Kubernetes
  • Azure IoT hub
  • Diganostické možnosti Azure App Service
  • a další přednášky nejen o Azure

V pátek v předtermínu nabitý workshop

  • Utilizing Azure Services for Data Science and Machine Learning

SQL: TDE, Always Encrypted [Jiří Kanda, HAVIT Vzdělávací okénko 5.4.2018]

Záznam ze Vzdělávacího okénka HAVIT z 5. dubna 2018. Je publikován na našem HAVIT YouTube Channelu.

Dotčená témata:

  • Transparent Data Encryption (TDE)
  • Always Encrypted
    • Deterministic vs. Randomized
    • sp_describe_parameter_encryption
    • Connection String: Column Encryption Setting=enabled

CORS a WebAPI

V rámci solution máme dva webové projekty – Web (javascriptová single-page aplikace) a WebAPI (backend s API). v ASP.NET Core 2.0. Řešili jsme problém, že nám nefungoval spolehlivě CORS – javascriptové requesty z Webu nedostávaly správné odpovědi od WebAPI. Chovalo se to velmi podivně i přesto, že lokálně vše fungovalo, a to i když aplikace běžely na různých portech.

Konkrétně:

  • Některé GET requesty fungovaly i v testovacím prostředí, ale POST, PUT a DELETE requesty nikdy.
  • GET requesty browser někdy zdvojoval (zejména v Safari na Macu), první vždy prošel (status code 200) a druhý neprošel (status code 403)
  • V Developer tools v Chrome, ani v Safari nejsou vidět autorizační hlavičky i přesto, že uživatel je přihlášený (při odchycení requestu Fiddlerem tam skutečně jsou). Ovšem na localhostu jsou vidět autorizační hlavičky vždy.

CORS v aplikaci máme nastaven celkem standardně a nepříliš restriktivně:

2018-04-10-CORS-settings

Kde byl(y) problém(y):

Nejdříve jsme neměli povolené všechny hlavičky (pozor zejména na Authorization, která není v Chrome Developer tools defaultně vidět). Nakonec jsme stejně skočili u AllowAnyHeader().

Důležité je mít povoleno AllowCredentials(), pokud řešíte přihlašování

Na co nám nejdéle trvalo přijít je, že je potřeba povolit anonymní autentifikaci i když v aplikaci žádné anonymní požadavky nejsou potřeba (povoluje se to v IIS na obrázku níže). Je potřeba na to ovšem myslet a v aplikaci si ošetřit, že uživatel musí být přihlášen při běžném přístupu do aplikace.

2018-04-10-CORS-IIS

Na pozadí CORS funguje tak, že vzdálený klient nejdříve udělá tzv. preflight request metodou OPTIONS a v hlavičce pošle informace, na jakou URL chce jakou metodou kdo přistupovat. Pokud není povolena anonymní autentifikace, OPTIONS požadavek selže (vrátí 401), protože v hlavičce preflight requestu se dle specifikace https://fetch.spec.whatwg.org/#cors-preflight-fetch autorizační hlavička neposílá. V takovém případě vzdálený klient není schopný zjistit, zda bude mít oprávnění udělat skutečný požadavek, a tak celá komunikace selže (nebo se chová nepředvídatelně – viz podivnosti výše).

Technické podrobnosti např. zde: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Nakonec pro přehlednost ještě schéma posílání CORS požadavků:2018-04-10-CORS-schema