Look for more options here: https://www.tailwindawesome.com
- Radix
Look for more options here: https://www.tailwindawesome.com
Charts are from different sources and thus colors are inconsistent, please carefully read the chart's legends.
Like this? Check React Native vs Flutter: https://gist.github.com/tkrotoff/93f5278a4e8df7e5f6928eff98684979
| Object Oriented Programming | |
| I Objects / Classes are main units of design | |
| II Objects are namespaces (expression problem, duality with Functional Programming) | |
| -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | |
| III Delegation / Inheritance (type dependency) | |
| IV Constructors (vs data constructors) | |
| V Mutability (shared state) | |
| VI Fluent API (http://paqmind.com/blog/fluent-api-debunked/) | |
| VII Instance |
This article shows how to apply Node.js Stream and a bit of Reactive programming to a real(tm) problem. The article is intended to be highly practical and oriented for an intermediate reader. I intentionally omit some basic explanations. If you miss something try to check the API documentation or its retelling(e.g.: this one)
So, lets start from the problem description. We need to implement a simple web scraper which grabs all the data from some REST API, process the data somehow and inserts into our Database. For simplicity, I omit the details about the actual database and REST API(in real life it was the API of some travel fare aggregator website and a Pg database)
Consider we have two functions(code of the IO simulator functions and the other article code is here):
getAPI(n, count) // pseudo API ca| Put this in your `local-configure.yml` file, add as many users as you need: | |
| users: | |
| - name: fulvio | |
| sudoer: yes | |
| auth_key: ssh-rsa blahblahblahsomekey this is actually the public key in cleartext | |
| - name: plone_buildout | |
| group: plone_group | |
| sudoer: no | |
| auth_key: ssh-rsa blahblahblah ansible-generated on default |
| Rx.Observable.timer(0, 1000) | |
| .map(i => `Seconds elapsed ${i}`) | |
| .subscribe(text => { | |
| const container = document.querySelector('#app'); | |
| container.textContent = text; | |
| }); |
| function main() { | |
| return { | |
| DOM: Rx.Observable.timer(0, 1000) | |
| .map(i => { | |
| return { | |
| tagName: 'h1', | |
| children: [`Seconds elapsed ${i}`] | |
| } | |
| }) | |
| } |
| function main() { | |
| return { | |
| DOM: Rx.Observable.timer(0, 1000) | |
| .map(i => `Seconds elapsed ${i}`) | |
| }; | |
| } | |
| const drivers = { | |
| DOM: function DOMDriver(sink) { | |
| sink.subscribe(text => { |
| let Rx = require(`rx`) | |
| function makeRequestProxies(drivers) { | |
| let requestProxies = {} | |
| for (let name in drivers) { | |
| if (drivers.hasOwnProperty(name)) { | |
| requestProxies[name] = new Rx.ReplaySubject(1) | |
| } | |
| } | |
| return requestProxies |
| ES7 | core.async |
|---|---|
async function() {...} |
(fn [] (go ...)) |
await ... |
(<! ...) |
await* or Promise.all(...) |
(doseq [c ...] (<! c)) |