• Как вызвать действие после выполнения всех других?

    polarlord
    @polarlord
    Почитайте в доке описание put. Это не блокирующий эффект. Если вам нужен порядок - используйте putResolve.
    Также у вас первый и второй yield просто триггерят другие саги. Если у этих экшенов нет других side-эффектов - то проще напрямую вызывать эти саги через yield call. Тогда не будет лишних вызовов под капотом и эффект будет такой как вам надо. И в приницпе это - общепринятая практика.
    Ответ написан
    Комментировать
  • Что почитать по работе JavaScript "под капотом"?

    polarlord
    @polarlord
    Ответ написан
    Комментировать
  • Как подключиться к сокету?

    polarlord
    @polarlord
    Не пробовали делать тот же самое, но без socket.io ? Как здесь. На коде из примера по вашей ссылке connect происходит без проблем. Проверял на expo, не cli.
    Ответ написан
    1 комментарий
  • Как сделать Bottom Action Sheet в React Native?

    polarlord
    @polarlord
    Есть такие варианты (от простых к сложным):
    1. Воспользуйтесь поиском в гугле. Есть масса готовых решений, вы не первый кому нужно такое средство. Как пример, вот что удалось найти за минуту поиска:
    раз
    два
    три
    2. Писать самому, используя Modal. Это родной компонент React Native. Для аннимации выезжания вверх ставите проп animationType={slide}. Всё остальное - делаете как обычный компонент.
    3. Писать самому используя LayoutAnimation или Animated. Создаёте ваш виджет, делаете ему postion: absolute и анимируете ему свойство top (для Animated) или просто меняете top и задаёте аннимацию (для LayoutAnimation).
    Ответ написан
    1 комментарий
  • Ошибка: Cannot read property 'push' of undefined как решить?

    polarlord
    @polarlord
    Этот код работает:
    this.props.logoutUser(this.props.history)

    Этот код вызывает ошибку (вызывается метод у аргумента который не передали):
    store.dispatch(logoutUser());

    Попробуйте в logoutUser() передавать то что он хочет, либо в нём обращаться к этому аргументу по условию:
    if (history !== 'undefined') {
      history.push('/login')
    }
    Ответ написан
    Комментировать
  • Прокидывать пропс или создать много контейнеров?

    polarlord
    @polarlord
    Смотрите, прокидывать через все приложение кучу props - это очень неправильно. Если будет меняться какой-либо пропс то он вызовет обновление всех компонентов через которые он явно передается, даже если он там не используется. Если уж очень хочется использовать такой путь - то уж лучше использовать React Context.
    По поводу создания контейнеров - тут вопрос стиля. Я довольно часто встречаю в проектах такое разделение:
    components - все stateless компоненты и также компоненты где нужен только стейт из redux, тут просто сам компонент заворачивается в connect()
    containers - компоненты где нужны и стейт и экшены, тут нужно помнить основные свойства (из знаменитой статьи) контейнеров, т.е. никакой верстки, возможно использовать только другие компоненты и т.д.
    Хотя правильнее всего разбивать приложение на небольшие и универсальные компоненты, как написали выше. Это конечно не так просто в начале, по сравнению с убер-компонентами, но зато потом это все окупится с лихвой.
    Ответ написан
    Комментировать
  • Почему в данном примере результат замыкания 5, а не 6?

    polarlord
    @polarlord
    А почему должно быть 6 ? Поменяйте в counter() на return ++currentCount; и будет вам 6.
    Про разницу между формами инкремента читайте тут https://learn.javascript.ru/operators#inkrement-de...
    Ответ написан
    Комментировать
  • Как dispatch оказался в props?

    polarlord
    @polarlord
    Потому что в данном примере в connect() не передается mapDispatchToProps() а по-умолчанию его значение это dispatch => ({ dispatch })
    Больше можно почитать в офф. доке https://react-redux.js.org/docs/api#arguments или здесь https://stackoverflow.com/questions/34458261/how-t...
    Ответ написан
    Комментировать
  • PHP vs GOLANG, парсер, на чем писать?

    polarlord
    @polarlord
    Как уже выше заметили - основную часть времени программа будет простаивать, т.е. ожидать ответ (загрузка страниц). В общем flow это время будет несоизмеримо больше чем обработка ответа. Поэтому оптимальнее здесь использовать асинхронную сетевую модель, когда вы отправляете массу запросов, а потом по событиям уже будут "дёргаться" обработчики ответа. Это гораздо экономнее нежели многопоточный подход, даже если это будут green threads Go. Ведь в последнем случае будет создано множество потоков с запросами, которые будут простаивать 90% времени своей работы в ожидании ответа.
    Почему такое внимание уделяется времени простаивания (ожидания ответа) ? Дело в том, что только в идеальных условиях вы получаете ответ на запрос максимально быстро. В реальных же условиях далеко не всё так безоблачно. К тому же не забывайте про использование прокси, иначе вас непременно будут банить. А использование прокси увеличивает время ожидания ответа весьма значительно.
    Ответ написан
    Комментировать
  • Чем лучше и быстрее парсить Amazon на Python?

    polarlord
    @polarlord
    Занимаюсь парсингом Амазона в промышленных масштабах (сотни тысяч страниц в день). Самая большая проблема не в библиотеках, а в том, что Амазон очень умело выявляет попытки парсинга и при этом постоянно совершенствует собственную технику обнаружения таких попыток. Поэтому самый действенный способ - это иметь в своем распоряжении приличный набор качественных прокси (с теми у которых отличается только последняя секция и номер порта долго работать не получится - попадут в черный список на срок от часа до суток, в зависимости от того как интенсивно будете через них слать запросы).
    По поводу библиотек - выбирайте их в соответствии с вашими потребностями, отталкиваясь от объема запросов которые нужно слать. Самые простые - это всякие requests, urllib, pycurl, multycurl. Ими целесообразно пользоваться в однопоточном и синхронном типе парсеров. Но практически всю работу будете писать руками. Если хотите чуть больше мощности и удобства - посмотрите в сторону Grab. Он может многое, в т.ч. удобно работает с прокси и т.д. Если нужен большой объем и скорость - используйте Scrapy. Крутая штука, но со своими правилами. Однако если нужно будет затачивать под себя - в сети много информации по нему.
    С API Амазон можно и нужно работать. Но есть несколько проблем:
    1. Существует лимит на кол-во обращений(тут подробнее, но можно в одном запросе слать до 10-ти ASIN).
    2. Самое неприятное, что по некоторым товарам (при использовании lookup-методов) инфа не приходит либо отличается от оригинала(сайта). Т.е. не нужно полагаться на то, что АПИ будет возвращать информацию полностью идентичную с их сайтом.
    3. Ограничение на кол-во товаров по которым возвращается инфа (при использовании search-методов). 100 товаров. Дальше - только парсинг. Такое ограничение не только у Амазон, у Ebay так же. Без этого - кол-во всяких дропшиперов и прочих посредников просто зашкалило бы.
    Несколько нюансов:
    -Не пытайтесь выдавать себя за Google Bot, ничего хорошего не выйдет, только потратите время.
    -Использование всяких браузерных технологий, наподобие PhantomJS или даже Selenium, толку не принесет. Там к проблеме IP еще добавятся куки и т.п. По скорости будет медленно, для больших объемов не подойдет.
    -Главное, как уже понятно, обойти систему которая определяет ботов и краулеры. Поэтому импровизируйте, экспериментируйте, думайте головой и ищите свои решения. На том конце сидят тоже люди ) В сети масса советов по этому поводу (можете начать с последнего раздела здесь).
    Ответ написан
    5 комментариев
  • Как просмотреть трафик определенной программы?

    polarlord
    @polarlord
    Если под винду, то самое удобное чем пользовался - HTTP Analyzer
    Перехватывает как HTTP так и HTTPS. Конкретного приложения. Может сохранить трафик в файл, чтобы потом открыть и не спеша проанализировать.
    Минус - платная программа. Но есть кряки, если не смущает моральная сторона вопроса.
    Ответ написан
  • Как изменить число в строке скрипта?

    polarlord
    @polarlord
    Использовал такой способ, когда нужно было собирать много инсталляторов на InnoSetup с разными параметрами, которые должны были меняться в самом скрипте .iss.
    При создании инсталлятора (вызов ISCC.exe) можно передавать пользовательские параметры, которые можно использовать внутри скрипта. Все такие параметры передаются в виде /dMY_PARAM = param_value. Т.е. /d - это обязательная стандартная часть, потом должно идти имя которое вы зададите. В самом скрипте к таким параметрам можно обращаться так {#MY_PARAM}. Без d.
    Например, полная строка команды на сборку скрипта может выглядеть так:
    ISCC.exe /dMY_PARAM_1 = 123.44 /dMY_PARAM_2 = "hello" myscript.iss
    Внутри myscript.iss значения этих параметров можно использовать так:
    {#MY_PARAM_1} и {#MY_PARAM_2}
    Ответ написан
    1 комментарий
  • MonoFramework for mac?

    polarlord
    @polarlord
    Делали всё так как написано здесь www.mono-project.com/docs/about-mono/supported-pla... ?
    Ответ написан
    Комментировать
  • Как сделать такой график?

    polarlord
    @polarlord
    https://google.com/search?q=ios+circular+progress+bar
    по первой же ссылке https://github.com/matibot/MBCircularProgressBar
    добавить/изменить текст внутри я думаю не будет большой проблемой
    Ответ написан