@nodejs_ru

Страница 280 из 2748
Danila
15.10.2016
12:01:25
мммммм

ну такое. всё сильно зависит от области расширения

может быть и программное API для плагинов. это самое "неглубокое" внедрение. а можно хоть в ядро их пускать

проще идти от задачи

Google
Sheldhur
15.10.2016
12:02:24
ну смотря на gajim и qutim, то там расширения всё что угодно делают

в рамках мессенджера естесвенно

в основном с сообщениями конечно взаимодействуют

Danila
15.10.2016
12:03:48
не берусь утвеждать, но насколько я помню - QIP давал API, через которые можно было регистрировать свои обработчики протоколов, и API для создания всяких GUI в самом мессенджере

программное API имею в виду. export-функции в dll'ках

мммм

ну вообще, идеальная архитектура в таком случае, когда всё что делает ядро - подключает/отключает плагины

и каждый плагин может как подключиться к чъему-то API, так и зарегистрировать своё, с которым могут работать

Sheldhur
15.10.2016
12:05:53
ну вот, хотелось бы тонкости почитать

чтобы не наступать на грабли

Danila
15.10.2016
12:06:20
самому тоже теперь интересно стало)

Alex
15.10.2016
12:07:29
https://github.com/c9/architect

Похоже на то что нужно

Google
Alex
15.10.2016
12:07:50
моя удочка: [node app plugin system]

но найти сложно

KlonD90
15.10.2016
12:08:26
модульная архитектура называется

Danila
15.10.2016
12:09:15
на самом деле, мало чем отличается от обычной архитектуры node модулей

Alex
15.10.2016
12:09:37
обычно по таким запросам попадаются модули для постоения программистом приложения, а не модули расширения приложения пользователями

Sheldhur
15.10.2016
12:10:14
ну вот идея, чтобы пользователи расширения писали

Danila
15.10.2016
12:10:17
интересны были бы какие-нибудь плюшки такой архитектуры. не просто асинхронные подключения, но и разруливания зависимостей из коробки, грамотное слежение за областями видимости и т.п.

KlonD90
15.10.2016
12:10:19
не совсем. все таки node модули это другая история. Делать плагины это значит что у тебя есть некая логика и ты ее расширяешь т.е. у тебя где-то есть хэндлеры какие-то или еще штуки которые в коде твоего приложения которые эти плагины подклчают без гемороя

Sheldhur
15.10.2016
12:10:38
чтобы в настройках\меню новые пункты добавлялись

KlonD90
15.10.2016
12:10:54
так ты лучше опенсорс сразу делай

Sheldhur
15.10.2016
12:10:57
типа логин\пароль

KlonD90
15.10.2016
12:10:58
пусть PR присылают

Sheldhur
15.10.2016
12:11:02
ну так и будет

Danila
15.10.2016
12:11:28
ну это ты просто шаришь функцию createMenuItem(text, handler) и всё. GUI это ведь по сути тоже отдельный модуль, шарящий какие-то свои возможности в окружение

Alex
15.10.2016
12:12:03
# С появлением лямбд в 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, как бы её понятнее называть? Кажется, что было бы круто иметь языковую конструкцию для такого приёма.

Alex
15.10.2016
12:13:40
data last?

Дмитрий
15.10.2016
12:18:17
data last?
const selector = P( R.prop('value'), R.when( isArray, R.last ) ) const result = selector ( anyData )

Alex
15.10.2016
12:18:51
ramda?

Google
Дмитрий
15.10.2016
12:19:00
Ну)

Alex
15.10.2016
12:19:07
а что такое P?

Прикольно, кажется, я уже вырос из lodash и готов к рамде)

Дмитрий
15.10.2016
12:20:31
а что такое P?
R.pipe, их слишком много, чтобы они занимали 6 символов в строчке, уже на автомате так пишется)

Alex
15.10.2016
12:20:41
столько вокруг Lo миксинов накручиваю

А как вам такая штука? http://npmapi.invntrm.ru это как npm repo %package%, но в омнибоксе браузера и в Alfred (macOS Spotlight like)

Oleg
15.10.2016
12:24:50
Как проверить объект на пустоту?

const info = {} if (info) { // true }

Alex
15.10.2016
12:25:18
в общем случае — bad practice так делать

_.empty(val)

Oleg
15.10.2016
12:25:34
Object.keys(obj).length — длинно

Alex
15.10.2016
12:25:49
Проверяет именно на пустоту '' [] {}, но 0 будет давать true

Oleg
15.10.2016
12:25:52
_.empty(val)
lodash не вшили в es6?

Alex
15.10.2016
12:25:57
:)

либо лаконично, либо нативно

マイク
15.10.2016
12:27:10
Как проверить объект на пустоту?
Проверяй наличие в нём нужных свойств

Alex
15.10.2016
12:27:14
Или заведи отдельную переменную-счётчик, например, при добавлении полей инкрементируй

マイク
15.10.2016
12:27:30
Единственно пустой объект — это Object.create(null)

マイク
15.10.2016
12:27:37
Ибо не прототипов, ни свойств

Google
マイク
15.10.2016
12:27:41
Ни*

Aleh
15.10.2016
12:28:50
ну или Map юзай

Alex
15.10.2016
12:30:21
я бы просто функцию вверху объявил: const empty = obj => Boolean(Object.keys(obj).length)

@ZeroBias А Ramda умеет так же как и Lodash превращать цепочку map().map()... в один внутренний цикл вместо N циклов?

Как там вообще с производительностью?

Oleg
15.10.2016
12:37:54
Как удалить элемент из объекта?

Admin
ERROR: S client not available

Alex
15.10.2016
12:38:15
delete obj.prop но это bad practice обычно ибо портит внутренние jit оптимизации и просаживает немного скорость альтернатива: obj.prop = undefined

Дмитрий
15.10.2016
12:38:24
@ZeroBias А Ramda умеет так же как и Lodash превращать цепочку map().map()... в один внутренний цикл вместо N циклов?
Может, там так работает чуть ли не половина библиотеки) Производительность оценивал, когда делал на ней мини-интерпретатор, ~20 тысяч вызовов всей библиотеки спокойно умещались в пол секунды работы программы

Alex
15.10.2016
12:38:25
.

Sheldhur
15.10.2016
12:39:18
какую IDE используете для ноды? NetBeans с плагином как?

Alex
15.10.2016
12:39:38
нет конечно

NetBeans уже стал историей webstorm, sublime, atom, vim

Дмитрий
15.10.2016
12:40:36
vscode)

Sheldhur
15.10.2016
12:40:41
вим сомсем хардкор

не могу в вим

Vladimir
15.10.2016
12:40:52
> @mxtnr ибо портит внутренние jit оптимизации и просаживает немного скорость Неправда же

Alex
15.10.2016
12:41:14
Я все 4 использую. Ноорм, везде свои ништяки

Vladimir
15.10.2016
12:41:15
delete как раз переводит объект в режим словаря

Google
Vladimir
15.10.2016
12:41:38
что и нужно, если хочешь использовать объект как словарь

в эмбере была даже такая оптимизация: добавляли свойство и сразу удаляли

Alex
15.10.2016
12:42:20
хех, прикольно, чтобы не конвертить, когда уже много даннных будет запомню этот приём пожалуй.

Vladimir
15.10.2016
12:42:24
именно

Alex
15.10.2016
12:43:09
А сейчас нас разве не спасёт Map?

Vladimir
15.10.2016
12:43:21
По идее Object.create(null) всегда в режим словаря

Alex
15.10.2016
12:44:10
т.е. не смотря на то что typeof null === 'object', prototype объекта не отнаследуется?

Vladimir
15.10.2016
12:44:37
null это не объект и протипа у него нет

это просто странное поведение typeof

Alex
15.10.2016
12:45:42
да, знаем-с) Object.create(null).__proto__ // undefined Object.create({}).__proto__ // Object {}

@ZeroBias Читаю про Ramda. Как наиболее идеоматично модифицировать такой пример: var amtAdd1Mod7 = R.compose(R.moduloBy(7), R.add(1), R.prop('amount')); Чтобы значение не распаковывалось из объекта? Внутри распаковать, произвести манипуляции и вернуть в прежней обёртке с другими нетронутыми элементами. Забыл опять как это в функциональной теории назывется Сейчас работает так amtAdd1Mod7({amount: 17}); // => 4 а надо так: amtAdd1Mod7({amount: 17}); // => {amount:4}

Дмитрий
15.10.2016
13:00:25
assoc — это если не используя сразу перезаписать

Alex
15.10.2016
13:01:57
а с использованием?

вот с такой примерно сигнатурой String → (a→a) → {k: v} → {k: v}

Vladimir
15.10.2016
13:07:29
> @mxtnr Забыл опять как это в функциональной теории назывется Никак, там так нельзя

Дмитрий
15.10.2016
13:08:03
Ну в рамде все объекты иммутабельные, подгоняются под теорию)

Alex
15.10.2016
13:08:23
Почему нельзя? Я же не модифицирую ничего, новый контейнер возвращаю Который клон введённого с изменённым полем

Vladimir
15.10.2016
13:08:25
А без этого ФП не работает

Дмитрий
15.10.2016
13:08:50
а с использованием?
Два варианта, через линзы и через evolve

Страница 280 из 2748