Алекс
аа, ок) тогда я не въехал) Теперь понятно
Sheldhur
типа как qip, где протоколы добавляются
Sheldhur
или gajim или qip где полно всяких расширений
Anonymous
ну, даже не знаю. в большинстве решений такие вещи через event системы и DI делаются
Sheldhur
ну я немного читал и event как раз не гуд
Anonymous
считай, если твоё собственное приложение построено на библиотеках, которые можно перезаписывать через DI, и библиотеки работают с event'ами - ну вот и удобная для плагинов архитектура
Алекс
как если ты делаешь например тесктовый редактор на js, и хочешь сделать для него скриптовой язык для расширения пользователями. подписываюсь под вопросом
Anonymous
мммммм
Anonymous
ну такое. всё сильно зависит от области расширения
Anonymous
может быть и программное API для плагинов. это самое "неглубокое" внедрение. а можно хоть в ядро их пускать
Anonymous
проще идти от задачи
Sheldhur
ну смотря на gajim и qutim, то там расширения всё что угодно делают
Sheldhur
в рамках мессенджера естесвенно
Sheldhur
в основном с сообщениями конечно взаимодействуют
Anonymous
не берусь утвеждать, но насколько я помню - QIP давал API, через которые можно было регистрировать свои обработчики протоколов, и API для создания всяких GUI в самом мессенджере
Anonymous
программное API имею в виду. export-функции в dll'ках
Sheldhur
Anonymous
мммм
Anonymous
ну вообще, идеальная архитектура в таком случае, когда всё что делает ядро - подключает/отключает плагины
Anonymous
и каждый плагин может как подключиться к чъему-то API, так и зарегистрировать своё, с которым могут работать
Sheldhur
ну вот, хотелось бы тонкости почитать
Sheldhur
чтобы не наступать на грабли
Anonymous
самому тоже теперь интересно стало)
Алекс
https://github.com/c9/architect
Алекс
Похоже на то что нужно
Алекс
моя удочка: [node app plugin system]
Алекс
но найти сложно
Anonymous
на самом деле, мало чем отличается от обычной архитектуры node модулей
Алекс
обычно по таким запросам попадаются модули для постоения программистом приложения, а не модули расширения приложения пользователями
Sheldhur
ну вот идея, чтобы пользователи расширения писали
Anonymous
интересны были бы какие-нибудь плюшки такой архитектуры. не просто асинхронные подключения, но и разруливания зависимостей из коробки, грамотное слежение за областями видимости и т.п.
Sheldhur
чтобы в настройках\меню новые пункты добавлялись
Sheldhur
типа логин\пароль
Sheldhur
ну так и будет
Anonymous
ну это ты просто шаришь функцию createMenuItem(text, handler) и всё. GUI это ведь по сути тоже отдельный модуль, шарящий какие-то свои возможности в окружение
Алекс
# С появлением лямбд в js хочется записывать функции выражениями (Expression), а не операторами (Statement) ?: вместо if then else throw(...) через библиотеку, а не throw ... и т.д. или например вместо: .then(val => {const res = fn(val); return check(res) && res}) так: .then(val => okPass(fn(val), check)) где okPass = (v, cond) => cond(v) && v Таким путём например идёт python как вам использование такой функции как okPass, как бы её понятнее называть? Кажется, что было бы круто иметь языковую конструкцию для такого приёма.
Дима
Без data last
Алекс
data last?
Дима
data last?
const selector = P( R.prop('value'), R.when( isArray, R.last ) ) const result = selector ( anyData )
Алекс
ramda?
Дима
Ну)
Алекс
а что такое P?
Алекс
Прикольно, кажется, я уже вырос из lodash и готов к рамде)
Дима
а что такое P?
R.pipe, их слишком много, чтобы они занимали 6 символов в строчке, уже на автомате так пишется)
Алекс
столько вокруг Lo миксинов накручиваю
Алекс
А как вам такая штука? http://npmapi.invntrm.ru это как npm repo %package%, но в омнибоксе браузера и в Alfred (macOS Spotlight like)
Oleg
Как проверить объект на пустоту?
Oleg
const info = {} if (info) { // true }
Алекс
в общем случае — bad practice так делать
Алекс
_.empty(val)
Oleg
Object.keys(obj).length — длинно
Алекс
Проверяет именно на пустоту '' [] {}, но 0 будет давать true
Oleg
_.empty(val)
lodash не вшили в es6?
Алекс
:)
Алекс
либо лаконично, либо нативно
Michael
Как проверить объект на пустоту?
Проверяй наличие в нём нужных свойств
Алекс
Или заведи отдельную переменную-счётчик, например, при добавлении полей инкрементируй
Michael
Единственно пустой объект — это Object.create(null)
Michael
Ибо не прототипов, ни свойств
Michael
Ни*
Ale
ну или Map юзай
Алекс
я бы просто функцию вверху объявил: const empty = obj => Boolean(Object.keys(obj).length)
Алекс
@ZeroBias А Ramda умеет так же как и Lodash превращать цепочку map().map()... в один внутренний цикл вместо N циклов?
Алекс
Как там вообще с производительностью?
Oleg
Как удалить элемент из объекта?
Алекс
delete obj.prop но это bad practice обычно ибо портит внутренние jit оптимизации и просаживает немного скорость альтернатива: obj.prop = undefined
Дима
@ZeroBias А Ramda умеет так же как и Lodash превращать цепочку map().map()... в один внутренний цикл вместо N циклов?
Может, там так работает чуть ли не половина библиотеки) Производительность оценивал, когда делал на ней мини-интерпретатор, ~20 тысяч вызовов всей библиотеки спокойно умещались в пол секунды работы программы
Алекс
.
Sheldhur
какую IDE используете для ноды? NetBeans с плагином как?
Алекс
нет конечно
Алекс
NetBeans уже стал историей webstorm, sublime, atom, vim
Дима
vscode)
Sheldhur
вим сомсем хардкор
Sheldhur
Sheldhur
не могу в вим
Vladimir
> @mxtnr ибо портит внутренние jit оптимизации и просаживает немного скорость Неправда же
Алекс
Я все 4 использую. Ноорм, везде свои ништяки