CategoryNezařazené

MongoDB: validace schématu

Byť je MongoDB bezschématová databáze, a pane Bože díky za to, čas od času se objeví diskuse a témata, jak do ni roubovat nějaké schéma, nebo něco, co by se mohlo podobat definici struktury tabulek. Ono je už tohle zcestné, protože Mongo žádné tabulky nemá. Má kolekce. A kolekce je přesně to, co to slovo říka…

Takže pokud ani po té, co jste si uvědomili význam skova tabulka a kolekce a dál ve vás přetrvává potřeba do kolekce roubovat sloupce, pak mám pro vás dobrou zprávu 😀 Mongo má Schema Validation, což je jeho interní funkcionalita, která vám umožní na úrovni collections definovat validace schématu při vkládání, nebu updatování dokumentů.

Při pokusu insertnout, nebo updatovat dokument, který neprojde validací získáte info o tom, co je špatně.

Pro validaci ukládaných dat pak nepotřebujete žádné další ORM, nebo CRM, nebo logiku někam dál šněrovat…

Google Chrome: dark mode v MacOS

Pokud běžíte na Mekovi, pak už určitě používáte MacOS ve verzi Mojave, a jednou z jeho největších novinek je určitě dark mode. Samotný MacOS můžete přepnout do tmavého módu a některé aplikace, jako například Safari, už také umí dark mode a vše vypadá skvěle.

Nicméně ne všechny aplikace dark mode už podporují. Jednou z těch, které skutečně denně používám a dark mode zatím neumí je Chrome od Googlu.

Dobrou zprávou je, že Google chce dark mode do svého prohlížeče implementovat během přístího roku. 

A ještě lepší zprávou je, že Chromium už dark mode umí teď 😀

Jak na to?

Chromium --force-dark-mode

Pokud budete chtít spustit Chromium v dark modu jen v případě, že máte aktivovaný dárk mode v MacOS, pak spusttě následovně:

Chromium --enable-feature=DarkMode

Event driven

Abyste se někdy jednou mohli zabývat Event Driven Architecture, je dobré, abyste někdy před tím věděli, co je to třeba event, a že nutně nemusí znamenat jen třeba propagaci změny v DOMu, ale obecně jakoukoliv událost.

No a pokud se pohybujete na backendu a k tomu píšete jako já v JavaScriptu, či TypeScriptu, bylo by dobré vědět, že NodeJS má vlastní knihovnu Events.

Ale asi vůbec nejlepší ze začátku bude zkusit si, třeba i takto najivně, napsat svůj vlastní event driven kód. Třeba něco jako simulaci práce finanční burzy 🙂

Nepřekvapivým výsledkem pak může být toto:

Asi nejhezčím na tomto je, že logiku jak obchodníka, tak samotné burzy, můžete řešit zcela separátně a eventy řeší jen komunikační kanály mezi jednotlivými entitami. Celá myšlenka se dá silně rozvíjet a odměnou vám pak bude aplikace, která má úplně jiné parametry, chování, možnosti, než by vám nabídla nějaké mono-spagegy-super-truper-apka-se-silenou-sdilenou-logikou-a-modelem 😀

Je dobré vědět, že even driven nemusí být cloud, lambda funkce, nebo něco, na co si jako normální developer nesáhnete, ale můžete začít pěkně od sebe, bez jakéhokoliv frameworku, či externí knihovny.

AWS Technical Essentials

Rychlé prototypování JavaScriptu a TypeScriptu v MS VS Code

Znáte to: vyvíjíte aplikace a rádi byste si čas od času něco rychle odzkoušeli. Tím odzkoušeli myslím napsali nějaký kus kódu a hned byste rádi věděli co to dělá. Třeba okamžitě viděli obsah definované proměnné, výsledek volání funkce. A nejlépe bez toho, že byste museli celý svůj kód spouštět, nebo překládat a spuštět. A vůbec nejvíc kůůůůl by bylo, kdyby jste to viděli hned v kódu. Přímo tam, kde ho píšete, protože tam vás to přeci zajímá.

HOLLA!
mám pro vás pěkný plugin do MS Visual Studio Code.
Quokka!

Pěkně si píšete do playbooku nějaký kód, který se vám pod rukama přímo vykonává a do editoru se vém pěkně propisuje jeho výsledek. Super!

Dobré i například pro nějaké vyukové, nebo demonstrativní účely.

sleep(), nebo wait() v NodeJS

Znáte to: čas od času byste rádi na něco počkali. A zrovna to čekání není moc v souladu s asynchronní povahou samotného NodeJS.

NodeJS, narozdíl od sleep v PHP, nebo time.sleep v Pythonu, žádnou takovou funkcionalitu, zaplať pán bůh, nemá.

Proč byste měli třeba čekat?
Modelová situace: někde na vaší API, nebo někde úplně mimo váš dosah, spustíte například nějakým POST requestem proces, který nevíte kdy skončí, nebo jak dlouho bude trvat. Takže vám nezbude nic jiného, než se stále dokola ptát na nějakém endpointu, jestli už proces nedoběhl a API má pro vás data. No a abyste APInu nezahltily tunou nic neřešících requestů a nedostali se tak třeba na nějaký black list, je dobré mezi odesláním každého requestu nějakou dobu počkat a opakovaně se ptát až po nějakém rozumném časovém intervalu.

Třeba takto

Srdcem tohoto jednoduchého konceptu je jen využití Promise a díky syntax sugaru async/await, to pak celé vypadá takto imperativně, pochopitelně, pro každého péhápkáře 😀

Kód je tak dlouhý, protože v něm demonstruju krom samotnéo sleep() i vše kolem…

NodeJS: Threads, práce s vlákny

NodeJS je báječný, a to hlavně díky svému Async I/O. Dalším silným znakem je to, že NodeJS je Single Threaded Event Loop Architecture. Jednoduché, čitelné a výkoné paradigma pro webové aplikace stavějící na Request/Response modelu.

Na základě tětchto principů se NodeJS moc nehodi na takové věci, jako je Machine Learning, nebo Artificial Intelligence, jinými slovy, úlohy závislé na silné paralelizaci. Byť vzhledem k tom, že je samotný javascriptový engine napsaný v C++ a nabízí tak dost vysoký výkon.

Tedy až do teď! 🙂

Od verze 10.5.0 umí NodeJS pracovat s vlákny! Což z něj dělá prostředí vhodné i pro věci kolem strojového učení a umělé inteligence. Funkcionalitu vláken přináší modul worker_threads.

Modul je dostupný od verze 10.5.0 a jen v při spuštění s paramatrem
--experimental-worker, protože se zatím jedná o novinku.

Příklad spuštění javascriptového kódu v několika, v tomto případě ve 2 vláknech.

Z příkladu je jasné, že v procesu potomka můžete spouštět jakýkoliv javascriptový kód, sdílet s rodičovským procesem proměnné (paměť) a také posílat si navzájem zprávy. Vše, co byste po vícevláknových aplikací požadovali.

Dokumentace modulu worker_threads.

ES moduly v NodeJS

Modularita, co by nezbytná vlastnost jakéhokoliv programovacího jazyka pro psaní velkých aplikací, je v NodeJS zajištěna pomocí funkce require. Samotnou fyzcickou definici a implementaci pak zajišťuje CommonJS.

Takže takto v NodeJS

JavaScript a import

JavaScript, skrze svou specifikaci ECMAScript 2015 zavádí, mimo jiné, i nové klíčové slova import a export pro možnost modularizovat javasxriptový kód.
To dovoluje následující zápis kódu:

Tohle vám bude například fungovat, pokud píšete React, VueJS, nebo Typescript aplikaci, protože ta je teprve skrze nějaký transpiler kompilována do požadované verze JavaScriptu.

Nicméně v NodeJS import nefunguje… Zatím 🙂

node –experimental-modules

A tady přichází na scénu parametr příkazového řádku --experimental-modules, který vám umožní v NodeJS používat klíčové slovo import místo require. Přesně tak, jak byste jej použili v Reactí apce…
Opravdu píšu místo, protože obě možnosti zatím nejdou kombinovat.
Takže pokud spustíte NodeJS script s tímto parametrem, můžete použít novou syntaxi pro importování, ale samozřejmě i exportování na úrovni modulu:

Dalším rozdílem je samotná přípona souboru se zdrojákem. Původní require funguje v klasických .js souborech, nově import pak v souborech s příponou .mjs.
Samozřejmě můžete import přímo psát do.js souboru a spouštět pokaždé s potřebným parametren, ale je to proti zavedené konvenci a navíc, nejde na první pohlef vidět jaký způsob práce s moduly jste použili.

Moje doporučení?

Pište v TypeScriptu 🙂 budete moct v .ts souborech použít obě konstrukce pro import, ale vedle toho mnohem víc věcí, které JavaScript dělají skutečně silným programovacím jazykem.

NodeJS: JWT autorizace

JWT je docela jednoduchá metoda použitelné k autorizaci. Princip fungování asi nejlépe popíše samotný obrázek s diagramem:

Součástí vráceného tokenu mohou být jakákoliv data získaná při autorizaci na serveru, protože jsou vráceny zakódovaná. Data si takto můžete předávat v aplikaci dál. Každá zabezpečená routa může dostat do svého requestu dekódovaná data a dál s nimi pracovat

Opravdu jednoduchá implementace

Samotnou práci s JWT zajišťuje NPM balíček jsonwebtoken. Nejdůležitější je asi samotná funkce verifyToken jako Expressjs midleware funkce, ktará zajišťuje JWT autorizaci. Vše ostatni je jen obsluha jednotlivých rout…

POST /login – získání tokenu, kde v body je email a password
POST /data – zabezpečené načítání dat, kde v requestu musí být ‚token‘ získaný z /login a pak v odpovědi jsou požadovaná data.

Routa /data samozřejmě může fungovat i na metodě GET, ale pak by bylo potřeba přepsat autorizačni funkci midlewaru tak, aby token hledala například v hlavičce requestu. Nic složitého…

PHP v 2018

OK, taky jsem kdysi psal v PHP, jako snad každý, kdo dělal něco na Internetu… Nicméně k mému dobru, nikdy jsem neměl ambice psát nad PHP vlastní templejtovací systém (templejty v templejtách…), nebo ještě dál, celý framework… 🙂

Narazil jsem dnes na tohle video, kde autor PHP, Rasmus Lerdorf, popisuje aktuální stav PHP, tedy retrospektivně porovnává některé věci v PHP z minulosti s tím co je v PHP 7…

Jednou z věcí, kterou řekne někde skoro na začátku videa je, že PHP podle něj mělo být uplně něco jiného, než se z PHP dnes stalo…. Co k tomu dodat….

Myslím si, že Rasmus musí být strašně nasranej, když dnes vidí NodeJS, Rust, Go, WebAssembly a všechno kolem a on už kdysi tam někam mířil…

© 2018 pepa.holla.cz

Theme by Anders NorénUp ↑