Полнофункциональный, открытый движок wiki для построения документации.
Хорошо использовать, когда есть необходимость на своем сервере управлять технической документацией с версионированием, уровнями доступа, форматированием контента, управлением медиа файлами и др.
Хорошо использовать, когда есть необходимость на своем сервере управлять технической документацией с версионированием, уровнями доступа, форматированием контента, управлением медиа файлами и др.
А давайте поговорим про функциональное программирование? Функциональное программирование (ФП) - это раздел математики и парадигма программирования, в котором вычисление рассматривается как математическая функция:
f(x) = y
Как следствие мы можем выделить несколько свойств такого подхода: в функции не хранится состояние (stateless). Мы не можем воздействовать на то, что определено вне функции - иначе появляется побочный эффект (side effect), функция перестает быть чистой (pure function), функциональной. При вызове одной и той-же функции в одинаковым набором параметров мы всегда получаем одинаковый результат.
Математической основой ФП является лямбда-исчисления (https://en.wikipedia.org/wiki/Lambda_calculus)
В ссылках снизу вы сможете найти awesome functional programming + ссылка на книжку про функциональное программирование.
Лайкайте пост, если хотите продолжение о ФП, добавлю ссылки на популярные библиотеки для работы в функциональном стиле.
#функциональное_программирование
f(x) = y
Как следствие мы можем выделить несколько свойств такого подхода: в функции не хранится состояние (stateless). Мы не можем воздействовать на то, что определено вне функции - иначе появляется побочный эффект (side effect), функция перестает быть чистой (pure function), функциональной. При вызове одной и той-же функции в одинаковым набором параметров мы всегда получаем одинаковый результат.
Математической основой ФП является лямбда-исчисления (https://en.wikipedia.org/wiki/Lambda_calculus)
В ссылках снизу вы сможете найти awesome functional programming + ссылка на книжку про функциональное программирование.
Лайкайте пост, если хотите продолжение о ФП, добавлю ссылки на популярные библиотеки для работы в функциональном стиле.
#функциональное_программирование
Продолжаем говорить о функциональном программировании.
Давайте рассмотрим жаргон функциональных программистов, начнем с терминов, которые у всех на слуху.
Функция высшего порядка (high order function / HOF) - это функция, которая принимает в параметрах или возвращает другую функцию:
Лямбда (Lambda) - это анонимная функция, которая может использоваться как значение. Лямбды могут быть присвоены переменным. Лямбды могут передаваться в функции высшего порядка в качестве аргументов.
;(
Сегодня в ссылке под статьей популярная библиотека на javanoscript для работы в функциональном стиле.
#функциональное_программирование
Давайте рассмотрим жаргон функциональных программистов, начнем с терминов, которые у всех на слуху.
Функция высшего порядка (high order function / HOF) - это функция, которая принимает в параметрах или возвращает другую функцию:
const filter = (predicate, xs) => xs.filter(predicate)
const is = (type) => (x) => Object(x) instanceof type
filter(is(Number), [0, '1', 2, null]) // [0, 2]
Лямбда (Lambda) - это анонимная функция, которая может использоваться как значение. Лямбды могут быть присвоены переменным. Лямбды могут передаваться в функции высшего порядка в качестве аргументов.
;(
function (a) {
return a + 1
})
;(a) => a + 1
const add1 = (a) => a + 1
[1, 2].map((a) => a + 1)
Сегодня в ссылке под статьей популярная библиотека на javanoscript для работы в функциональном стиле.
#функциональное_программирование
Новый проект из цикла "Это что на javanoscript?"
Isomorphic git - git, написаный на javanoscript. Работает в браузерах и в node.js. Использует тот же формат файлов для хранения информации о изменениях, что и обычный git.
https://github.com/isomorphic-git/isomorphic-git
Isomorphic git - git, написаный на javanoscript. Работает в браузерах и в node.js. Использует тот же формат файлов для хранения информации о изменениях, что и обычный git.
https://github.com/isomorphic-git/isomorphic-git
GitHub
GitHub - isomorphic-git/isomorphic-git: A pure JavaScript implementation of git for node and browsers!
A pure JavaScript implementation of git for node and browsers! - isomorphic-git/isomorphic-git
Срочно в номер! 18 декабря 2019-го года вышла 8-я версия javanoscript engine V8:
Performance (size & speed)
- занимает ~40% меньше памяти
- оптимизация выполнения built-in fns
JS
- Optional chaining
( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining )
- Nullish coalescing
( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator )
Все подробности по ссылке!
Performance (size & speed)
- занимает ~40% меньше памяти
- оптимизация выполнения built-in fns
JS
- Optional chaining
const nameLength = db?.user?.name?.length;( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining )
- Nullish coalescing
props.enabled ?? true( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator )
Все подробности по ссылке!
Следующие 2 термина из жаргона функционального программиста это моноид и монада. Итак давайте разберемся, что это такое и зачем это нужно:
Моноид (monoid) - объект с функцией, которая может комбинировать текущий объект с объектом такого-же типа. Например:
1 + 1
[1, 2].concat([3, 4])
Когда мы говорим о моноидах, то должен существовать нейтральный элемент (identity), который при комбинировании не влияет на текущий объект:
1 + 0
0 - нейтральный элемент (identity)
[1,2].concat([])
[] - нейтральный элемент (identity)
Монада (Monad) - сущность из мира функционального программирования, которая используется для композиции функций. Для простоты понимания можно сказать, что при помощи монад однотипные функции выстраиваются в цепочку. Пример:
// Implementation
Array.prototype.chain = function (f) {
return this.reduce((acc, it) => acc.concat(f(it)), [])
}
// Usage
Array.of('cat,dog', 'fish,bird').chain((a) => a.split(',')) // ['cat', 'dog', 'fish', 'bird']
// Contrast to map
Array.of('cat,dog', 'fish,bird').map((a) => a.split(',')) // [['cat', 'dog'], ['fish', 'bird']]
На практике монадами называют объекты, у которых есть функции of и chain. chain похож на map, за исключением того, что он производит разложение вложенных объектов. chain так же известен как flatmap или bind.
Больше про монады в статье по ссылке внизу.
#функциональное_программирование
Моноид (monoid) - объект с функцией, которая может комбинировать текущий объект с объектом такого-же типа. Например:
1 + 1
[1, 2].concat([3, 4])
Когда мы говорим о моноидах, то должен существовать нейтральный элемент (identity), который при комбинировании не влияет на текущий объект:
1 + 0
0 - нейтральный элемент (identity)
[1,2].concat([])
[] - нейтральный элемент (identity)
Монада (Monad) - сущность из мира функционального программирования, которая используется для композиции функций. Для простоты понимания можно сказать, что при помощи монад однотипные функции выстраиваются в цепочку. Пример:
// Implementation
Array.prototype.chain = function (f) {
return this.reduce((acc, it) => acc.concat(f(it)), [])
}
// Usage
Array.of('cat,dog', 'fish,bird').chain((a) => a.split(',')) // ['cat', 'dog', 'fish', 'bird']
// Contrast to map
Array.of('cat,dog', 'fish,bird').map((a) => a.split(',')) // [['cat', 'dog'], ['fish', 'bird']]
На практике монадами называют объекты, у которых есть функции of и chain. chain похож на map, за исключением того, что он производит разложение вложенных объектов. chain так же известен как flatmap или bind.
Больше про монады в статье по ссылке внизу.
#функциональное_программирование
Это что на Javanoscript?
WebTorrent - torrent client написаный на javanoscript, который работает и в браузере и в node.js.
https://github.com/webtorrent/webtorrent
WebTorrent - torrent client написаный на javanoscript, который работает и в браузере и в node.js.
https://github.com/webtorrent/webtorrent
GitHub
GitHub - webtorrent/webtorrent: ⚡️ Streaming torrent client for the web
⚡️ Streaming torrent client for the web. Contribute to webtorrent/webtorrent development by creating an account on GitHub.
State Of Javanoscript 2019 🔥
Тренды, Фреймворки, Зарплаты
Скандалы, Интриги, Расследования
https://t.co/qcbd2kkHKK?amp=1
Тренды, Фреймворки, Зарплаты
Скандалы, Интриги, Расследования
https://t.co/qcbd2kkHKK?amp=1
Stateofjs
The State of JavaScript 2019
Discover the most popular JavaScript features & technologies of the year.
Это что на JavaScript?
Brain.js - библиотека для создания нейронных сетей, написана на JavaScript. Работает в браузерах и в node.js. Есть GPU ускорение. Быстрая, простая и легкая в использовании библиотека.
https://github.com/BrainJS/brain.js
Brain.js - библиотека для создания нейронных сетей, написана на JavaScript. Работает в браузерах и в node.js. Есть GPU ускорение. Быстрая, простая и легкая в использовании библиотека.
https://github.com/BrainJS/brain.js
GitHub
GitHub - BrainJS/brain.js: 🤖 GPU accelerated Neural networks in JavaScript for Browsers and Node.js
🤖 GPU accelerated Neural networks in JavaScript for Browsers and Node.js - BrainJS/brain.js
Библиотека для работы со всякими математическими штуками, например можно легко переводить разные градусы Цельсия в Фаренгейта, дюймы в сантиметры и т.п.
Можно сказать, что это инженерный калькулятор на javanoscript.
https://github.com/josdejong/mathjs
Можно сказать, что это инженерный калькулятор на javanoscript.
https://github.com/josdejong/mathjs
GitHub
GitHub - josdejong/mathjs: An extensive math library for JavaScript and Node.js
An extensive math library for JavaScript and Node.js - josdejong/mathjs
Github Trending #4
- https://github.com/nuxt/nuxt.js - Vue.js Meta Framework to create complex, fast & universal web applications quickly.
- https://github.com/laurent22/joplin - Joplin - an open source note taking and to-do application with synchronization capabilities for Windows, macOS, Linux, Android and iOS. Forum: https://discourse.joplinapp.org/ https://joplinapp.org
- https://github.com/gatsbyjs/gatsby - Build blazing fast, modern apps and websites with React https://www.gatsbyjs.org
- https://github.com/renovatebot/renovate - Universal dependency update tool that fits into your workflows. https://renovatebot.com
- https://github.com/typicode/json-server - Get a full fake REST API with zero coding in less than 30 seconds (seriously)
- https://github.com/vuejs/vue-test-utils - 🔬 Utilities for testing Vue components https://vue-test-utils.vuejs.org
- https://github.com/scullyio/scully - The Static Site Generator for Angular apps
#github_trending
- https://github.com/nuxt/nuxt.js - Vue.js Meta Framework to create complex, fast & universal web applications quickly.
- https://github.com/laurent22/joplin - Joplin - an open source note taking and to-do application with synchronization capabilities for Windows, macOS, Linux, Android and iOS. Forum: https://discourse.joplinapp.org/ https://joplinapp.org
- https://github.com/gatsbyjs/gatsby - Build blazing fast, modern apps and websites with React https://www.gatsbyjs.org
- https://github.com/renovatebot/renovate - Universal dependency update tool that fits into your workflows. https://renovatebot.com
- https://github.com/typicode/json-server - Get a full fake REST API with zero coding in less than 30 seconds (seriously)
- https://github.com/vuejs/vue-test-utils - 🔬 Utilities for testing Vue components https://vue-test-utils.vuejs.org
- https://github.com/scullyio/scully - The Static Site Generator for Angular apps
#github_trending
Channel name was changed to «Math.random(): javanoscript community»
Это что на javanoscript?
Удивительный проект, написаный на javanoscript - система оптического распознавания символов (OCR). Работает в браузере (!) и в node.js. Распознает 100+ языков!
https://github.com/naptha/tesseract.js
Удивительный проект, написаный на javanoscript - система оптического распознавания символов (OCR). Работает в браузере (!) и в node.js. Распознает 100+ языков!
https://github.com/naptha/tesseract.js
GitHub
GitHub - naptha/tesseract.js: Pure Javanoscript OCR for more than 100 Languages 📖🎉🖥
Pure Javanoscript OCR for more than 100 Languages 📖🎉🖥 - naptha/tesseract.js
Новая статья от адепта RxJS, нашего постоянного автора и активного участника нашего комьюнити.
О чем статья:
О том как при помощи синтаксиса регулярных выражений реализовать drag-n-drop в RxJS:
/DM*U/.exec(
mouseDown$,
mouseMove$,
mouseUp$
)
https://dev.to/kosich/regexp-for-reactive-streams-143g
#костины_истории
О чем статья:
О том как при помощи синтаксиса регулярных выражений реализовать drag-n-drop в RxJS:
/DM*U/.exec(
mouseDown$,
mouseMove$,
mouseUp$
)
https://dev.to/kosich/regexp-for-reactive-streams-143g
#костины_истории
DEV Community
RegExp syntax for Observables: Never Been Easier!
Imagine we need to implement a drag-n-drop behavior. For that, we have three event streams: mousemov...
Продолжаем говорить о функциональном программировании и сегодня речь пойдет о следующих терминах: композиция функций, каррирование и авто-каррирование.
Композиция функций (Function Composition) - соединение функций для формирования новой функции, в которой результат первой функции передается в качестве аргумента во вторую функцию. Математически это выглядит так:
Каррирование(Curring) - конвертация функции из функции, которая принимает несколько входящих аргументов, в функцию, которая принимает один аргумент за раз.
Каждый раз вызывая функцию с одним аргументом, мы получаем новую функцию, до тех пор пока не получим все аргументы:
Сегодня в ссылке отличный видео курс по функциональному программированию.
#функциональное_программирование
Композиция функций (Function Composition) - соединение функций для формирования новой функции, в которой результат первой функции передается в качестве аргумента во вторую функцию. Математически это выглядит так:
F(x) = g(f(y))
В коде так:
const compose = (f, g) => (a) => f(g(a)) // Definition
const floorAndToString = compose((val) => val.toString(), Math.floor) // Usage
floorAndToString(121.212121) // '121'
Каррирование(Curring) - конвертация функции из функции, которая принимает несколько входящих аргументов, в функцию, которая принимает один аргумент за раз.
Каждый раз вызывая функцию с одним аргументом, мы получаем новую функцию, до тех пор пока не получим все аргументы:
const sum = (a, b) => a + b
const curriedSum = (a) => (b) => a + b
curriedSum(40)(2) // 42.
const add2 = curriedSum(2) // (b) => 2 + b
add2(10) // 12
Автоматическое каррирование (Auto Currying) - преобразование функции, принимающей несколько аргументов, в новую функцию. В новой функции, если передавать меньшее количество аргументов, то она вернет новую функцию, которая ожидает оставшиеся аргументы. В популярном фреймворке ramda есть специальная функция curry, реализующая автоматическое каррирование.
const add = (x, y) => x + y
const curriedAdd = _.curry(add)
curriedAdd(1, 2) // 3
curriedAdd(1) // (y) => 1 + y
curriedAdd(1)(2) // 3
Сегодня в ссылке отличный видео курс по функциональному программированию.
#функциональное_программирование