• Где найти игры для веб-программиста?

    Beeetle
    @Beeetle
    https://flexboxfroggy.com по флексам
    https://cssgridgarden.com по гридам
    Очень прикольные сервисы по изучению в игровой форме
    Ответ написан
    2 комментария
  • Как удобно реализовать роутинг при большом списке роутов на Koa?

    DexterHD
    @DexterHD
    Software Engineer, Teamlead, CTO
    Я бы предложил вообще вынести список роутов в один файл. Ведь по сути роутинг это просто связывание хэндлеров с определенным URL (Иногда с привязкой middleware посередине).
    Далее этот файл положить в одном каталоге с точкой входа в приложение и в него уже заимпортить реализации хэндлеров из тех модулей которые необходимы.

    Это позволит полностью отделить реализацию от путей. А так же позволит не запутаться в огромном кол-ве путей и групп, т.к. они будут в одном месте.

    // routes.js
    import users from './users';
    import posts from './posts';
    
    router
      .get('/', app.homeHandler)
      .get('/posts', posts.listHandler)
      .post('/users', users.createHandler)
      .put('/users/:id',  users.changeHandler)
      .del('/users/:id', users.deleteHandler)
      .all('/users/:id', users.allHandler);
    Ответ написан
    Комментировать
  • Стоит ли изучать nuxt.js?

    kleinmaximus
    @kleinmaximus
    Senior Full-stack Javascript Developer
    Лучше использовать vue-cli-3 и плагин @vueneue/ssr.

    В предыдущих проектах использовал Vue Server Renderer, поскольку он более гибкий. В nuxt некоторые вещи сначала жизнь упрощают, а потом реально начинают ее портить. Взять даже тот самый хваленый роутинг на файлах. Я бы понял, если бы он поддерживал все возможности vue-router, но он реально практически все отрезает :( Можно, конечно, отключить это дело или вообще написать свой шаблон формирования роутинга для Nuxt, но зачем же тогда сам Nuxt?

    Дальше планирую пользоваться связкой vue-cli-3 + плагины (в т. ч. указанный выше).
    Ответ написан
    2 комментария
  • Эффект блика на рамке css?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Вот накидал блики, при желании можно раскачать до вполне приемлемого состояния https://jsfiddle.net/l2banners/tjm7p1r6/4/

    по поводу косых линий на фоне, они сплошные, их можно в ксс сделать и под низ положить впринципе это не сложно, ну а сами блоки сделать белыми почти прозрачными... Ну и все, тени тоже не проблема, тени можно через js двигать при прокрутке
    Ответ написан
    Комментировать
  • Как работает Node.js?

    rockon404
    @rockon404
    Frontend Developer
    Ответ написан
    Комментировать
  • PHP-клиент для Websocket(socket.io) по wss (SSl от letsencrypt)?

    https://github.com/walkor/Workerman
    Пользовался этим пакетом, всё отлично работает. С let сертификатом.
    Ответ написан
    Комментировать
  • Тестовое задание для собеседования на php программиста?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Мы ожидали увидеть приложение с использованием готовых библиотек для работы с HTTP, базой данных, работы с консолью. А также легко расширяемое и поддерживаемое.

    Теперь понятно, что они хотят — но в ТЗ не было указано:
    • Под HTTP понимают либы, работающие с PSR 7 или близкие по «духу», например Symfony HTTP Foundation
    • Под БД понимают Doctrine 2 или Eloquent
    • По консольным — на рынкке используют как правило Symfony Console

    Именно это и хотели, предлагаю вам либо объяснить и написать уже на компонентах, либо послать к черту, НО отметить этот момент и на будущее таки делать уточнение, каковы ожидания от задания...
    Нескольких людей встречал до фанатизма не принимающих сторонние пакеты, и наоборот... Это нужно учитывать... видел задания на PHP 5.3, видел задания строго на Codeigniter...

    Тут на Тостере был пример, когда человек применил композер даже не для сторонней либы, а для внутренних, так на него тимлид сокрушился...
    Разве Composer бесполезен в 2017?

    Люди разные :)


    Материал по компонентной разработке

    Елена,
    не нужно Symfony ассоциировать с фреймворком — это в первую очередь компоненты — потрясающие компоненты:
    • Symfony Console
    • Symfony HTTP Foundation
    • Syfony Routing (к слову очень быстрый, недавно ускорили его в 70 раз ребята и сделали самым шустрым компонентом)
    • Twig
    • Debug
    [*!*] В некоторых вакансиях даже указывают, что нужно уметь работать с некоторыми выше перечисленными компонентами :) Пруф: https://novosibirsk.hh.ru/vacancy/25367906

    Doctrine — совсем не из Symfony и этот компонент можно использовать где угодно

    Zend к слову пошел по тому же пути, например
    • для HTTP Request/Response PSR 7 у него есть отличный компонент Zend Diactoros,
    • для работы с PSR 15 Middleware есть компонент Zend Expressive,
    • для работы с ролями и правами крутое решение Zend ACL

    Laravel уже да — фреймворк, и опять же на компонентах, и можно использовать его куски, например у него замечательная ORM (Active Record) — в отличие от AR в Yii2 ее можно (и нужно) использовать в любом кастомном проекте вне фреймворка Laravel или вообще фреймворка там , где Доктрина лишняя


    Почитать и посмотреть:

    Современный PHP без фреймворков (статья Mail.ru на Хабре)
    Консольное приложение (мастер-класс) — собрано из компонента Symfony Console и ORM Eloquent (от Ларавел)
    PSR-7 фреймворк от Д.Елисеева
    Ответ написан
    3 комментария
  • Как организовать взаимодействие с серверным API?

    Eastman
    @Eastman
    Frontend's Zen
    Могу по этой ссылке предложить, как пример, свой проект, пока еще не доработанный, но в котором довольно легко можно увидеть архитектуру постройки приложения.
    Стоить заметить, что такую же архитектуру я использую на большом коммерческом проекте с API/React/Redux, то есть, полностью подходящим к вашему описанию.
    Коротко о приложении:
    1. Бандл разделен на vendors и ваш код
    2. Роутинги организованы в виде plain-objects с динамической подгрузкой ресурсов на каждом роуте - это довольно неплохо дробит бандл с вашим кодом
    3. Redux код спроектирован по паттерну redux-ducks. Мне облегчило жизнь, надеюсь и вам поможет.

    Связь приложения с API, опять же, коротко:
    Есть smart и dumb компоненты. Smart-компоненты вызывают необходимые actionCreator'ы из папки redux/modules. ActionCreator'ы обращаются в соответсвующий модуль в папке api, где происходит обращение к серверу, откуда в Promise'ах возвращаются данные опять же в actionCreator, где action диспатчится с данными, после чего reducer обновляет данные в store. Smart-компонент обновляется и обновляет все свои dumb-компоненты, которые включенные в него, передавая им полученные данные.
    Используя написанное, пройдитесь по коду и надеюсь все прояснится. Удачи.
    Ответ написан
    4 комментария
  • Как анимировать несколько объектов?

    twobomb
    @twobomb
    Никогда не ставь gameLoop функцию на setInterval!Потому-что если будут какие-то сложные вычисления физики допустим, подвисания, то она вызовется пока еще не завершилась прошлая, только setTimeout или requestAnimationFrame.
    Вот держи. Еще я поправил collision, так как ты не учитываешь размеры самого шара. И еще рекомендую избаваться от xSpeed,ySpeed. Добавить одну speed и angle(в радианах) и двигать x+= speed * Math.sin(angle), y+= speed * Math.cos(angle). А ну и конечно сделай колизиция шар с шаром
    Ответ написан
    Комментировать
  • Как прервать процесс в случае недоступности прокси сервера?

    Ahen
    @Ahen
    Универсальный дилетант
    request.get('http://10.255.255.1', {timeout: 1500}, function(err) {
        console.log(err.code === 'ETIMEDOUT');
        // Set to `true` if the timeout was a connection timeout, `false` or
        // `undefined` otherwise.
        console.log(err.connect === true);
        process.exit(0);
    });
    Ответ написан
    1 комментарий
  • Node: событие 'close' у req и res?

    Комментировать
  • Как организовать автокомплит адреса в Elasticsearch?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    Натравить analyzer ниже, вписав его в индекс и к нужным полям:
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "address_analyzer_toster": {
              "tokenizer": "whitespace",
              "char_filter": [
                "useless_symbols",
              ],
              "filter": "useless_words": {
                        "type":       "stop",
                        "stopwords": ["ул", "д", "проезд", ...]
              }
            }
          },
          "char_filter": {
            "useless_symbols": {
              "type": "pattern_replace",
              "pattern": "[,\.:].*",
              "replacement": ""
            }
          }
        }
      }
    }
    Ответ написан
    Комментировать
  • Что необходимо чтобы развернуть своей почты?

    Для начала 3 полезных сайта: 24whois.ru для проверки записей, если не хочется возиться с nslookup, mxtoolbox.com для проверки настроек smtp сервера и pdd.yandex.ru бесплатный DNS сервер.
    Предположим, у Вас есть белый IP 50.100.150.200, по которому доступен будущий почтовый сервер и домен homepage.ru.

    1. Создайте A запись для данного IP адреса. Например, это может быть так:
    Хост: mail.homepage.ru
    Тип: A
    Значение: 50.100.150.200

    2. Создайте для @ MX запись с меньшим приоритетом, чем уже существующие (например, для серверов с приоритетом 10 и 20 основным будет 10) и впишите в неё созданный поддомен:
    Хост: @
    Тип: MX
    Значение: mail.homepage.ru
    Приоритет: 5

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

    3. Обратитесь к хостеру, у которого стоит сервер или провайдеру, если сервер дома, чтобы он сделал следующую PTR запись (IP должен быть "перевёрнут"):
    200.150.100.50.in-addr.arpa IN PTR mail.homepage.ru

    4. Настройте SPF на DNS сервере. Например, если у Вас 1 IP - можно указать только его, а почту с остальных объявить недоверенной (~all) или вообще советовать сразу отклонять её (-all).
    Хост: @
    Тип: TXT
    Значение: v=spf1 ip4:50.100.150.200 ~all

    Вот как это выглядит у яндекса: 24whois.ru/?data=_spf.yandex.ru&t=nslookup&dns_type=txt и с раскрытыми IP адресами: 24whois.ru/?data=_spf-ipv4.yandex.ru&t=nslookup&dn...

    5. При помощи mxtoolbox или другого сайта проверьте свой IP на нахождение в чёрных списках и подайте заявки на исключения из них. Вы 99,9% будете хотя бы в одном списке, как минимум надо проверить spamhaus - им многие пользуются.

    6. Желательно на сервере настроить правильный ответ HELO/EHLO: mail.homepage.ru
    Ответ написан
    3 комментария
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
    2 комментария
  • Стоит ли переходить на React.PureComponent по-умолчанию?

    PQR
    @PQR
    React.PureComponent реализует метод shouldComponentUpdate таким образом, что он делает поверхностное сравнение props и state (не глубокое). Вот собственно код:
    https://github.com/facebook/react/blob/c8fbdac2271...
    shouldUpdate =
                !shallowEqual(prevProps, nextProps) ||
                !shallowEqual(inst.state, nextState);


    Что такое shallowEqual? Это по сути сравнение оператором === каждого элемента из prevProps с каждым элементом из nextProps. На всякий случай дам ссылку на реализацию для полного понимания: https://github.com/facebook/react/blob/6963ea4bfcd...

    В итоге всё зависит от структуры ваших props. Если в props вы передаёте объекты которые иногда мутируются, т.е. по ссылке они равны ===, но внутри какие-то данные поменялись (что само по себе выглядит странно в экосистеме redux + reselect, но вполне возможно технически), тогда использование PureComponent вам всё поломает, т.к. на экране какие-то компоненты перестанут перересовываться!

    Если же у вас всё по уму, данные которые передаются через props являются скалярными типами (string, int, float, bool) или immutable объектами, тогда смело используйте PureComponent - в некоторых случаях он поможет избавиться от лишних вызовов render.

    Важное замечание: PureComponent нужно использовать только для так называемых presentational components, т.е. для тех компонент, которые НЕ обёрнуты в вызов redux connect().

    Для container components (т.е. тех компонент, которые обёрнуты в redux connect()) нет смысла наследоваться от PureComponent, т.к. метод connect() оборачивает ваш компонент своей реализацией shouldComponentUpdate, которая также использует shallowEqual. Если вы по недосмотру унаследуете container component от PureComponent - ошибок не будет, но это не имеет никакого смыла, т.к. ваш код по сути будет дважды делать shallowEqual, а зачем делать лишнюю работу?

    Подводя итог, рецепт такой:
    - presentational components наследуем от React.PureComponent
    - container components (которые обёрнуты в redux connect()) наследуем от старого доброго React.Component
    Ответ написан
    1 комментарий
  • Что делает этот код?

    t3h_l3w1z
    @t3h_l3w1z
    Обкашливаю вопросики.
    Возможно, нечто вроде preventDefault, возвращает для клика false => браузер никуда не переходит.
    Ответ написан
    1 комментарий
  • Front-end разработка, правильная сборка?

    search
    @search
    мама говорит что я особенный
    Если компания дорожит качеством продукта и безопасностью данных своих клиентов, то сборка и выкат новой версии проводится автоматически Continuous Intrgration сервером. У программистов вобще нет доступа к проду. Доступ к проду есть только у CI-сервера. У программиста есть доступ только к GIT репозиторию проекта. Вся работа проводится в своём окружении и в отдельной ветке. Затем ветка тестируется на тестовом окружении (близком к продакшену), если надо правится, и затем вливается в главную ветку проекта. После этого CI подхватывает изменения, билдит фронт и бэк и выкатывает это дело на прод. Это очень общий вариант. Там есть куча нью-ансов.

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

    UPD
    Забыл сказать, что этот путь не даётся легко. Нужно потренироваться где-то полгодика. Но зато на всю жизнь получаешь спокойные ночи и здоровый цвет лица, так что оно того стоит.
    Ответ написан
    2 комментария