TODO
- Team agreed on technology set
- Licenses, cost of infrastructure etc. covered
- Operating model (including SLAs) determined
TODO
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 |
import * as R from "ramda" | |
let Atom = R.curry((options, actions) => { | |
console.log(`@ Atom "${options.name || ""}" is called`) | |
return {$: "$"} | |
}) | |
let withLog = R.curry((options, Atom) => { | |
return (actions) => { | |
console.log(`@ Shell "withLog" is called`) |
My code from: https://gist.github.com/penguinboy/762197
let isPlainObj = (o) => Object.prototype.toString.call(o) == "[object Object]"
// this ^ is enough. If you check prototypes – you're doing it wrong. If somethings pretends to be plain – we have to accept that
// e.g. this: https://github.com/jonschlinkert/is-plain-object is an entirely WRONG approach
let flattenObj = (obj, keys=[]) => {
return Object.keys(obj).reduce((acc, key) => {
return Object.assign(acc, isPlainObj(obj[key])
/* | |
Pascal's Triangle | |
1 | |
1 1 | |
1 2 1 | |
1 3 3 1 | |
1 4 6 4 1 | |
The numbers at the edge of the triangle are all 1, and each number inside the triangle is the sum of | |
the two numbers above it. Write a procedure that computes elements of Pascal's triangle by means of |
Parallel – 2+ processes (or cores) | |
Concurrent – whatever | |
Parallel is for increasing throughput | |
Concurrent is for decreasing latency | |
Parallel is for non-interactive (performance) (few inputs, deterministic or non-deterministic) | |
Concurrent is for interactive (experience) (many inputs, non-deterministic) | |
Parallel – how fast it gets result |
// Publish-Subscribe | |
// Observable – Observer | |
// Publisher - Listener | |
// Emitter - Handler | |
/* | |
Updates: | |
0) off | |
1) once | |
2) raise event on add listener |
Nightmare.action("clickNth", function (selector, n, done) { | |
debug(".clickNth() on " + selector + ":" + n) | |
this.evaluate_now(function (selector, n) { | |
document.activeElement.blur() | |
var element = document.querySelectorAll(selector)[n] | |
if (!element) { | |
throw new Error('Unable to find element by selector: ' + selector) | |
} | |
var event = document.createEvent('MouseEvent') | |
event.initEvent('click', true, true) |