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)) |