
Дмитрий
31.08.2017
23:51:41
Если ты ощущаешь настойчивое желание распихать блокировок, то что-то идёт не так
Причём даже несколько вариантов)
Но такой стейт внезапно оказывается true private, ненаблюдаемым принципиально, что не всегда здорово

Google

Дмитрий
01.09.2017
00:00:20
Это в принципе относится ко всем длинным стрим-процессам

Vadim
01.09.2017
04:03:26
Тайпинги у рамды неправильные.
Не те аргументы у invoker прописаны. Нет плейсхолдера. Нет метода “o”. Это из того, с чем я пока столкнулся

andretshurotshka?❄️кде
01.09.2017
04:03:53
ахахха
Ты на последнюю версию обновись
Вообще умрешь

Vadim
01.09.2017
04:04:44
Это последняя версия )

andretshurotshka?❄️кде
01.09.2017
04:04:54
@types/ramda небось?
Ой

Vadim
01.09.2017
04:05:13
Ага
0.24.8

andretshurotshka?❄️кде
01.09.2017
04:05:28
Я тебя огорчу
Ее не обновляют

Vadim
01.09.2017
04:05:31
Хотя уже вижу что вышла за последние дни 0.24.9

Google

Vadim
01.09.2017
04:05:40
А какая корректная?
Версия тайпингов

andretshurotshka?❄️кде
01.09.2017
04:05:52
Актуальная версия тут https://github.com/types/npm-ramda
Но автор сидит на чем-то
потому что это жесть в последней версии

Vadim
01.09.2017
04:06:30
Правда лажа остается

andretshurotshka?❄️кде
01.09.2017
04:07:53
Хммм
Как это обновляют ?

Vadim
01.09.2017
04:09:21
https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ramda
Но все равно пипец!

andretshurotshka?❄️кде
01.09.2017
04:10:25
Но у тебя будет инфаркт от таких плейсхолдеров

Vadim
01.09.2017
04:10:48
Я поиском не нашел

andretshurotshka?❄️кде
01.09.2017
04:10:56

Gleb
01.09.2017
04:11:05
АА так блин, нет конечно)) я просто отписал что такое на крайняк тоже возможжно, я просто не понял что плохого в том что успевает пролететь апдейт redux
Вот только мьютексов по всему приложению мне и не хватало, я ж для этого именно вводил функциональность и реактивность ?


Vadim
01.09.2017
04:16:13
Вообще пошли все эти тайпинги в жопу! Сейчас добью проектик с тайпскриптом, и больше ни ногой в него! (надеюсь)
Огромный минус типизации в js в том, что при использовании энного набора либ в проекте ты постоянно должен править косяки с тайпингами, которые порой внезапно меняются до неузнаваемости, а так же, не поспевают за версиями соответствующих либ, или привносят свои баги. При обновлениях зависимостей мне приходится править проблемы с тайпингами чаще чем что-то связанное с изменением api js-библиотек.
Это хорошо если ты используешь какого-то монолитного монстра, типа ангуляра. Тогда ок. Но если у тебя солянка из разных либ (что обычно и бывает при написании на react), то ts прибавляет грузик к твоим ногам с добавлением каждой либы. В итоге двигаться становится крайне сложно

andretshurotshka?❄️кде
01.09.2017
04:35:39
Ахаххахаза

Google

andretshurotshka?❄️кде
01.09.2017
04:35:52
>огромный минус типизации в жс
это тс минус
А не типизации в жс
Вообще никто не мешает писать типы для своего кода, а на тайпинги забить

Дмитрий
01.09.2017
05:40:18

Gleb
01.09.2017
05:41:50
У тебя все покрыто тестами?

Дмитрий
01.09.2017
05:42:29
В итоге пока что просто разделил L1 кэш и обычные данные, чтобы тыща апдейтов первого не аффектила второе
У тебя все покрыто тестами?
По поводу тестов — я просто тоже столкнулся с тем что не очень понятно как тестировать стримы без наскальной живописи марбл-тестами

Gleb
01.09.2017
05:47:12
Ага и в итоге марблс тетсируешь? Там просто есть типа хака Что ли для rx5 шедулера от rx4
next добавляет
И еще что то
Не пробовал?

Vadim
01.09.2017
05:52:11
Ну это если думать о скорости разработки, а не об идеальном решении в идеальном мире

Дмитрий
01.09.2017
05:54:31
Не пробовал?
У меня не rx, у меня изначально есть next
Решил короче что лучше буду юзать функциональность которую предоставляет jest Spy

Gleb
01.09.2017
05:55:35
А можешь пример скинуть пожалуйста
может так действительно удобней

andretshurotshka?❄️кде
01.09.2017
05:56:19
Я не об этом

Gleb
01.09.2017
05:56:29
то есть ты на toHaveBeenCalled проверяешь например

Google

Gleb
01.09.2017
05:57:18
А на возвращаемый результат просто подписываешься?

andretshurotshka?❄️кде
01.09.2017
05:58:18
А что не так с марбл?

Gleb
01.09.2017
05:58:22
Я подменял кстати с помощью вот этого прокси от es6 в jest который прям некоторые методы в Observable, например delay или ajax, чтобы код синхронным был и можно было подписаться, это ок?

Дмитрий
01.09.2017
05:59:07

Vadim
01.09.2017
06:00:33
Видел эту картинку ) Но это для идеального мира )
Или когда сроки не горят
В огромных ентерпрайзах с вотерфлоу можно вылизывать и типизировать все до бесконечности. Но в стартапах и на фрилансе это непозволительно обычно

Admin
ERROR: S client not available

andretshurotshka?❄️кде
01.09.2017
06:02:14
Флоу выведет типы
Можно не типизировать все)

Vadim
01.09.2017
06:02:58
Может доберусь еще до флоу

andretshurotshka?❄️кде
01.09.2017
06:03:00
https://arxiv.org/pdf/1708.08021.pdf пейпер про флоу

Vadim
01.09.2017
06:03:06
Пока у меня мнения о нем нет

andretshurotshka?❄️кде
01.09.2017
06:03:34
Мемы от курчаткина


Vadim
01.09.2017
06:06:31
Еще у меня утренние мысли по поводу “жесткого” фп в js.
За последние дни, экспериментируя, переписал кучу кода на своем пет-проджекте в функциональном стиле на ramda. Например, избавившись от всех констант-значений, сделав константами только функции. А теперь свежими глазами смотрю на это, и понимаю, что в портфолио я это не выложу ) Ибо мало какой работодатель захочет в команду инопланетянина, пишущего на непонятном всем языке )
К тому же в общей массе код стал даже более многословным. Убедить стороннего читателя в преимуществах данного стиля задача нетривиальная (да и себя тоже) )
Было:
const duration = moment.duration({ seconds: durationSeconds });
return {
hours: Math.floor(duration.asHours()),
minutes: Math.floor(duration.minutes())
};
Стало:
const floorTime = R.useWith(R.compose(R.apply(R.compose), R.flip(R.prepend)([Math.floor])), [(R.invoker as any)(0)]);
return R.applySpec({
hours: floorTime('asHours'),
minutes: floorTime('minutes')
})(moment.duration({ seconds: durationSeconds }));


andretshurotshka?❄️кде
01.09.2017
06:08:17
тайлор как всегда упорот
https://github.com/motorcyclets/react-dom

Дмитрий
01.09.2017
06:20:04

Google


Дмитрий
01.09.2017
06:21:30
Еще у меня утренние мысли по поводу “жесткого” фп в js.
За последние дни, экспериментируя, переписал кучу кода на своем пет-проджекте в функциональном стиле на ramda. Например, избавившись от всех констант-значений, сделав константами только функции. А теперь свежими глазами смотрю на это, и понимаю, что в портфолио я это не выложу ) Ибо мало какой работодатель захочет в команду инопланетянина, пишущего на непонятном всем языке )
К тому же в общей массе код стал даже более многословным. Убедить стороннего читателя в преимуществах данного стиля задача нетривиальная (да и себя тоже) )
Было:
const duration = moment.duration({ seconds: durationSeconds });
return {
hours: Math.floor(duration.asHours()),
minutes: Math.floor(duration.minutes())
};
Стало:
const floorTime = R.useWith(R.compose(R.apply(R.compose), R.flip(R.prepend)([Math.floor])), [(R.invoker as any)(0)]);
return R.applySpec({
hours: floorTime('asHours'),
minutes: floorTime('minutes')
})(moment.duration({ seconds: durationSeconds }));
Рамда — это не совсем полноценный функциональный стиль)
Я про это уже писал как-то


andretshurotshka?❄️кде
01.09.2017
06:23:33
?


Дмитрий
01.09.2017
06:23:47
Кстати, рамда, судя по их кукбуку https://github.com/ramda/ramda/wiki/Cookbook пропагандирует строго "функциональный подход" на счет того что б не сохранять в константах промежуточные данные. Во всех примерах они оперируют ТОЛЬКО ФУНКЦИЯМИ. Это, на мой взгляд, уменьшает читабельность кода (хотя может я это говорю с непривычки). Есть ли преимущество у такого подхода?
Я полюбил рамду из-за возможностей разного рода пайпов/компосов и прочего. Но в своем коде я обычно по преждему использовал константы с промежуточными значениями. А есть ли преимущества от отказа от сохранения промежуточных значений, и манипулирования только лишь функциями?
Отказ от переменных ради отказа от переменных не нужен, если проще написать с ними — пиши, это ок) Стиль рамды позволяет абстрагироваться от конкретных объектов и описывать операции в общем виде, в универсальной и краткой форме
Большую часть времени в обычном жс рамда выступает в качестве эффективного средства для функций - однострочников) Никаких упоротых «композ через композ», просто какие - то атомарные операции в три-четыре последовательных действия
Потом начинаешь замечать, что всё большая и большая часть задач оказывается атомарной да и вообще повторяется
А попытаться сразу писать point-free-everything — это прямой путь к fp fatigue, сколько раз уже наблюдал подобное ?
Тебе кстати и писал, как видишь ?


andretshurotshka?❄️кде
01.09.2017
06:25:01
gcanti fatigue

Gleb
01.09.2017
06:25:10
А почему по функциям все это не разносите? Я сколько смотрю компоуз компоузом поганяет
именованные функции композировать то выразительней

andretshurotshka?❄️кде
01.09.2017
06:25:59

Vadim
01.09.2017
06:27:59


andretshurotshka?❄️кде
01.09.2017
06:28:46
Еще у меня утренние мысли по поводу “жесткого” фп в js.
За последние дни, экспериментируя, переписал кучу кода на своем пет-проджекте в функциональном стиле на ramda. Например, избавившись от всех констант-значений, сделав константами только функции. А теперь свежими глазами смотрю на это, и понимаю, что в портфолио я это не выложу ) Ибо мало какой работодатель захочет в команду инопланетянина, пишущего на непонятном всем языке )
К тому же в общей массе код стал даже более многословным. Убедить стороннего читателя в преимуществах данного стиля задача нетривиальная (да и себя тоже) )
Было:
const duration = moment.duration({ seconds: durationSeconds });
return {
hours: Math.floor(duration.asHours()),
minutes: Math.floor(duration.minutes())
};
Стало:
const floorTime = R.useWith(R.compose(R.apply(R.compose), R.flip(R.prepend)([Math.floor])), [(R.invoker as any)(0)]);
return R.applySpec({
hours: floorTime('asHours'),
minutes: floorTime('minutes')
})(moment.duration({ seconds: durationSeconds }));
Было лучше)


Vadim
01.09.2017
06:28:53
Согласен )

Gleb
01.09.2017
06:29:36
Не не я ж не обобщаю, просто частенько вижу R(R(R(R(R)))) в этот вот все)

andretshurotshka?❄️кде
01.09.2017
06:29:51
Rrrrrr

Gleb
01.09.2017
06:30:01
Хотя ,гоню, я просто завидую, у меня lodash/fp и там useWith вот такой штуки или ap нету

Vadim
01.09.2017
06:30:10
Было лучше)
А если фп-код разбить на более атомарные функции, то этот исходный короткий императивный код в итоге разрастется в размере в несколько раз

Gleb
01.09.2017
06:30:14
а тянуть рамбду уже поздновато