• Долгая обработка запроса php как передать браузеру что бы ждал ответа?

    neuotq
    @neuotq
    Прокрастинация
    Ну тут если делать всё прямо, то это тупо висящая страничка. Опасность еще в том, что пользователь в любой момент может нажать обновить страницу например. В любом случае, в прямом случаи вам нужно смотреть настройки таймаута длительности запроса в настройках php и вашего веб сервера.
    А так.. даже не знаю, может стоит проверять что запрос будет долгий, и если запрос будет долгий, вначале редиректить на временную страницу с предупреждением, а оттуда с таймаут уже на запрос, чтобы у пользователи перед глазами висела надпись ждите и ничего не трогайте.
    Это я описал алгоритм без js, со временной страницы можно редирект делать через
    .
    А так... всё же лучше делать отдельно задания.
    Те пользователь отправил вам тяжелый запрос, вы его приняли, сразу вернули пользователю ответ что я принял задание, будет готово через 20 минут. А в коде в расписание/очередь свыставляете задание на генерацию вашей csv.
    А далее пользователь получает(пуш уведомление. email еще как, это не суть) уведомление о готовности задания, либо о его не удачи.
    Ну те вам нужен: очередь/планировщик задания, события, уведомления.
    Я бы на вашем месте всё же рассмотрел либо фреймворк какой-то, либо комопненты Симфони или в репозитории composer поискал что-то, для облегчения задачи. Чтобы меньше велосипедов плодить.
    Ответ написан
  • Выходит ошибка, не могу понять в чем дело?

    neuotq
    @neuotq
    Прокрастинация
    Если User::find(1) возвратить null, а значит пользователя с id 1 нет, то дальнейшая цепочка не будет работать, так как "волшебство" не получится из-за отсутвия объекта класса User.
    Лучше всё таки юзера заранее найти и сохранить в переменную(так же это позволит не делать доп запросы к базе, если будете использовать сущность еще раз).
    $user = User::find(1);
    А далее уже вы можете испоьзовать првоерки существования, перед выовом метода, например:
    $moderator = isset($user) ? $user->moderator : null;
    Ответ написан
    Комментировать
  • Как правильно указать зависимости своего пакета?

    neuotq
    @neuotq
    Прокрастинация
    Прочитав комментарии, заметил что вы слишком жестко указали версию php.
    Лично я советую сатвить как можно меньшую (со знаком больше либо ровно), на которой конкретно ваш пакет будет работать.
    Например, если конкретно ваш код, способен работать на 5.4, ставьте ее, возможно ваш пакет буду использовать на более старых системах. Естественно если есть прям зависимости ,которым нужно больше априори, то смысла в этом не будет. Но это считается хорошей практикой.
    Те в вашем конкретном случае
    "php": ">=7.2"
    Но если есть, возможно ставьте "php": ">=5.4"
    Ответ написан
  • Как прокачаться до middle frontend?

    neuotq
    @neuotq
    Прокрастинация
    Отвечу абстрактно. Без привзяки к фронту/беку
    Миддл это просто специалист который может четко сам выполнять поставленные задачи, без чуткого руководства и явных указаний. Конечно же это практика, при чём прежде всего коммерческих/оплачиваемых проектов. Те определенный профессиональный опыт, который позволит прочувствовать технологии, людей, команды, бизнес задачи.
    Так же способен сам принимать некоторые тактические решения, по тому как именно делать некоторые штуки. Таким образом, как только вы перестаёте себе задавать поставленный в топике вопрос, вы уже ближе к мидлу ;-)
    Сеньёр это логическое дальнейшее развитие, здесь уже человек готов принимать более серьезные решения по структуре (и во многом архитектуре проекта), многое планирует сам, способен получить от продакта/бизнеса постановку проблемы и сам сформировать задачу и решить её грубо говоря в одиночку. По задачам, не касаемых его профиля, он будет успешно делегировать и/или сотрудничать с другими специалистами, снова таки, без дополнительной опеки, а сам берёт на себе ответсвенность.
    Поэтому кстати, многие засиживаются в миддл уровне, не потому что они прям ой ой плохие спецы, совсем нет. Просто далеко не для всех подходят моменты с принятием решений, активные действия с другими людьми командование и тп.
    НО, сразу стоит отметить, тут выше уже писали, и я тоже скажу. Многие компании используют термины джуниор/миддл/сеньйор на свое усмотрение, поэтому нередко это субъективные параметры.
    Но, как мне кажется, то что я описал, будет как минимум одходить под большинство требований и мидла и сеньйора, а может даже и переходить у некоторых в более высокую градацию.
    А что касается конкретных технологических штук. то в сети полно подборок. путей развития (гугли Developer Roadmap и подобное), но без практики в релаьных проектах, желательно коммерческих, но можно и многих опенсурс, это мало что значит.
    Ответ написан
    Комментировать
  • Как в laravel реализовать логику получения статуса заказа при изменении записи в бд?

    neuotq
    @neuotq
    Прокрастинация
    Я возможно чего-то не понял, но вопрос странный, особенно для того кто просто, хотя бы заглянул в документацию.
    В Laravel есть события, их можно создавать, слушать и тп.
    Более того, там даже пример кода для событий по статусам заказа (доставка, и отправка уведомления о доставке) :-)
    Ответ написан
    Комментировать
  • Как удалить файл в laravel?

    neuotq
    @neuotq
    Прокрастинация
    Чтение документации и изучение хорошей пратики всё таки немного облегчает жизнь.
    Итак.
    Хранить в БД url, как делаете вы, обычно не выгодно и неинтересно. Это нужно в исключительных случаях одно разового мини проекта, когда вы точно знаете настроки меняться не будут и файлы редактироваться не будут. Либо, в специализированных БД для кеширования результата генерации url.
    В иных случаях хранить в БД нужно имя файла. Имя файла в идеале разбить конечно, но в подавляющем числе случаев достаточно будет два поля: имя с путём + имя диска. Это закроет большинство кейсов для будущего масштабирования. Но если уж совсем лень, то имя диска тоже можно опустить, хотя я советую добавить это поле.
    Далее, ваш код:
    $path = Storage::putFile('public/img', $request->file('img'));
    $url = Storage::url($path);
    $post->img = $url;

    Меняем на более простой (хотя аналог можно и из вашего конечно сделать, убрав строчку с $url и сохраняя в модель $path)
    // file('img') - это имя файла(инпута формы например) из запроса
    // store('img') - это имя подпапки для
    // 'public' - Диск из настроек (см filesystems.php)
    $path = $request->file('img')->store('img', 'public');
    $post->img = $path;

    Теперь и удалать легко. не забываем что с файлами мы работаем(по умолчанию), относительно папки /storage/app/(слеш в начале я поставил чтобы показать что путь от корня папки с проектом)
    Поэтому, когда вы передаёте в метод удаления сгенерированный заранее url. он ничего не найдёт и не удалит.
    Но теперь мы храним как раз относительный путь файла.
    Storage::delete($post->img);
    Теперь сработает, не забываем очистить поле, после удаления, если вы при этом не удаляете сам пост.

    Далее, сам url получаем так
    $url = asset($post->img);
    Ну, или если вы делаете сразу в blade шаблонах
    <img src="{{asset($post->img)}}">
    Ну и конечно я всякие проверки и тп опустил для простоты
    Ответ написан
    Комментировать
  • Как отслеживать клики по виджету Instagram (внутри iframe)?

    neuotq
    @neuotq
    Прокрастинация
    С айфремом ничего путного не выйдет, можно обходить и придумывать разной степени каличности и костыльности методы (не обхода ограничения, а методы примерно узнать что пользователь хотел сделать).
    Короче гиблая история.
    Лучше тогда быстро собрать через api свое решение, там простые методы(но только чтение/получиение данных) и после реализации получится свой виджет, который можно анализировать уже как угодно с высокой точностью.
    Ответ написан
    Комментировать
  • Class 'ImageSplitter\ImageSplitter' not found in Laravel6?

    neuotq
    @neuotq
    Прокрастинация
    У автора пакета BardoQi/ImageSplitter ошибка в composer.json.
    В секции автозагрузки, вместо
    "autoload": {
            "psr-4": {
                "BardoQi\\image-splitter\\": "src/"
            }
        }

    Нужно
    "autoload": {
            "psr-4": {
                "ImageSplitter\\": "src/"
            }
        }

    Наверное он забыл исправить префикс либо вообще не понимает как это работает.
    Ответ написан
    Комментировать
  • Как сформировать такой URL?

    neuotq
    @neuotq
    Прокрастинация
    Через http_build_query, никак, формируйте самостоятельно через цикл, или вручную
    $query = urlencode('code[]') . '=' . urlencode(100) . '&' . urlencode('code[]') . '=' . urlencode(200);

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

    neuotq
    @neuotq
    Прокрастинация
    Легче всего, чтобы не парится.
    Примерно так, писал без тестирования, но идея понятная надеюсь
    const replacePairs= {'было1': 'стало1', 'было2': 'стало2', 'было3': 'стало3'};
    $("body").children().each(function() {
      let currentNode = $(this);
      for (const pair in replacePairs) {
         currentNode.html(currentNode.html().replace(/`${pair}`/g, `${replacePairs[pair]}`));
      }
    });
    Ответ написан
  • Почему контекст вызова разный?

    neuotq
    @neuotq
    Прокрастинация
    Читаем документацию :
    Стрелочные функции не содержат собственный контекст this, а используют значение this окружающего контекста.
    Ответ написан
    1 комментарий
  • Почему видео работает после закрытия?

    neuotq
    @neuotq
    Прокрастинация
    Я не лез прям разбираться в ваш код на сайте, это неудобно.
    Но проблема не в плагине. Плагин делает только две штуки: ставит превьюшку видео как обычную картинку, по клику динамически загружается iframe всего плеера youtube. Всё.
    Ваша задача, реализовать новые функции по зыкрытию модельного окна.
    Алгоритм:
    1. Отслеживаете событие закрытие окна.
    2. Когда событие сработало вы либо, через youtube js api ставите плеер на паузу (не знаю насколько это возможно в вашем варианте) либо полностью сами удаляете весь плеер, и восстанавливаете вид поумолчению, те то как должен выглядит код html с самого начала тег div с параметрами, но тут вопрос насколько динамически отслеживает библиотека, поэтому наверное легче будет снести вообще всё оттуда. А инициализировтаь div и библиотеку lazyYT динамически каждый раз когда модалка открывается.
    Вообще конечно всё корявенько по совремнным меркам.

    А вообще советую использовать тогда лучше уж plyr вмеcто устаревшего lazyYT , у него хотя бы api есть для удобного управления плеером.
    Ответ написан
    1 комментарий
  • Нормально ли иметь много React компонентов в небольшом проекте?

    neuotq
    @neuotq
    Прокрастинация
    Сразу отмечу что Юрий Бура отличный профессионал своего дела, курс его не изучал, но беглый взгляд показал что поход у него хороший, системный и он старается все же доносить суть. Главная целье его курса научиться пользоваться реактом, понять суть современного подхода к фроентенду в целом.
    Далее уже по существу. Нужно погрузится в саму историю и причны появления Реакта. Инженеры в facebook в одно время сильно замучались строить интерфейсы, генерировать всё эту ерунду было сложно, еще проблемы уязвимостей (куча форм, для комментарией, постов, картинко и тп), недобный и громозкий PHP код заставил их задуматься об упрощении. Хотелось писать интерфейс как обычну функцию с параметрами, поэтому они придумали xhp, которые позволил буквально писать формы сразу в php (hack), легко, наглядно. Быстро видно что происходит, меньше ошибок, и легко использовать код формы (вместе с всей ее логикой построения, это и генерация формы на основе данных, и тп) заного много раз. Этот же подход был очень удобен и для других частей интерфейса, меня, списка постов и тп.
    И это, с развитием новых концепций, браузеров, технологий и требований к быстроте интерфейса вдохновила их перенести этот концепт на JS, так родился React. Его революционность была в том, что на выходе резко упростились любые манипуляция с интерфейсом на фронтенде, сильно упал порог входа, получили легко читаемый и понятный код для решения практических задач (понятно, что при желании можно и тут засрать, но до этого в принципе большенство интерфейсов на js писалось через большие муки, с кучей неудобного кода, компромисами и тд и тп, а теперь все это взял на себя реакт).
    Что мы имеем:
    есть какая-либо часть интерфейса, логически независимая от других, с определенной структурой внутри - делаем компонент. Компонент это не только то, что мы обязательно будем использовать повторно (например), но понятная логически обособленная часть интерфейса, у которой может быть своя логика внутри, и своя функция на сайте снаружи.
    Ничего страшного если сразу всё не продумал или на определенном этапе что-то идёт не идеально и тп.
    Конечно хорошо иметь план на проект и проектировать многие вещи сразу, но рефакторинг, пивоты, изменения - вот реальность жизни.
    Так что не волнуйся, первое что сделай измени восприятие самого интерфейса и приложения в целом. Теперь ты делаешь не сайт на html, а приложение с интерфейсом. Вот когда в таком ключе смотреть, то намного легче.
    Ответ написан
    Комментировать
  • Как грамотно реализовать мультиязычность React и Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Главный спорный вопрос который вам стоит решить: где хранить статичный первод (надписи, что не меняются или меняются редко, например название кнопки - Отправить/Submit, те все то, что мы обычно не храним в БД и редко меняем).
    Варианта два:
    1. Использовать только реакт для этого, тогда берете пакет react-localization, там достаточно простые и понятные принципы, сложностей нет.
    Преимущества: фронт полностью отдельно живёт и не зависит от бэкенда, нет дополнительных прослоек, нет привязки к определенному бэекенду и тп

    2. Использовать возможности локализации Laravel. Но тут все таки все методы той или иной степени костыльности, либо как минимум добавляющий жесткую привязку фронтенд приложения к текущему стеку бэкенда
    Преимущества: можно использовать разные пакеты для интеграции средств редактивования статической локализации в бэкенде.

    Лично я всё же склоняюсь к первому варианту, так как люблю писать максимально (желательно полностью) назависимые фронтенд приложения.

    Теперь вторая часть вопроса. Уже касаемо динамических переводов (это контент, комментарии, и тп, условно говоря всё что мы храним в бд, или храними информацию о них в бд).
    Здесь я советую положится на Laravel, берёте пакет от spatie laravel-translatable, он позволяет быстро строить удобные интерфейсы редактирования/чтения переводов в БД, пишете простое API и ри инициализации react приложения получаете данные нужные вам локализации, либо даже отправляете все сразу (они хранятся в json поле mysql/ваше БД, даже доп преобразований особо не потребуется).
    Но вариант с отправкой только нужной мне нравится больше, смена локали событие редкое, а вот экономия на размере переданных данных будет существенная.

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

    neuotq
    @neuotq
    Прокрастинация
    https://jsfiddle.net/bvuco1hj/
    Дичь со
    .stars div {
    float: left;
    }

    Убираем.
    Далее, stars_inner делаем realtive, а красный фон абсолютом
    .stars__inner {
      position: relative;
    }
    .stars__progress {
      background: red;
      position: absolute;
      left: 0;
      top: 0;
      z-index: -1;
    }
    Ответ написан
    1 комментарий
  • Какие есть варианты апгрейда ПК за небольшой бюджет?

    neuotq
    @neuotq
    Прокрастинация
    Взять 2 плашки по 8 ГБ оперативной памяти подешевле DDR3 для текущей мамки поцессора. Начать работать, заработать на нормальный полноценный апгрейт на современную актуальную платформу.
    И кстати вполне можно обойтись и относительно малыми средствами, в самом простом случае тебе нужно будет начать с проц+мамка+новая озу 16GB.
    AMD Ryzen 5 3600X
    Gigabyte X570 Aorus
    16GB Corsair Vengeance LPX
    ~30 000 без доставки. Ну тут конечно можно сразу на проце сэкономить, но материнку и память я бы не трогал.
    Ах ну да, и блок питания мы вообще не писали. Нужно думать потянет ли твой текущий.

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

    neuotq
    @neuotq
    Прокрастинация
    Лично я советую два источника:
    https://www.codetriage.com/ - специальный сервис который позволяет удобно структурировать опенсурс проекты по issue и языкам, и выбрать для начала работы.
    https://cultofmartians.com/ - интересный проект, приглашение к участию от одной из самых крутых команд в рунете. Ставят задачи, потом есть шанс и подружится с ними ближе.
    Ответ написан
    Комментировать
  • Что все такие лучше использовать во VueJS - собственный синтаксис или JSX?

    neuotq
    @neuotq
    Прокрастинация
    Если проект для себе, либо быстрые прототипы, проверки теорий и тп, то делайте так как привыкли и удобно.
    Если проект относительно крупный, работает несколько человек, то должен быть какой-никакой а стандарт кодирования. И тут нужно уже задуматься а всем ли так будет удобно, а что потом при расширении, а какие подводные камни. В целом, при усложнении логики и куче кастомных компонентов, то почти всегда JSX как минимум легче читается.
    Я лично когда что-то простое и прозрачное, не выходящее за рамки использования стандартных шаблонов Vue, о JSX не вспоминаю. Но а если надо мудрить, то так просто удобнее читать код, это как минимум.

    Но повторюсь:
    • маленький проект, быстрый, делаете лично вы - пиши как удобно и привык.
    • что-то больше, несколько разработчиков - вы должны договорится о правилах и следовать им, использование JSX обычно будет хорошей практикой для написания и поддержки кода.

    А так, Vue с JSX дружит, поддерживается.
    Ответ написан
    2 комментария
  • Laravel - при запуске миграций выдает ошибку - Unknown database 'laravel'?

    neuotq
    @neuotq
    Прокрастинация
    Скорее всего настройки просто скешировались.
    Выполните в консоле следующую команду
    php artisan config:clear
    Ответ написан
    Комментировать
  • Стоит ли переходить с php на java?

    neuotq
    @neuotq
    Прокрастинация
    Язык это инструмент.
    Если вы начинаете работать в области где используется другой инструмент, то да стоит выучить. И это вне зависимости от самого языка. Эти бесконечные гонки за мега правильным выбором именного того языка чтобы выучить в 2020 году, бла бла бла - пустой звон. Есть спрос, вам нравится, у вас получается? Берите учите.
    PS тема выбора технологии/стека архитектором приложения конечно же совсем иной вопрос.
    Ответ написан
    Комментировать