Как стать автором
Обновить
4
0

Пользователь

Отправить сообщение

Для серверной части пока только Connexion достоин внимания

Мы довольно успешно используем apispec для подхода api-first: пишем классы на питоне, потом генерируем по ним спеку. OAS 3.1 неплохо поддерживается

Клиентская часть - autorest.

Можете сравнить с другими генераторами? Чем он вас больше приглянулся, в каких случаях работает лучше других? Мы используем openapi-generator (генератор typescript-angular) с кастомными шаблонами. Поддержка 3.1 пока экспериментальная, но у нас завелось.

А стандартный генератор производит лишний мусор

А какой именно генератор для вас стандартный?

Стоит упомянуть, что нет смысла добавлять aria-label на кнопку, у которой уже и так есть текстовое содержимое

<button aria-label="Закрыть окно">Закрыть окно</button>

Здесь aria-label избыточен - если его нет, скринридер просто прочитает содержимое кнопки. В перспективе такое дублирование приведет к рассинхрону: поменяли текст в одном месте, оставили как было в другом

`10 sin (10 x)` - растянем по вертикали

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

А каким образом заворачивание всех меж-сервисных запросов на API gateway уменьшит нагрузку на сеть или вероятность сетевых ошибок?

Часто меряют покрытие не только строк кода, то и ветвлений.

100500 ноопов без ветвлений не помогут. А 100500 нооп-ветвлений еще попробуй-ка протестируй.

Хотя и тут можно выкрутиться, если автоматом (в цикле) сгенерить тесты всех этих нооп-веток

Потребление памяти-то вы снизили. Но теперь ответственность за правильные типы библиотек - на вас. Изменится зависимость, а вы не поправите свою обертку с типами - что-нибудь упадет.

Кстати, такой способ импорта не очень совместим с ES Modules. Если в зависимости прописаны точки входа exports в package.json , то импортировать можно только из этих точек входа. https://nodejs.org/api/packages.html#package-entry-points

Еще стили шрифта с гугл можно заинлайнить в html, вмесо того, чтобы загружать отдельно через <link>. Angular так из коробки делает, например (https://angular.io/guide/workspace-config#fonts-optimization-options).

`as const` помогает с выводимым типом, но не с автокомплитом.

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

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

оглашусь, отработка случаев, касающихся ожидания появления элемента, таким способом не есть best practice.

Нет. Это не просто "не best practice". Этот цикл принципиально не делает то, что, согласно статье, он должен бы делать. Он не увеличивает таймаут в MAX_RETRIES раз, он не проверяет наличие MAX_RETRIES последовательных спиннеров. Он делает тест менее надежным - в зависимости от логики страницы он может иногда падать из-за того, что ассерты в Cypress асинхронные.

просто последовательный вызов методов

cy.get('#input1').type('some value')
cy.get('#button1').click()
cy.get('#input2').type('another value')
cy.get('#checkbox3').click()

По-моему, поддерживать такой тест гораздо проще, чем набор if/else

Сокращение количества тестов за счет использования циклов очевидно сокращает общее время

В ваших примерах количество тестов не сократилось.

for (let user of users) {
  it(`test for user ${user.name}`, () => /* ... run assertions */)
}

в этом коде все так же 3 теста, как было бы и без цикла.

Пункт 7 - итоговый код гораздо менее понятен, чем просто последовательный вызов методов Cypress.

Пункт 9 - вообще какой-то лютый антипаттерн. Все запросы (queries) Cypress под капотом повторяются до успешного результата или таймаута. Непонятно, какую проблему решает тут цикл.

Остальные пункты - по сути вариации одной и той же идеи - параметризированые тесты.

в целях обеспечения их надежности и сокращения времени на их выполнение

Ни надежность, ни время выполнения в статье так и не раскрыты остались.

Думаю, готовы на многое.

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

некоторые vpn могут законно потребовать положить сертификат

А такие есть? Зачем они это делают?

Одна из причин, почему надо быть аккуратнее с VPN простым пользователям, — возможность делать с вашим трафиком всё что угодно

Так HTTPS же никуда не делся при этом. При попытке завернуть трафик на свой сервис получим сообщение типа "сертификат подписан неизвестно кем, продолжить на свой страх и риск?".

Повторюсь, важное отличие реализации отмены в Reatom от rxjs и
redux-saga является в использовании нативного AbortController, который
уже является стандартом, используется в браузерах и node.js, а также
множества других библиотек

Все же он используется не напрямую, а внутри withAbort() абстракции. Что тоже "специфический АПИ". А завязка внутри на AbortController - наоборот делает реализацию менее универсальной. Например, в rxjs - unsubscribe можно написать для любой асинхронной операции, даже если она не поддерживает AbortController. К примеру, XmlHttpRequest.

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

не свойство компонента конвертировать между массивом и строкой для рендинга

Нет принципиального отличия от "конвертировать объект ({title, body}) в строку для рендеринга". И то, и другое - сериализация данных в строку.

вызов unsubscribe (ресурсный метод) то тут, то там

По-моему, тут ансабскрайб вообще не нужен нигде. Его GC соберет - на него нигде не осталось ссылок. В древние века в каком-то браузере это бы привело к утечкам памяти - но не в 2023.

Ссылка на самих себя в колбеке

Не вижу ничего страшного.

Создание компонента на каждый колбэк

Необязательно же так делать. Можно сделать comp.setData(emails) . И компонент просто перерисуется

Вопрос про NullPointerException.

В примере с `t.a = 42` получаем SEGFAULT, потому что смещение 0xC для поля a довольно маленькое.

Если бы наша структура `Test` была супер-развесистой, и мы пробуем писать в ее последнее поле. Есть ли вероятность в таком случае попасть в валидный адрес памяти и прочитать значение (какое-то) без SEGFAULT? Если да - как JVM обрабатывает такую ситауцию, чтобы все же выкинуть NPE в итоге?

В целом-то годная статья. Но вот эти политически отсылки ("это другое", экстремизм Meta) совершенно лишние.

Первопричиной низкого time2market являлось то, что команда не владела практикой coding kata, о которой я подробно расскажу в данной статье

Так и не увидел в этой статье подробного рассказа (или хотя бы общего описания, чего уж там) о практике coding kata. И частности, о том как эта практика помогает с time2market. Собственно, даже и самого определения этого самого time2market.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность