Záznam ze Vzdělávacího okénka HAVIT z 26. dubna 2018, kde Jiří Kanda prezentoval Temporal Tables na Microsoft SQL Serveru. Nahrávka je publikována na našem HAVIT YouTube Channelu.
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:
- Jediná vývojářská mainline = master.
- Rebase upřednostňujeme před merge (přehlednější historie).
- Release označujeme tagem „release/…“ (typicky do master).
- Hotfix = branch „hotfix/…“ z nasazeného commitu (dle version.txt nebo release-tagu) + nový release tag + merge do master + delete branch
- Feature branching („feature/…“) pouze ve vybraných situacích, pokud vím co chci, proč to dělám a umím to.
- 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:
- Keynote: Uvítání [Robert Haken, Miroslav Holec]
- Keynote: Novinky v Azure PaaS [Robert Haken]
- Power BI a otevřená data [Karel Rejthar]
- Úvod do Azure Bot service – aneb jak stvořit vlastního (ro)Bota [Jan Vaněk]
- Serverless (Azure Functions) a Cosmos DB (NoSQL) [Valdermar Zavadský]
- Vývoj SPA v React + Redux [Pavel Kříž]
- Diagnostika aplikací v Azure App Service [Robert Haken]
- Kubernetes jako služba v Azure: proč kontajnery a jak na ně [Tomáš Kubica]
- Seznámení s GITem [Martin Havel]
- Azure CDN a jak ji začít rozumně používat [Jiří Činčura]
- Azure IoT [Jan Holešínský, Filip Herudek]
- Trailer
…toť z ročníku 2018 vše. Ostatní záznamy se buď nepodařily technicky, nebo si přednášející nepřál nahrávání.
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.
- github.com/LukasRada/rangee – projekt, zdrojové kódy
- lukasrada.github.io/rangee/ – DEMO
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ě:

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.

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ů:
Cloud Design Patterns – záznam, slides [WUG Days Brno 04/2018]
Záznam z přednášky pro konferenci WUG Days Brno z 8. dubna 2018. Je publikován na našem HAVIT YouTube Channelu.
Materiály
- 2018-04-08 – WUG Days Brno – Cloud Design Patterns.pdf – slides
- Microsoft Azure Docs: Cloud Design Patterns
Dotčená témata
- Anti-Corruption Layer
- External Configuration Store
- .NET 4.7.1 – ConfigurationBuilders
- Gateway Aggregation
- Gateway Offloading
- Gateway Routing
- Health Endpoint Monitoring
- Sidecar
- Ambassador
- Cache-Aside
- Locking with Double Checking
- Static Content Hosting
- Sharding – Lookup Strategy, Range Strategy, Hash Strategy
- Throttling
- Retry
- Bulkhead
- Circuit Breaker
- Materialized View
- Event Sourcing
- Compensating Transaction
- CQRS – Command and Query Responsibility Segregation
- Valet Key
Efektivní schůzky – záznam, slides [HAVIT, 4.4.2018]
Záznam z interní prezentace HAVIT z 4. dubna 2018. Je publikován na našem HAVIT YouTube Channelu.
Dotčená témata (struktura prezentace):
- Účel / Cíl
- Věcný, socializační
- Příprava schůzky
- Účel / Cíl
- Je schůzka to pravé?
- Správní účastníci?
- Forma, délka
- Příprava
- Pozvání na schůzku
- Průběh schůzky
- Účel / Cíl
- Jeden leader
- Flow vs. struktura
- Zapojení účastníků vs. dominátor
- Myšlenkové zapojení
- Situování
- Připomenutí Účelu / Cíle
- Závěr schůzky
- Účel / Cíl
- Shrnutí
- Co dál?
- Actionable Items
- Side Topics
- Zápisky, WYSIWYG
- Vizuální pomůcky
- Respekt
- Tolerance, pomoc
- Poznejte svoje slabiny
- Účel / Cíl + Respekt + Agilita