• Почему анимации работают неправильно?

    neuotq
    @neuotq
    Прокрастинация
    WOW.js - после инициализации ищет элементы на страницы с классом 'wow' и применяет к ним анимацию появления. По умолчанию все с wow скрыты. А с помощью классов из animate.css вы сможете дополнительно указать тип анимации при появлении элемента.
    Те в самом теле html файла, добавить элемент:
    <div class="wow" >
    Привет
    </div>

    После этого он будет не видим, пока пользователь не доскроллит до него.
    Ответ написан
  • По какой причине Middleware TrimStrings включен по умолчанию в Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Это вопрос старой боли с пробелами в конце и в начале(реже) вводимых пользователями в разных полях.
    Проблема настолько часто встречалась, что обрезка пробелов была почти всегда в коде. Поэтому добавили такой функционал по умолчанию, одновременно кстати с установкой в null пустых строк. Что тоже повысило удобство.
    Если нужно там можно писать исключения.
    Ответ написан
    6 комментариев
  • Как парсить чаты whatsapp из сети?

    neuotq
    @neuotq
    Прокрастинация
    У вотсап нет такого функционала. Веб версия работает через телефон, а API закрыто для обывателей, доступ за деньги и после верификации Фейсбуком вашего бизнеса. Есть разные костыли для обхода этого(в основном используются для создания своих ботов), но в целом надёжность всего низкая.
    Так что парсить вы можете только выгруженную в ручную историю из чата(есть такая возможность в клиенте).
    А так, списки групповых чатов сформированы в ручную на специализированных сайтах или локальных сообществах и тп. Но это просто ссылки на сами группы, в который можно вступить(через клиент).
    Короче просто ничего не выйдет. Либо платить деньги уже тем кто такое организовывает(но они всё равно на вас обычно вешают покупку сим карты для привязки, к псевдо веб интерфейсу, да и фейсбук нередко блочит, поэтому нужно периодически покупать новые сим карты), удобства мало. Либо вообще самому возиться с написанием своих обходных путей, тоже не айс.
    В целом их политика в этом плане кардинально отличается от подхода Телеграм например.
    Ответ написан
    Комментировать
  • Защита от бесконтрольного создания картинок?

    neuotq
    @neuotq
    Прокрастинация
    Гуглите "Rate Limiting" для вашего фреймворка, библиотеки, возможно на уровне веб сервера или чего ещё. И постройте логику приложения так, что если нужно отдавать не статитку, то условно свободно, а если генерировать, то тут ограничения. Обычно это делается на одно условное устройство/пользователя и/или отдельно на отдельный роут/операцию/функцию.
    Ну например, на пользователя 5 раз в секунду, на роут генерации картинки 100 раз в секунду, если больше любого лимита, возвращай код 429.
    Ответ написан
    3 комментария
  • Асинхронность это отложенность?

    neuotq
    @neuotq
    Прокрастинация
    Почему рассматривают прежде всего в контексте отложенных операций?
    Проблема в том что по умолчанию скрипты выполняются последовательно и синхронно. Таким образом любая операция что требует времени будет останавливать всё выполнение программы. А очень часто есть ещё задачи которые в целом могут быть выполнены независимо. Для этого во многих языках/средах созданы инструменты для асинхронного выполнения части операций. Специальный механизм добавляет возможность указать что определённая операция является асинхронной и ждать её завершения не нужно, можно продолжать выполнения программы дальше. При этом с помощью других операторов мы можем указать другие операции которые будут выполняться в тот момент когда отложенная завершится.
    Допустим ты делаешь и выводишь интерфейс программы со списком участников с разными сложными данными. Так вот, запрос на сами данные и список ты можешь сделать асинхронным и сразу же пользователю показать и нарисовать весь интерфейс(меню, кнопки, заголовки таблицы), а саму таблицу в тот момент пометить "Загрузка", а далее после получения данных из БД, функция ожидающая ответа нашего асинхронного запроса уже дорисует только оставшуюся часть интерфейса сами данные. Таким образом мы улучшим пользовательский опыт, тк в ином случае пользователь смотрит на пусто экран пока не получим и подготовим все данные чтобы сразу всё показать.
    Ну и да, часто асинхронность позволяет ещё и удобно распараллеливать задачи, повышая в тч и общую производительность системы в целом.
    Ответ написан
    2 комментария
  • Ошибка javascript, как исправить?

    neuotq
    @neuotq
    Прокрастинация
    Ох...ну если есть доступ к глобальному window, те в браузере, то можно так:
    for(var i = 1; i < image_one_loaded; i++) {
           window['image_one_loaded_value_' + i] = '';
           window['image_one_loaded_value_format_' + i] = '';
    }
    Ответ написан
  • Компьютер для работы, что поменять, на чем сэкономить?

    neuotq
    @neuotq
    Прокрастинация
    Насчёт материнки вам уже написали, можно немного упростить, хотя особой выгоды не будет.
    А вот насчёт видеокарты:
    брать её сейчас конечно же не стоит, к сожалению дефицит и оверпрайс. НО! Сегодня для задач мультимедия и редактирования видео они дают огромный буст. В том числе и в последней 30x версии, разница в скорости работы колоссальная. Поэтому потихоньку копите на карту.
    Ответ написан
    1 комментарий
  • Можно ли показывать потенциальному работодателю код с предыдущего места работы(внутри суть)?

    neuotq
    @neuotq
    Прокрастинация
    Ну формально так: авторство кода в любом случае твоё, а право на использование уже принадлежит компании.
    Далее есть ещё момент с NDA, если что-то подобное подписывал и тп, то тут часто даже нельзя говорить без кода чем конкретно занимался, только абстрактно(а порой нельзя говорить что вообще занимался чем-либо).
    Работодателям прежде всего интересны будут кейсы и алгоритм их решения. Сам конкретный код, особенно большой, нет времени изучать и вникать. Но вот очистить его от конкретики, сделав более абстрактным, решающим абстрактную задачу можно. С помощью кода вы больше показываете ваш стиль написания, чистоту и прочее.
    Поэтому :
    1. Сосредоточьтесь на кейсах.
    2. Из ваших старых работ выбирайте самые интересные(с вашей чтк зрения), подчистите их от конкретики и прямой привязке к старому проекту. Ну например была у вас там процедура како-го умного поиска объектов с гео привязкой с какой-то мудрой конкретной функцией(допустим тепловая карта цен недвижки с кросс запросами по разным таблицам), а вы его упростите до более простой и абстрагированого примера, построение данных для тепловой карты объектов(абстрактных) по заданному критерию с учётом доп свойств из связанных таблиц. Ну вы меня поняли. Заодно кстати и рефактор лёгкий будет.

    Повторюсь, много кода не нужны, возьмите буквально несколько, на ваш взгляд, интересных примеров. Их цель прежде всего показать стиль и понимания работы языка(в данном случае sql). Остальное, рассказывайте словами, в том числе алгоритм, можно блок схемки показать. Те сами знания работы БД вы сможете передать не через код уже, а словами, блок схемками и рассказами и проблемах и успехах(и неудачах тоже кстати и почему они случились)
    Ответ написан
    Комментировать
  • Как отследить статистику запросов MySQL в реалтайм?

    neuotq
    @neuotq
    Прокрастинация
    Есть мощная штука Percona Monitoring and Management, можно утонуть в аналитике, графиках и всевозможных дашбордах.
    Ответ написан
    Комментировать
  • Почему Node JS убивает процесс при запросе к MySQL?

    neuotq
    @neuotq
    Прокрастинация
    Ох.. ну вы даёте. У вас конечно же сыпется нода из-за ограничения оперативной памяти.
    Делайте запросы кусками(чанками), можно начать с 1000.
    (примерный полупсевдо код)
    const mysql = require('mysql')
    
    // создаем подключение, 
    // используем https://github.com/mysqljs/mysql#pooling-connections читать настройку!
        const pool = mysql.createPool({/*тут данные для входа*/});
    // Количество чанков
        const chunkSize = 1000;
    //Запрос на количество строк в таблице
        const poolTableSizeQuery= "SELECT count(*) as rowsCount FROM main";
    //Начинаем с определения количество строк
       pool.query(poolTableSizeQuery , function (error, results, fields) {
          if (error) throw error;    
          if (result && result[0]) {
        //Количество строк
          const rowsCount = result[0]['rowsCount']; 
       // Количество чанков размером в chunkSize (округляем значение)
          const chunksCount = Math.ceil(totalRows/chunkSize);
      // Наш запрос тепреь с ЛИМИТОМ
          const myQuery = "SELECT partname FROM `main` LIMIT";
          for(var i = 0; i < chunksCount; i++) {                 
                   //Сдвиг для текущего чанка 
                   let chunkOffset = i*chunkSize;
                   //Сдвиг для текущего чанка
                    let chunkQuery = myQuery + offset + "," + chunkSize;
                   //Выполнение твоего запроса, уже с лимитом и сдвигом
                    pool.query(chunkQuery , function (error, results, fields) {
                         if (error) throw error; 
                        //Тут выводим куда-то или ещё что.
    
                    });
                }
         }
      });

    С размером чанков можно играться.
    Алгоритм вышел такой:
    1. Создаем пул для кеширвоания подключения к БД
    2. Определяем размер чанка(на основе ограничений ОЗУ)
    3. Узнаем размер таблицы и вычисляем количество шагов
    4. Делаем запрос чанка со сдвигом
    5. Выводим пользователю результат
    6. Если чанки не кончились идем в п 4
    Из минусов, не лочится таблица, а значит не гарантии целостного результата, если данные были измененны между запросами. Если это не важно, то не парься. Если важно. то нужно придумать как лочить таблицу на запись на время выполнения скрипта,
    Ответ написан
    Комментировать
  • Откуда взять изображения под ретину?

    neuotq
    @neuotq
    Прокрастинация
    По хорошему, вы изначально работаете с учётом "ретина" дисплеев, те разрешение растровых изображений условно в два раза больше чем физический размер в пикселях, а уже при сдаче проекта либо вы, либо верстальщик в автоматическом режиме(через сборщик проекта), делает все остальные.
    Таким образом, например у вас в макете есть растр размером(по макету) 200 на 300 пикселей, вы должны предоставить картинку 400 на 600.
    Ответ написан
  • Как проверить, если ли в массиве объект со свойством, имеющим определённое значение?

    neuotq
    @neuotq
    Прокрастинация
    Можно написать функцию с такой логикой:
    const searchName = "Login2";
    const data= [
     {
          "id": "1",
          "login": "Login1",
       },
       {
          "id": "2",
          "login": "Login2",
       }
    ];
    const hasName = (el) => el.login === searchName ;
    //Просто проверка
    console.log(data.some(hasName));
    Ответ написан
    Комментировать
  • Как работать с сидами в Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Сиды предназначены немного для другого, главная их цель это автоматизация тестирования, поэтому и набор методов соответствующий. Ну и на продакшене по умолчанию их нельзя запустить(только используя ключ --force). Но как тогда разделить сиды для данных и для теста? Короче не вариант.
    Вам же можно просто использовать миграции. В них можно писать и логику и тп, в том числе инициализацию и или загрузку каких-либо данных по умолчанию в БД.
    Ответ написан
    Комментировать
  • Как в asyncData axios сделать вывод ошибок?

    neuotq
    @neuotq
    Прокрастинация
    В nuxt.js лучше всего настроить общую централизованную обработку ошибок, через плагин и хелперы. Там есть "перехватчики" разных событий, в том числе onError, onRequestError, onResponseError, с помощью них легко и удобно сделать уведомления и/или редиректы для пользователя когда что-то пошло не так. Нужно помнить что asyncData предназначен для логики в контексте страницы, поэтому у него свои особенности работы и автоматическое установление локального состояния, удобно сокращает код и сразу данные доступны в шаблоне.
    Возможно вам лучше подойдёт fetch, у него немного иная логика работы, ближе к условной привычной, к примеру в отличии от asyncData он не ждёт окончания его выполнение перед загрузкой(те возвращает промис, не ожидая его полного разрешения до финиша как asyncData ). В компоненте у вас будет доступен $fetchState, где можно отлавливать ошибку $fetchState.error. Но данные для шаблона нужно ставить самому, те определить нужные в data:
    data() {
          return {
            banners: [],
            currentPage: null,
            lastPage: null,
            perPage: null,
          }
        },

    И потом уже в fetch их устанавливать.
    Короче говоря посмотрите документацию, там всё предельно кратко и ясно для начальных простых условий:
    https://nuxtjs.org/docs/2.x/features/data-fetching
    Ответ написан
    Комментировать
  • Почему PHP Simple HTML DOM Parser берет только текст из ячейки таблицы?

    neuotq
    @neuotq
    Прокрастинация
    В строке
    $flight[] = $cell->plaintext;
    Вы используете метод plaintext который очищает все теги, ну и для этой ячейки должен вернуть текст 'PDF'.
    Не совсем ясно что вам нужно? Если нужно дополнительно разбирать и другие вложенные html элементы, то нужно усложнять вашу логику, добавлять условия. Вот из той же документации, добавляете вложенные циклы для того же тега a и из него уже парсите href если вам нужно отдельно. И тд и тп.
    Ответ написан
    Комментировать
  • Ка в Vue покрутить спиннер кнопки при переходе, в зависимости от маршрута?

    neuotq
    @neuotq
    Прокрастинация
    придумайте способ добавления уникального идентификатора компонентам-ссылкам, через стейт ведите это дело. Так можно и более сложную логику построить при желании с цепочками и тп.
    Ответ написан
    Комментировать
  • Как получить красивый url в Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Вы используете getRouteKeyName(), вам тогда нужно изменить метод show, примерно так:
    public function show($ad)
    {   
        return view('ad', compact('ad'));
    }

    и в роутере тогда тоже для красоты
    Route::get('/{ad}', [App\Http\Controllers\AdController::class, 'show'])->name('show');

    Либо, убирайте getRouteKeyName, которым вы задаёте поле по которому вычисляется нужная модель(по дефолту это id)
    Ответ написан
    Комментировать
  • Как сделать погрузку контента по нажатию кнопки на php?

    neuotq
    @neuotq
    Прокрастинация
    Естественно без перегрузки страницы этого не сделать. Делаешь кнопку с формой, а там через гет/пост запрос отправляешь параметр(условно show_full=1). В php проверяешь его, если он есть: возвращаешь полный текст, иначе краткий.
    Ответ написан
    1 комментарий
  • Блок выходит за пределы, как убрать scroll?

    neuotq
    @neuotq
    Прокрастинация
    Ну так у вас же прокрутку добавляет не section, а другой блок(content). Вот ему и добавляйте новый класс для hidden
    Ответ написан
    4 комментария
  • Как адаптировать svg?

    neuotq
    @neuotq
    Прокрастинация
    Так же как и другие.
    Допустим начать можно с ограничения по родителю и ширине, условно:
    svg {
    max-width: 100%;
    }

    В целом практика - засовывать svg в контейнер и таким образом рулить.
    А так есть библиотеки для этого, в том числе и js
    Ответ написан
    3 комментария