Mongotron

Narazil jsem na Mongotron, skvělou aplikaci pro práci s MongoDB. Konkrétně pro práci s daty uloženými někde v Mongu. Sympatické na Mongotronu je to, že je napsaný v JavaScriptu a díky Electronu se tváří jako plnohodnotná desktopová apklikace. Mongotron je vzhledem velice podobný Atomu, takže pokud jste příznivcem Atomu, rychle si Mongotron oblíbíte.

mogotron

Mongotron je OpenSource a je na všech platformách zdarma.

CoffeeScript Application Development Cookbook

9691OS

CoffeeScript Application Development Cookbook

Jemný úvod do funkcionálního programování

Jestli píšete v JavaScriptu a rádi byste rozšířili své konvenční programátorské vidění světa o funkcionální programování, pak si určitě přečtěte článek A practical introduction to functional programming na blogu Mary Rose Cook.

Atom a terminál

Nedovedu si představit, že bych něco vyvíjel a nepoužíval u toho terminál. A je jedno v jaké fázi vývoje: kódování, deploy aplikace na server, práce s git repozitáčem, či cokoliv jiného… Terminál potřebuji stále. A proto vždy spouštím nejdřív xTerm2 a v něm pak Atom.
Mezi jednotlivými aplikacemi přepínám, což není nejpohodlnější a taky nejefektivnější a nejpřehlednější. Vždy musíte řešit jak nastavit okna abyste viděl to co chcete…

No a tady pomůže integrace terminálu přímo do Atomu. Různých pluginu pro Atom existuji více. Většinu z nich jsem opravdu vyzkoušel, abych si nakonec jako nejleší vybral terminal-plus. Krom toho, že opravdu umí vše co od terminálu očekáváte, má skvělou integraci do Atomu. Všechno spolu dobře a pěkně vypadá, radost terminál použít.

atom-terminal-plus

atom-terminal-plus

Plugin má skvělé konfigurační možnosti a dá se nastavit téměř cokoliv. Co mě potěšilo je kompatabilita vyhledu s barevným schématem atom-material-ui, který používám. Bomba je možnost spustit/otevřít více terminálových oken, ty si barevně odlišit a třeba i přejmenovat. Do terminálu se odkudkoliv v editoru pohodlně dostanete klávesovou zkratkou ctrl+`.

Terminál v Atomu je skutečně užitečný plugin, zvyšující efektivitu práce v něm.

Co byste měli vědět o NPM

npmjs.com

Vytvořil jsem si účet na NpmJS.com. Myslím si, že už jsem v JavaScriptu pod NodeJS něco napsal a asi přišel čas něco vrátit komunitě zpět. Chystám se z toho co jsem už napsal vytovřit nějaké opakovaně použitelné báličky publikovat na NpmJS a dát tak volně k použití všem. Nečekejte nic světobornéhé.
Dalším důvodem proč to dělám je interní osahání si procesů na NpmJS a asi nejlíp jak se do toho dostat je sám publikovat.

NodeJS, ExpressJS, Jade a Session

Jade je super šablonovací jazyk. Pokud jste opravdu líný programátor, pak se vám bude líbit. Jeho asi největší výhodou je maximální úspornost. Vůbec se nepoužívají párovací tagy a celý kód je strukturovaný jen dle odsazení. Něco ala Python. Až si na to zvyknete, bude vám HTML opravdu vadit…

Jade template:

Kód je daleko skromnější a přitom daleko přehlednější…
A možná i díky tomu se dá do šablony lépe integrovat jakákoliv aplikační logika. Přímo na serveru můžete v šablonu ohýbat, modifikovat… Něco jako je celé PHP 🙂 A přitom jasně zůstává vaše NodeJS aplikace nad šablonou, které jen předáváte nějaka data a necháváte ji dál dělat co má. A to z ní děla další živý kus celé aplikace. Beze sporu výhoda, ať už si o aplikační logice v prezentační vrstvě myslíte cokoliv…

No a tady se do hry dotávájí sessions, proměnné jen mezi aplikací a konkrétním uživatelem vaší aplikace (webové stránky).
Ty se v NodeJS a ExpressJS asi nejčastěji řeší přes NPM balíček express-session a pak nějaký backend pro jejich ukládání, ale to nutně není podmínkou. Balíček se postará i o toto. Já tedy používám connect-redis, ale je na vás jak své session proměnné budete ukládat.

A teď se dostávám k tomu jak to celé funguje spolu dohromady.

NodeJS, ExpressJS, Jade, Session

Pokud už pracujete se sessions, pak k nim máte přístup v objektu request a to je vám v momentě. kdy už jste v prezentační fázi a pracujete s objektem response celkem k ničemu.
Řešení je nasnadě: proměnnou session umístit do datové struktury, kterou pak předáte funkci render, která se postará o vykreslení šablony:
NodeJS obsluha pro routu /

Super, tohle funguje, ale pokud furt něco renderujete a máte hafo šablon, pak je to vopruz…

Alternativní řešení pomocí middleware

Abych měl k proměnné session přísup v každé jade šabloně a nemusel ji pokaždé předávat přes slovník s proměnnými ve funkci render. Napsal jsem si jednouduchou middleware funkci, která je volána pro každé zpracování requestu:

Proměnná session je tak dosupná přímo v Jade šabloně jen pomocí svého jména, jako byste ji předaly v objektu ve funkci render.

Holla!

Middleware je docela silná stránka frameworku ExpressJS. Můžete si sami napsat vlastní celou rouru obslužných rutin, které se budou postupně provádět. V každéé z nich mlžete mít nějakou logiku, zpracování dat a podobně. Síla. Extrémně použitelné.

MongoDB backup

JeduEdu používá jako svůj datastore technologii MongoDB (skvělá dokumentová databáze). Aby dostupnost databáze byla opravdu 100%, data jsou ukládána v ReplicaSetu, který tvoří 3 nezávislé fyzické servery. To znamená, že každý zápis se provádí na primary server a operace zápisu se považuje za úspěšnou, až minimálně jeden další server ReplicaSetu provede zápis u sebe. Skvělé.
Data jsou fyzicky na 3 různých místech. Další výhodou je, že k tomu, aby aplikace koretně stále fungovala stačí, aby fyzicky běžel jen jeden ze serveů. Servery nepadají každý den, ale stát se to může, ale že vám spadnou hned 3 servery je docela nepravděpodobné.

Dalším krokem k zabezpečení dat je jejich pravidelné zálohování. Bez ohledu na kolika strojích ReplicaSt běží, každý den se automaticky provádějí zálohy celé databáze JeduEdu. Opět na všech 3 strojích.

A aby záloh opravdu nebylo málo, pak čas od času spustím zálohování ze svého Macu, takže mám kopletní zálohu úplně mimi produkční prostředí a jsem schopen celou aplikaci, včetně backendu během okamžiku rozjet úplně někde jinde na něčem jiném.

Odzálohovat Mongo je neskutečně jednoduché a dá se dělat za reálného provozu bez nutnosti odstavení jakéhoholiv ze serverů v ReplicaSetu:

Výhodou ReplicaSetu je, že zálohovat můžete tak, že zastavíte některý ze slave serverů a odkopírujete celý adresář s databází na disku. Po nahození takto „zazálohované“ databáze můžeze slave server zase nahodit a on si automaticky sám dotáhne vše o co přišel po dobu co byl down. Super.

CAN’T STOP THE FEELING!

Sunshine in my pocket… Just imagine…

NodeJS: konvert CSV na JSON

Potřeboval jsem do MongoDB naimportovat hafo dat z Excelu. Nejjednodušší bylo XLS soubor uložit do CSV a pak jednotlivé řádky zkonvertovat na JSON objekty.
Asi takhle:

Nutno ještě dodat, že k tomuto existuje spousta NPM balíčku a když jsem s s převodem začínal, jasně že jsem šáhnul po nějakém z nich. Ale protože jsem neuspěl s implementací hned napoprvé, tak jsem si to napsal sám…
Načtení 684 řádku do pole JSON objektů na mém Macovi trvalo 0.144s….

© 2016 pepa.holla.cz

Theme by Anders NorénUp ↑