Pull to refresh
35
0

Человек настоящий

Send message

Такая глупенькая кликбэйтовость заголовка "помогут Вам стать Senior". Будто у людей "стать Senior" - это самоцель и они читают статьи только явно направленные на это =) Можно же было сказать "упростят процесс отладки", например.

Смотрю, и никак не могу поверить, что сделано "вечерами и на выходных". Просто потрясающе. Да даже на фулл-тайме осилить такое силами одного человека - это фантастика, какое же должно быть сочетание технических и творческих способностей. У меня к вам только лучи уважения. Дальнейших успехов вам в ваших проектах!

Тут стоит добавить важное замечание: не допускается сговор участников и способ разбиения исходного числа на сумму должен быть непредсказуем для других.

Чисто как мысленный эксперимент: импульс сброса через конденсатор подаем на триггер, а выход триггера отвечает за активацию кэша.

Это нераспаянный ethernet контроллер + трансформатор

картинка

С редьюсерами такая ситуация, что относительно простые состояния (например, представляемые одним фундаментальным объектом JS без вложенностей) на них реализовать проще/понятнее и субъективно красивее. Именно на такие случаи в первую очередь и рассчитана эта библиотека: когда приложению требуется простое состояние с глобальной видимостью.

Сложная же логика с кучей акшенов и состоянием представляемым множеством связанных объектов удобнее реализовывается через класс / объект с методами.

Как и везде, нет универсального решения лучшего во всех случаях.

Добавил в документацию соответстующее предупреждение.

И не спорю, не чистая. Я о том, что в конкретном use-case это несущественно, т.к. не вызовет каких-либо неприятностей.

Извините пожалуйста, но разрешите докопаться.

Благодарен, что вы решили это сделать.

Редьюсер по определению своему - это чистая функция.

toLocalStorage ведет себя как чистая функция. Он только записывает текущее значение состояния в localStorage не читая ничего обратно (это делает инициализатор) и не модифицируя состояние. Да, формально, это не чистая функция и, например, мемоизация невозможна (но и бессмысленна).

Своим именованием вы ломаете их eslint плагин, devtools

Упустил из виду, что средства разработки опираются на конвенции именования. Протестирую с eslint и devtools.

А зачем вы фризите входной объект? С одной стороны понятно, чтобы его никто не вздумал мутировать, но с другой стороны, это должно решаться иными средствами, например, типами.

Вы все правильно написали, это позволяет не просто не допустить незаконных мутаций, но и грубо сообщить об этом пользователю ошибкой. Предполагается, что после передачи входного объекта он становится частью внутреннего состояния библиотеки и больше не принадлежит пользователю.

К сожалению, типами это не решить. Да и plain JS пользователи, на сколько мне известно, существуют.

Асинхронный scheduling внушает опасение. Можно попать в infinite loop, который очень сложно сдетектить

Асинхронный вызов подписчиков был введен в основном как debouncing. В dev режиме планируется добавить детекцию бесконечного цикла обновлений с выводом предупреждения. (Эвристикой: считать количество вызовов подписчиков в единицу времени. Должно поймать основной процент проблем.)

По-хорошему, лучше делегировать обновление стейта самому фреймворку. Сделать один Provider c useState, use-хук будет писать и читать из этого провайдера, а react сам разберется с порядком обновлений

Пользователю тогда придется явно оборачивать корневой компонент в этот провайдер... Но может это действительно разумный трейд-офф.

Просто сначала подумал, что store.text явно указывается в списке зависимостей до его использования (и пока не указан, не доступен пользователю). Интересная фитча. Попробую поиграть с оборачиванием store в `Proxy` для автоматического детектирования чтения свойств. Еще раз благодарю за пример.

Спасибо за комментарий.

Кейсы с возможными устаревшими пропсами и зомби-чилдами не проверяли?

На сколько смог разобраться, данные "баги" больше на плечах пользователя, чем на библиотеке. Ну я повторюсь, что в частности с МобХ не достаточно знаком.
В первом случаи пропсы должны быть указаны в списке зависимостей (и, соответственно, акшен зависящий от пропов должен запускаться синхронно через эффект).
Во втором случаи, при использовании не-локального состояния лучше не делать никаких предположений о текущем состоянии, оно может быть любым (в рамках объявленного типа).

подписка на стейт по факту использования в отличии от безусловной подписки в хуке

Тут соглашусь, такая функция должна присутствовать даже в минимальном наборе. Будем добавлять возможность указания используемых полей объекта в хуке, по типу списка зависимостей.

 

Из статьи не понятно, как это может быть лучше с точки зрения безопасности: данные между чипом и МК передаются в открытом виде. Можно какой-то пример? Пока вижу выигрыш только в оффлоаде функций шифрования.

 

Проверки, что расшифровывался не мусор (или какая-то левая прошивка, но для этого же нужно знать ключ) - нет. Если юзер захочет убить устройство, то у него это получится.

Для чего, не понял? "MAC"?

Для слабых микроконтроллеров посмотрите еще в сторону TEA / XTEA
Очень компактный код, работает на месте, никаких таблиц. Использую его в бутлоадерах на AVR, функция расшифровки компилируется в ~400 байт (память программ).

Спасибо, очень круто! Интересно посмотреть схему формирования видео сигнала.

Полезно. Особенно если вот так один раз что-то готовое прошить (для разработки все-таки нужен нормальный внутрисхемный программатор).

На этот программатор только не лишним по питанию поставить конденсатор на ~100мкф рядом с ногами сокета. А то программирование иногда срывается, пришлось сверху подпаять. Как я понимаю, не один с этой проблемой сталкивался.

А как насчет варианта на контексте без внешнего стейт-менеджера?

Information

Rating
Does not participate
Registered
Activity