• Перестали форвардиться письма с почты Яндекса на Gmail

    Столкнулся с подобной проблемой. Завёл новый аккаунт в Яндекс.Почте, настроил пересылку емейлов с yandex на gmail. Тестировал отправку писем с этого же gmail, куда должна была произойти пересылка, но ничего не приходило.

    Оказалось, gmail просто фильтрует такие письма. Попробовал отправить письмо на Яндекс с другой почты и пересылка сработала.
    Ответ написан
  • Как сделать обтекание картинки текстами внутри DIV?

    Как один из вариантов — flexbox.
    https://www.youtube.com/watch?v=EO8hH_2OwCU
    Там 4 видео. Рекомендую пройти весь небольшой курс по вёрстке, парень очень толково и просто объясняет.

    Пример: https://jsfiddle.net/6x2wuf51/1/
    Ответ написан
  • Как начать работать без "фонового шума"?

    1. Попробуйте медитацию. Статей и видео много, но если кратко, то: садитесь в тихое и спокойное место, 15 минут сидите ровно, стараясь ни на что не отвлекаться. Мысли будут всплывать и забирать внимание на себя, но нужно это отлавливать и стараться опять ни о чем не думать. И так 15 минут.
    2. Попробуйте не сразу включать музыку или шум, а понять, для чего он вам необходим. Если вы нашли ответ через минуту или через пять, то скорее всего это лишь поверхностная мысль, попробуйте подумать и понаблюдать ещё. Может быть, вас гнетёт тишина? Тогда включите музыку без слов, а-ля https://music.yandex.ru/search?text=%D1%88%D1%83%D0%BC. А может быть вы хотите включить ютуб и часто во время работы на него переключаетесь? Тогда скорее всего дело в самой работе — она вас не мотивирует. Нужен отдых, дать себе заняться тем, чем хочется (денек-другой за свой счёт + 2 дня выходных) и не заставлять делать то, что нужно. Ну и можно пойти дальше и понять, почему работа демотивирует — неинтересная задача, коллектив, слишком большие ожидания от вас, давящие сроки, непонятные требования. После этого обсудить с кадровиком или начальством.
    Ответ написан
  • Как запретить втоматический зум при изменении ориентации мобильного устройства?

    Скорее вопрос — а пробовали убрать target-densitydpi=device-dpi"? И можете сделать пример на jsfiddle или codepen? Не совсем понимаю, как выглядит этот зум.
    Ответ написан
  • Двунаправленный infinite scroll?

    -Я не могу задать scrollTop, так как не знаю точную высоту элементов. Возможно, это можно без проблем посчитать и подогнать, ноо..

    А если через offsetTop первого элемента? То есть запоминаем самый верхний элемент перед вставкой новых, вставляем, скроллим вниз до нового значения offsetTop для запомненного элемента.
    Ответ написан
  • Symfony 4 расширение и перехват действий HttpKernel?

    P747 Этот вопрос — продолжение предыдущего про модульность? :) Дайте больше данных, какие всё-таки модули вы хотите. Какие юзкейсы?

    Если нужно будет собирать сборки, состоящие из определённых фич, и отдавать закачикам, то это упоминаемые раньше symfony/flex с его рецептами для бандлов. Можно написать свои рецепты, если хочется изменить дефолтные значения инициализации бандлов.

    Если вопрос динамического изменения функционала, тогда вопрос — от чего зависит эта динамика.
    - Можно переписать ControllerResolver,
    - Можно просто EventListener на самое раннее событие повесить, которое ещё до ControllerResolver'a срабатывает.
    - Можно на уровне роутинга запросов
    - Можно и на уровне Security компоненты разрулить — через роли, воутеры, ACL (в зависимости от сложности требуемых прав).
    - Можно создать дэшборд супер-админа, который будет дергать тумблеры для фич, а код уже будет их скрывать или показывать. В целом, этот вариант идёт бок о бок с предыдущим.

    В общем, нужны детали конкретной задачи, вариантов масса.
    Ответ написан
  • Как в мессенджерах реализовано подключение контактов?

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

    - Чаще всего популярные мессенджеры сразу создают юзера для каждого человека из контактов. И да, хранят личную таблицу имён контактов для каждого пользователя. Например, так сделано в Skype и Whatsapp. В Телеграме не создают юзера, пока он сам не зарегается, но там и не дают возможности "переименовывать" свои контакты — как пользователь себя назвал, так и будет отображаться.
    - Для таких задач используются NoSQL базы, что ускоряет запросы и убирает необходимость кэширования.
    - Базы данных шардируются по user_id, чтобы получать все данные юзера максимально быстро, включая его контакты, чаты и тп.
    Ответ написан
  • Как можно хранить в базе данных полные и неполные даты с возможностью поиска?

    Насколько знаю, таких встроенных возможностей у mysql нет. Поэтому остаётся вариант несколькими столбцами или хранение даты в виде строки 'YYYY-mm-dd'. Тогда сможете естественным образом сравнивать строки "2020", "2020-04" и "2020-04-05". Искать вхождение подстроки в строке через LIKE "2020%". Но скорее всего будут просадки по производительности. Тем не менее, если пользователей у вас немного и/или этот функционал не так часто будет запрашиваться, то такой вариант имеет право на существование. Только индекс на столбец не забудьте.
    Ответ написан
  • Как реализовать кнопку с type=submit без перезагрузки страницы?

    Пример с картинки делается стандартной браузерной валидацией. Просто укажите у инпута аттрибут required.

    Но если хочется свою кастомную валидацию, которая будет работать во всех браузерах, тогда в коллбэке, обрабатывающем submit событие, нужно добавить event.preventDefault() и для верности в конце коллбэка вернуть return false.

    https://developer.mozilla.org/ru/docs/Web/API/Even...
    Ответ написан
  • Что из этого будет правильным/компромиссным архитектурным решением?

    К сожалению, нет данных, почему базы удаленные и разделены на несколько. Это сильно влияет на ответ. Может быть это хотелка ваших клиентов, чтобы все данные хранились именно на их базах? Или по юридическим соображениям. Тогда имеет смысл вариант 3 — вы просто продаёте комлексный self-hosted продукт. Не думаю, что для админов составит много труда настроить системы мониторинга, сбора логов и бэкапа. Один раз написать скрипты и потом это автоматизировать.

    Но если считать, что никаких ограничений нет, то я за вариант 2. Логичнее всего иметь одну базу, где каждая сущность имеет client_id, а в коде на уровне базовых классов ORM добавить фильтр по нему. С серверной стороны — шардинг по client_id:
    — Всё будет работать быстро и масштабироваться горизонтально по мере роста клиентов
    — Придётся архитектурно немного заморочить, но имхо меньше, чем в предложенных вами вариантах
    — Можно иметь общий дефолтный ACL для всех клиентов с возможностью кастомизации для каждого из них (уверен, что это понадобится)
    — Все данные в одной базе и при желании вы сможете сделать дэшборд для супер-админа, который будет уметь редактировать всё это хозяйство по всем клиентам сразу и онбоардить нового клиента: создать входной аккаунт для админа клиентской компании, установить дефолтные настройки и определить доступный набор фич. Если такое планируется, советую сразу продумать архитектуру, иначе будет потом крайне больно.
    Ответ написан
  • Как пройти капчу с другого сайта?

    Подозреваю, что вариантов вообще нет. Скорее всего гугл генерит эту капчу конкретно для того браузера, который её запросил, с проверкой на уникальность по аппаратной части, а не только по браузеру. Он просто не примет ваш ответ. Аналогично с тем, как ГуглАналитика ставит пользователю метку уникальности.

    Или я не правильно понял задачу?
    Ответ написан
  • Laravel vs Symfony?

    1. Масштабируемость и гибкость
    Одинаковы, но бытует мнение, что Symfony чуть гибче в реально больших приложениях. Но имхо, вопрос вкусовщины.
    2. Модульность(как в yii)
    Не знал, что в YII есть какая-то красивая модульность.
    Symfony пошла дальше всех и создала symfony/flex (считай надстройка над композером). Хочешь админку поставить — composer require admin, где admin — уже существующий рецепт с дефолтными конфигами и т.п. Хочешь удалить бандл — composer remove admin. Всё удалится без конфликтов.
    3. Расширяемость(где больше готовых пакетов решений для "старта из коробки")
    В Ларавеле готовых пакетов столько же, но они лучше описаны. Они позаботились и об окружении, и о тестах, и об оплате через stripe, о скрипте деплоймента, куча всего.

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

    Расскажите про модульность YII, как вы её понимаете, и которой не хватает в Симфони, пожалуйста. Интересно послушать.
    Ответ написан
  • Как организовать безопасную работу MySQL + PHP для игры на Unity?

    Если злоумушленник, декомпилировав игру получит прямые ссылки к скриптам PHP, может ли он в теории чего нибудь натворить плохого?

    Эти скрипты PHP должны быть выполнимыми не должны быть скачиваемыми (обычно дефолтно настроенный веб-сервер так и делает). То есть при запрос скрипта, веб-сервер не отдаст его как текстовый файл, а выполнит все инструкции пхп и потом вернёт только то, что пхп выведет. Например, всё, что заключено в <?php .... ?> будет скрыто, кроме того, что выводится функциями echo, print и подобными.

    Вы не скинули файл register.php целиком, но подозреваю, что он весь внутри <?php тега, поэтому можно не переживать, что обратившийся к скрипту пользователь увидит параметры коннекта к базе.

    По безопасности в целом — есть два подхода:
    1) Сделать обычную регистрацию и авторизацию внутри Юнити приложения. Как я понимаю, у вас сейчас так и сделано. После регистрации Юнити получает токен и использует его для всех последующих запросов. Токен желательно делать протухающим со временем.
    2) Сделать регистрацию и авторизацию на сайте, пройдя которую человек может получить доступ к странице, в которую встроено Юнити приложение. И при рендеринге приложения ему сразу же передаётся такой же токен для запросов, что и в пункте выше.

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

    https://dev.mysql.com/doc/refman/5.6/en/enum.html#...
    Если используется кошерное enum поле, то сортировка идёт в порядке объявления значений в ENUM. Если поменяете порядок, то и сортировка изменится. Другого прямого способа нет.
    Ответ написан
  • Как показать кнопку после появления блока?

    1) А нет возможности выполнить js при прохождении теста? Может плагин даёт какой-то коллбэк? Тогда просто этим скриптом можно показывать скрытую кнопку.
    2) Помогут селекторы:
    .wq-results ~ button.next-lesson – правые соседи: все button на том же уровне вложенности, которые идут после div с результатом.
    .wq-results + button.next-lesson – только первый правый сосед
    То есть логика такая, что если появляется блок с результатом, то мы через такой селектор добавляем кнопке display: block;
    Ответ написан
  • Не получается отправить форму на сервер?

    Если в примере выше убрать последнюю строчку `});` то всё работает
    https://jsfiddle.net/1yfqnx6s/2/

    Я бы только добавил return false в конце `form.addEventListener('submit', function(event) {`
    И третий параметр явно указал как true в `request.open('POST', 'server.php', true);`
    Ответ написан
  • На чем лучше строить проект?

    Сергей правильно расписал. Для ещё большей гибкости я бы посоветовал использовать очереди.
    Тогда первый сервис будет парсить tcp-соединения и класть сообщение в очередь (RabbitMQ, Kafka). Вторая часть, которая будет бэкендом для мобильных приложений, будет читать ещё и очередь. При получении сообщения из очереди, записывает в базу и шлёт PUSH сообщение на мобилки. Также мобилки могут иногда сами запросить данные (при первом запуске или при pull-to-refresh фиче, например), тогда ваше API вернёт данные из базы.

    Если нужен прям реальный realtime, то тогда это вопрос другого порядка. Скорее всего нужно написать демона, который будет парсить tcp и транслировать UDP. А мобилки будут на это подписываться. Но тут есть нюансы с авторизацией и т.п. Зависит от вашего функционала. Но чаще всего настоящий realtime не нужен. Задержка в секунду более чем допустима для тех сервисов, которые нас окружают.
    Ответ написан
  • Как вывести количество всех добавленных категорий магазина?

    Мало знаком с вордпрессом, но смотрите в сторону GROUP BY запросов. Должно получиться что-то типа:
    SELECT name, COUNT(id) FROM products GROUP BY name;

    Вернётся массив вида:
    [
    ['Кексы', 2],
    ['Круассаны', 1],
    ]
    Ответ написан
  • Как перевести js переменную в php?

    Пётр, уточните вопрос. Что вы хотите сделать более глобально?

    Краткий ответ на текущий вопрос — этого сделать нельзя, так устроен веб. Упрощённо:
    - браузер пользователя запрашивает страницу
    - веб-сервер получает запрос, просит php-модуль обработать запрошенный файл и вернуть html/js/css
    - php проходится по файлу, выполняет те команды, которые написаны в <?php ?> тегах, возвращает html/js/css
    - веб-сервер возвращает это браузеру пользователю
    - браузер отрисовывает страницу, где аналогично php-модулю, вычленяет и выполняет все вставки яваскрипта
    Ответ написан