• Как использовать useStore, useSelector, useDispatch hook?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. useDispatch - получение функции store.dispatch в компоненте. Раньше для вызова action функциональный компонент приходилось оборачивать в вызов connect:
    const Foo = ({ dispatch }) => {
      const handler = useCallback(() => {
        dispatch(action());
      }, []);
    
      return (
        <Bar onClick={handler} />
      );
    };
    
    export default connect()(Foo);


    Сейчас:
    const Foo = () => {
      const dispatch = useDispatch();
    
      const handler = useCallback(() => {
        dispatch(action());
      }, []);
    
      return (
        <Bar onClick={handler} />
      );
    };
    
    export default Foo;


    2. useSelector - маппинг значения из store.
    Раньше:
    const Foo = ({ value }) => {
      return (
        <Bar value={value} />
      );
    };
    
    const mapStateToProps = state => ({
      value: state.value,
    });
    
    export default connect(mapStateToProps)(Foo);


    const Foo = () => {
      const value = useSelector(state => state.value);
    
      return (
        <Bar value={value} />
      );
    };
    
    export default Foo;


    3. useStore - получение store целиком:
    const valueSelector = state => state.value;
    
    const Foo = () => {
      const { dispatch, getState, subscribe } = useStore();
      const value = valueSelector(getState());
      
      useEffect(() => subscribe(console.log), []);
    
      const handler = useCallback(() => {
        dispatch(action());
      }, []);
    
      return (
        <Bar onClick={handler} value={value} />
      );
    };
    
    export default Foo;

    Вряд ли useStore вам, действительно, понадобится на практике.
    Ответ написан
    Комментировать
  • Что такое end-to-end тестирование?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Понятие еnd-to-end обозначает всего-навсего классификацию тестов по уровню, на котором тестируется система, и, само по себе, ничего не говорит ни о том, какие конкретно должны быть эти тесты, ни о том, какую роль они играют в общей стратегии обеспечения/проверки качества и, также, не является методикой тестирования. (Методика - это совсем другое понятие.)

    Для понимания сути этого понятия хорошо сравнить его с модульным ("нижний" уровень) и интеграционным ("средний") тестированием на каком-нибудь конкретном примере. Давайте рассмотрим некий сферический webshop в вакууме. Предположим, в нем есть 50 классов и для большинства из них написаны модульные тесты. Они проверяют исключительно функционал конкретного модуля (чаще всего, класса), т.е. тот, что зависит только от самого модуля и ни от чего чего более. Потом есть интеграционные тесты. Они проверяют корректность работы отдельных "модулей", если их собрать вместе согласно архитектурe. Например, работает ли правильно "Корзина", состоящая, в свою очередь, из 10 классов (предварительно проверенных модульными тестами), или "Корзина", подключенная к "Вебморде" и т.д. Где-то повыше в этой иерархии есть такие интеграционные тесты, которые проверяют конкретный функционал всей системы. Например, отправляется ли юзеру мейлом копия оплаченного заказа...

    И вот тут начинается самое интересное для понимания того, что такое end-to-end тестирование! Можно представить себе тест, проверяющий, что соответствующий мейл генерируется и сбрасывается SMTP серверу. Если SMTP сервер не рассматривать, как часть разрабатываемой системы, то этот тест вполне можно назвать end-to-end тестом (послали кучку HTTP запросов через "Вебморду" и проверили сброс мыла на SMTP - все зашибись!). Однако, если настройки и эксплуатация SMTP сервера - часть проекта (например, заказана разработка webshop "под ключ"), может оказаться, что это мыло будет отфильтровано каким-нибудь спам-фильтром, превысит лимит почтового ящика пользователя... короче, не дойдет до него. Тогда этот же самый тест уже нельзя считать end-to-end, а нужно бы было написать тест, проверяющий приход мыла в POP3/IMAP ящик. (Опять же, если это действительно нужно! Ибо, в зависимости от конкретных функциональных и нефункциональных требований, архитектор и QA инженер вполне могут найти возможность обеспечить адекватный контроль качества и без такого теста.)

    Таким образом, end-to-end тесты, это такие интеграционные тесты, которые воздействуют на систему через ее самые внешние интерфейсы и проверяют ожидаемую реакцию системы через эти же интерфейсы. Почему именно интеграционные? Потому, что это единственное, что можно о них сказать наверняка: они по определению не могут быть модульными тестами. А все остальное: являются ли они одновременно приемочными, нагрузочными или еще какими - зависит только от общих плана/стратегии тестирования и той роли, которые эти тесты в них играют.
    Ответ написан
    Комментировать
  • Webstorm vs VS Code 2019?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Ой, ну это холиварная тема. На первый взгляд, webstorm из коробки может больше, чем VS Code. Но VS Code отлично допиливается расширениями, причем очень круто. Расширения пишутся тоже довольно легко, как к браузеру. Да и на мой взгляд, VS Code работает шустрее, чем webstorm, и жрет меньше памяти (я помню про electron) чем webstorm.
    Ответ написан
    1 комментарий
  • Как автоматически проверить верстку?

    Psixodelik
    @Psixodelik
    Преподаватель на Hexlet
    Я использую два инструмента:

    1. jest-dom. Это если надо точечно проверить элементы на странице. Удобно, если нет необходимости тестировать прям всё всё всё. Стучишься до нужно элемента и проверяешь его.

    2. jest-image-snapshot. Тестирование через скриншоты отлично помогает при тестировании пользовательского поведения. Там всякие скроллы, ховеры, фокусы и так далее. По сути просто делаешь эталонный скриншот страницы, вбиваешь поведение страницы. После этого при тестировании проверяется, не сломалось ли поведение
    Ответ написан
    Комментировать
  • Какой лучший учебник по линейной алгебре

    FINTER
    @FINTER
    Тыртышниктов Е. Е. «Матричный анализ и линейная алгебра»
    Евгений Евгеньевич является одним из сильнейших специалистов по линейной алгебре в мире. Преподает в МГУ и ФизТехе.

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

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

    Освоив эту книгу полностью вы будете с гордостью говорить: «Тензоры? Тензоры — это просто =)»
    Ответ написан
    2 комментария
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Как отключить защиту CORS в nodeJS?

    @AnImAsHkO
    Как вариант:
    app.use(function (req, res, next) {
        var origins = [
            'http://example.com',
            'http://www.example.com'
        ];
    
        for(var i = 0; i < origins.length; i++){
            var origin = origins[i];
    
            if(req.headers.origin.indexOf(origin) > -1){
                res.header('Access-Control-Allow-Origin', req.headers.origin);
            }
        }
        
        res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();
    });
    Ответ написан
    Комментировать
  • Человекопонятные даты в js на русском языке?

    DenZzeuro
    @DenZzeuro
    Мотоциклы, кофе
    new Date().toLocaleString('ru', {
    			  year: 'numeric',
    			  month: 'long',
    			  day: 'numeric'
    			});
    Ответ написан
    2 комментария
  • Как быстро изучить jira и agile?

    @kn0ckn0ck
    Продюсер
    Перешли с Jira на scrumboard, там есть встроенная обучалка, которая рассказывает что нужно делать для управления проектом по Agile. Все доступно и понятно, в общем нам помогло.
    Ответ написан
    Комментировать
  • Какой JS фреймворк выбрать для full-stack?

    @xfg
    Лучшее что сейчас есть это koa или express для http протокола и socket.io для websocket протокола. PHP тоже от full-stack фреймворков движется в сторону микрофреймворков. Сегодня современный фреймворк это роутинг запросов реализованный на концепции мидлваров.

    Проблема спагетти-кода решается не фреймворком, а архитектурой. На сервере это обычно multilayered architecture. Бьете приложение на 4 слоя presentation, application, domain и infrastructure (еще могут называть data access layer или persistence layer). Контроллеры фреймворка куда попадает запрос пользователя это будет ваш самый верхний presentation слой. Слой инфраструктуры лучше собирать из отдельных библиотек, чем завязывать его на фреймворк. В таком случае не придется переписывать весь слой инфраструктуры из-за того, что фреймворк больше не развивается. Application и Domain слои используют Infrastructure слой через интерфейсы, тем самым абстрагируясь от конкретных реализаций. Таким образом вы всегда сможете заменить одну реализацию другой (паттерн Strategy) без изменения вышестоящих слоев. Presentation слой просто вызывает сервисы из application слоя и возвращает результат в html/json/xml/etc клиенту.

    Иногда упрощают до 3 или даже 2 слоев. Например если у вас CRUD приложение, тогда application и domain слои не нужны и вы можете оставить только presentation и infrastructure. Также если ваш application слой не делает ничего, кроме вызова domain слоя, то от него также можно избавиться оставив 3 слоя presentation, domain и infrastructure.

    Примеры реализации можно найти здесь и здесь. Они на Java. На javascript пока не встречал.

    Более подробно тему можно изучить взяв любую книгу на эту тему.

    Meteor не советую. Это не будущее. Это костыль. Они хотели сделать фреймворк для real-time приложений. Но фактически получилась просто платформа для стриминга произошедших изменений в mongo прямо на клиент.

    Sails это попытка сделать full-stack фреймворк. Но весь мир движется в обратном направлении.
    Ответ написан
    3 комментария
  • Бесплатный хостинг для проекта на nodejs + mongodb?

    @twister9886
    NodeJS приложение на Google Cloud Platform с free планом

    Для этого понадобится:
    -продукт Google App Engine (это сам Node сервер)
    -продукт Google Cloud Storage (хостинг для статики (html, css, js файлов, но воможно для этого использовать и github pages, если репозиторий не приватный).)
    -Google Firebase (для хранения данных, всех операций чтения и простых неконкурентных запросов) Как вариант - БД на другом сайте с обращением для получения данных - $.fetch / axios.get / $.post

    Лимиты? Их вполне достаточно для небольших проектов, тестов. Данные для биллинга? Погуглите вопрос)

    Получаем сервер

    1)Регистрируемся в Google Cloud Platform, и создаем приложение. Указываем данные для биллинга (ничего снимать не будет, не переживайте, как только нужно будет платить вы получите уведомление и вам нужно будет подтвердить платеж).
    Открываем Cloud Shell — консоль для сервера.
    Заливаем нужный код на сервер, через git clone или любым удобным способом.

    2)Для первого приложения можете использовать Quickstart инструкцию от Google по этой ссылке — _https://cloud.google.com/nodejs/getting-started/he...

    Деплой приложения

    После того, как сайт / приложение залито на сервер, вы запускали его с помощью npm start, проверили работу, и хотите опубликовать — делаем следующее.

    1)Открываем папку с приложением в консоли и вводим команду:

    gcloud app deploy

    2)Ждем пока процесс завершится и вводим команду:

    gcloud app browse

    Вы получите URL — это и будет ссылка на ваш Node проект, которой вы можете поделится.
    Выглядит она так: _https://YOUR_PROJECT_ID.appspot.com

    Оригинал статьи marketolog.in/poluchaem-besplatnyj-nodejs-hosting-server-dlya-nebolshih-prilozhenij/
    Ответ написан
    2 комментария
  • С какой книги стоит начать изучать html5 и css3?

    @FullStackAlex
    Веб-разработчик, электрик, кочевник
    если знаешь английский то начинай с этих двух:
    John Duckett: HTML + CSS и JavaScript + jQuery

    обе можно легко найти в гугле в формате пдф:
    filetype:pdf john ducket (jQuery javascript OR css html)

    если же с английским не очень:
    Мэтью Мак-Дональд: HTML5 - недостающее руководство

    Дэвид Макфарланд: CSS3 - большая книга
    Ответ написан
    Комментировать
  • Есть ли единое API для доступа к данным чека онлайн касс?

    Actie
    @Actie
    Команда разработки CRM для промоакций
    В конце прошлого года ФНС выкатило официальное API «Проверка чека». Доступ к API дают если написать заявление, заверить электронной подписью, рассказать зачем и как будешь использовать. Мы сделали гем для Ruby если кто-то хочет заюзать.
    https://github.com/actie/fnsapi

    Нет смысла серыми путями пытаться проводить проверки через ОФД.
    Ответ написан
    9 комментариев
  • Как создавать архитектуру JavaScript приложений?

    @xom9lk
    Правильная и масштабируемая архитиктура:
    Смотри в сторону Backbone addyosmani.github.io/backbone-fundamentals
    Еще есть именно архитектура: Flux
    https://facebook.github.io/flux/docs/overview.html
    Не подумай ничего плохого, отличная статья))):
    blog.andrewray.me/flux-for-stupid-people
    Ответ написан
    Комментировать
  • Как создавать архитектуру JavaScript приложений?

    @aterentyev
    Почитайте "Совершенный код" от Стива Макконнелла
    Лучше и полнее книги на эту тему я не видел.
    Ответ написан
    Комментировать
  • Как создавать архитектуру JavaScript приложений?

    @Elizavetta
    Matroid: gamedev/js-разработка
    Паттерны в JS уже прочитали?
    Возможно, вы не уделяете внимание рефакторингу по мере написания приложения. Про рефакторинг можно много читать, например вот
    Ответ написан
    Комментировать
  • Есть ли единое API для доступа к данным чека онлайн касс?

    @Apollon_Diamed
    Ответ скорее всего неактуален, но вдруг в будущем кому понадобится - пост на хабре
    Ответ написан
    1 комментарий
  • Какой из современных векторизаторов наиболее эффективен?

    freeExec
    @freeExec
    Участник OpenStreetMap
    EasyTrace
    Ответ написан
    Комментировать
  • С какой книги лучше начать изучать HTML и CSS?

    wscms
    @wscms
    Я бы посоветовал начать с сайта htmlbook.ru/
    Очень полезный ресурс с массой информации
    Ответ написан
    6 комментариев
  • Сохранение фала csv в windows-1251, javascript?

    @maranqz Автор вопроса
    Kano, Спасибо за первую ссылку.
    Надо просто "некий текст", который я кладу в файл перевести в ссылку с кодировкой windows-1251.
    Я взял за основу https://github.com/mathiasbynens/windows-1251 и дописал.
    var encodeURL = function(input) {
            var length = input.length;
            var index = -1;
            var codePoint;
            var pointer;
            var result = '';
            while (++index < length) {
                codePoint = input.charCodeAt(index);
                // “If `code point` is in the range U+0000 to U+007F, return a byte whose
                // value is `code point`.”
                if (codePoint >= 0x00 && codePoint <= 0x7F) {
                    result += '%' + (codePoint<16?'0':'') + codePoint.toString(16);
                    continue;
                }
                // “Let `pointer` be the index pointer for `code point` in index
                // `single-byte`.”
                if (hasOwnProperty.call(INDEX_BY_CODE_POINT, codePoint)) {
                    pointer = INDEX_BY_CODE_POINT[codePoint];
                    // “Return a byte whose value is `pointer + 0x80`.”
                    result += '%' + (codePoint<16?'0':'') + (pointer + 0x80).toString(16);
                } else {
                    // “If `pointer` is `null`, return `error` with `code point`.”
                    result += error(codePoint, mode);
                }
            }
            return result.toUpperCase();
        };

    Или вот еще более полное решение по кодировки. text-encoding
    Ответ написан
    3 комментария