- "The Non-Designer's Design Book", Robin Williams (book)
- "Don't Make Me Think", Steve Krug (book)
- Practical Typography (site)
function swap(i1, i2, xs) { | |
if (i1 == i2) return xs | |
return xs.reduce((z, x, i) => { | |
return i == i1 ? z : | |
i == i2 ? (i1 > i2 ? [...z, xs[i1], x] : [...z, x, xs[i1]]) : | |
[...z, x] | |
}, []) | |
} | |
// Например, переставить 'B' с i1 = 1 на i2 = 4 |
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 |