artalog
4.22K subscribers
538 photos
40 videos
40 files
906 links
Развернутые ответы на вопросы в чатах, мысли от рабочих процессов.
Вопросы - @artalar.
Download Telegram
Через несколько минут расскажу на коротком стриме что здесь происходит и почему это круто.
Live stream started
Live stream finished (10 minutes)
Решил запилить декоратор для эффекта, который в аргументы добавлял бы AbortController и выбрасывал бы сам ошибку, при запуске нового эффекта, до завершения предыдущего (стандартный last in win).

До этого с этим контроллером не работал, обходился простым счетчиком запросов, но для библиотеки решил сделать все “правильно”.

Ну кароч. Фича типа экспериментальная, но судя по поддержке в стандарте она появится точно, это же веб.

Я решил в onReject игнорировать ошибки отмены и обычно это делается проверкой на instanceof, но в доках и глобальном скоупе я AbortError найти не смог. Оказалось это лишь name у ошибки DOMException (wat??).

Попригорало и ладно, что там дальше. Тк мы передаем пользователю контроллер, нам нужно обрабатывать вызов сигнала. Было бы логично использовать throwIfAborted, но у него поддержка в хроме только этой весной появилась (AbortController там 4 года уже) - wat?

Кароч странно все это.
https://t.me/xufostation/758

В подкасте гость не разделяет РП и ФРП, потому что у нас в индустрии практически нет теоретических исследований РП в целом, но большинство материалов связано с практикой ФРП.

Я уже не раз говорил что MobX, Excel и кучка мелких ООРП либ доказывают что реактивность может быть совсем вне контекста функционального программирования.

Нужно понимать что ФП и ООП на столько огромны, что включают в себя синтаксические, семантические и архитектурные особенности описания кода и построения его интерфейсов в целом. Упрощенно можно разделить их на функции высшего порядка и композицию, против классов и их наследования. И это вообще никак не пересекается с реактивным программированием, как простым паттерном переноса явных связей в коде в рантайм, через интерфейс подписки. Одно другому не противорчечит и даже не помогает / мешает.

Как правильно было замечено в начале подкаста - реактивное программирование отлично решает проблему связанности одного источника и нескольких потребителей.
https://artalar.github.io/csb-trpr1/

Расскопал вот такое вот старье в песочницах. Игрался с генерацией анимированного задника для lofi.

(код)

- перезагрузкой страницы выбираем симпотичный цвет
- настраиваем скорость в левом верхнем углу
- по Enter включаем фулскрин

Там бы хорошо еще какой-то lofi стрим на фон добавить, контролы красивые запилить. И главный челендж, на котором я остановился, переписать на генерацию статического текста (кода) кейфрема (это возможно).
Если кто хочет - форкайте, поделитесь потом что вышло 🙂
👍3
https://t.me/fxnim/51

На выходных пару часов дебажил Uncaught promise exception, искренне думая что в третьем случае, аналогично второму, ошибки не будет. Пофиксил, понятно, как в четвертом случае.

Ну бывает 😓
🤔9💩4
Forwarded from CherryTea
ну вобще тут история интересная, его изначально для фетча и делали, но по итогу решили сделать как отдельную апи
https://developer.chrome.com/blog/abortable-fetch/#the-history
Использовать разные либы для навигации, форм, сетевого кеша и остальных стейтов, вместо одного стейт менеджера с кучкой доменных хелперов, это тоже самое что использовать разные IoC для каждой из этих задач.
Есть системные домены, а есть бизнесовые: первые должны использовать одинаковый тулинг, вторые делиться и быть разграниченными.
👍6💩2🤔1
artalog
Использовать разные либы для навигации, форм, сетевого кеша и остальных стейтов, вместо одного стейт менеджера с кучкой доменных хелперов, это тоже самое что использовать разные IoC для каждой из этих задач. Есть системные домены, а есть бизнесовые: первые…
Адаптеры - рак современной разработки. Без наличия и попыток создать базовые примитивы для обработки конкурентных процессов и транзакций системное качество кода и конечных продуктов будет всегда заметно ниже возможного.

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

cc t.me/JentlemanS/205382

Так же, адаптеры скрывают проблему консистентности системных утилит, позволяя написать просто сейчас, ухудшая дебаг и поддержку потом.
👍2
А ваш? 🙂
firstpr.me
🔥8
Забавно и по делу https://www.youtube.com/c/Fireship
🔥2
artalog
Забавно и по делу https://www.youtube.com/c/Fireship
Ok, вот материал поглубже.

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

А чем события мыши отличаются от событий тача и почему спек последнего несколько (было?)?

О всей этой истории легаси в докладе @rdvornov:

https://youtu.be/4o9joROJVHg?list=PLXObawgXpIfyH7XRtAN1JgFd6FJVzURdV
👍41
​​Отличный технический стендап про кодировки — то, как компьютеры хранят и обрабатывают текст и почему раньше мы регулярно сталкивались с «Р·Р°РїСѓСЃРє», «Đ·Đ°Đ¿ÑƒÑ�Đº» и «п╥п╟п©я┐я», а теперь всё норм.

Куча супер классных примеров и баек из жизни. Например, почему концерт Билли Джоэля в Ленинграде называется на всех стриминингах «kohuept» (это в конце восьмидесятых так вбили слово КОНЦЕРТ на латинице) или почему город Aarhus стоит в конце алфавитного списка (виноваты вторая мировая и гугл).

Мечтаю сделать про это эпизод подкаста и не уверен, что у нас получится увлекательнее; целый час удовольствия https://www.youtube.com/watch?v=gd5uJ7Nlvvo
👍1🔥1
Forwarded from artalar
Чистая архитектура - это таска в беклоге аналитика без работы.

Архитектура она вообще НЕ ПРО ЧИСТОТУ - она про трейдофы, когда ты решаешь как минимальными усилиями получить максимум. Это не про то как сделать правильно, это про то как соблюсти баланс костылей и что бы ничего не развалилось. Больше сэкономишь - больше фич напилишь, в этом ищешь баланс.

По другому не бывает, физика, hardware и sofware имеют ограничения и легаси поверх которых ничего идеального не построить.
👍21🤔3💩3🥰1
Forwarded from UfoStation
Небольшой ликбез по видам тестирования

Недавно в личной беседе выяснилось, что некоторые разработчики путают виды тестирования и уровни тестирования. В свое время мне помог разобраться ресурс www.protesting.ru во всех этих терминах.

В зависимости от преследуемых целей тестирования выделяют следующие виды:

Функциональные виды тестирования

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

> Функциональное тестирование (Functional testing)
> Тестирование безопасности (Security and Access Control Testing)
> Тестирование взаимодействия (Interoperability Testing)

Более того функциональные виды тестирования могут иметь свои уровни, то есть то, над чем производятся тесты: над отдельным модулем, группой модулей или системой, в целом. Отсюда соответственно выделяют следующие уровни:

> Компонентное или Модульное тестирование (Component Testing or Unit Testing)
> Интеграционное тестирование (Integration Testing)
> Системное тестирование (System Testing)
> Приемочное тестирование (Acceptance Testing)

Нефункциональные виды тестирования

Описывают тесты, необходимые для определения характеристик программного обеспечения, которые могут быть измерены различными величинами. В целом, это тестирование того, "Как" система работает.

> Все виды тестирования производительности:
— нагрузочное тестирование (Performance and Load Testing)
— стрессовое тестирование (Stress Testing)
— тестирование стабильности или надежности (Stability / Reliability Testing)
— объемное тестирование (Volume Testing)
> Тестирование установки (Installation testing)
> Тестирование удобства пользования (Usability Testing)
> Тестирование на отказ и восстановление (Failover and Recovery Testing)
> Конфигурационное тестирование (Configuration Testing)
> Тестирование безопасности (Security and Access Control Testing)

Связанные с изменениями виды тестирования

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

> Дымовое тестирование (Smoke Testing)
> Регрессионное тестирование (Regression Testing)
> Тестирование сборки (Build Verification Test)
> Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)

Хотите узнать больше деталей по каждому виду тестирования? Полистайте www.protesting.ru
👍3🔥3🤔1
На прошлой неделе разгорелся спор в комментариях к посту про не авторазворачивание типа для результата промиса - почитайте, там интересно.

Локально проблему можно исправить так: type MyPromise<T> = Promise<Awaited<T>>. Почему же не сделать такой тип для Promise по умолчанию?

Ну я проверил, уже с вложенностью в 20 ТС кидает Type instantiation is excessively deep and possibly infinite.
🤔6👍3
Live stream started
Повспоминаю свои истории косяков немного. Без записи 😁
😢1