• На чем исполнять несложный интернет-магазин?

    neuotq
    @neuotq
    Прокрастинация
    Советую брать что-то готовое. Потому как если проект будет живой и работать, в любом случае будут вылезать те или иные косяки, недоработки и т.п.
    Так что берите например тот же вукомерс, базовый набор и вперед.
    По умолчанию ничего сложного, куча всего уже готово(интеграции и проч) легко кастомизируется. Это же можно сказать и про многие другие.
    Либо вообще выбрать платформу вроде insales.
    Писать свое не рекомендую. Тем более если условно простое. Больше смысла писать свой продукт под нечто большое, с уникальными требованиями и тп, на что потом будут готовы выделять ресурсы. А так будет просто мертворожденное решение и проблема у владельцев если нужно что-то допилить.
    Ответ написан
    2 комментария
  • Как вывести первые 6 элементов меню а не все сразу в opencart коде?

    neuotq
    @neuotq
    Прокрастинация
    Так как вы используете Twig в качестве шаблонизатора, то можно сделать так:
    <ul class="us-footer-list  list-unstyled">
        {% for information in informations | slice(0, 6) %}
        <li class="us-footer-item us-footer-information"><a href="{{ information.href }}" {% if information.rel is defined and information.rel %}rel="nofollow"{% endif %} class="us-footer-link">{{ information.title }}</a></li>
        {% endfor %}
    </ul>
    Ответ написан
    5 комментариев
  • Как задеплоить приложение на Express.js в связке с Nuxt.js на хостинге Beget?

    neuotq
    @neuotq
    Прокрастинация
    Вы как-то мало подробностей написали. Но как я понял у вас vps и вы заходите через ssh и в консоле запускаете просто node app.js ?
    По хорошему нужно делать нормальный цикл с ci/cd.
    В любом случае начинайте с pm2.
    А далее будет pm2 start app.js.
    pm2 возьмёт на себя управление процессом для приложения.
    При деплое нужно его перезапускать(повторюсь по хорошему нужны ci/cd скрипты и тп).
    Ответ написан
    3 комментария
  • В Express.js добавление/отображение информации производится только шаблонами?

    neuotq
    @neuotq
    Прокрастинация
    Немного не понятно, что вы хотите? Шаблоны используют для того чтобы была интерактивность в них, с переменными и тп.
    Если вы хотите просто отдавать html как статику, можно использовать static, пример из документации (допустим в папку public вы кинули файлы):
    app.use(express.static('public'));
    И после этого вы сможете по прямому адресу открыть html (site.com/public/test.html).
    Или использовать sendFile, им можно отправлять любые файлы: pdf, картинку и тп, в тч html.

    Представим, что у вас есть папка static и там html файл.

    var express = require('express');
    var app = express();
    var path = require('path');
    app.use(express.static(__dirname + '/static'));
    
    // viewed at http://localhost:8080
    app.get('/', function(req, res) {
      res.sendFile(path.join(__dirname + '/static/test.html'));
    });
    app.listen(8080);
    Ответ написан
  • Как работают smm агрегаторы?

    neuotq
    @neuotq
    Прокрастинация
    В Китае есть активные и большие попытки автоматизации ботов, в том числе через реальные устройства, живые андроид телефоны с автоматизацией действий. Есть конечно и просто решение на основе puppeter и аналогов.
    НО. Всё же главный основной сегодня - это люди. Грубо говоря студенты или другие люди готовые за копейку делать определенные действия. Поэтому есть определенные сервисы, работают они по принципу Яндекс.Толока, где реальные люди делают и лайки, и подписки и просмотры.
    Насколько это эффективно вопрос спорный. Ведь с одной стороны такие подписчики это не покупатели. а мертвый груз, но с другой стороны потенциальный клиент видит что много людей, легче вовлекается. Правда всё же, огромное число подписчиков, и малое число лайков в ленте постов у сообщества тут же наводит на мысли.
    Короче говоря схема такая:
    серо/чёрные смм-щтики запускают сервис, где предлагают лёгкий зароботок, каждый день, для студентов, беременных, и тп бла бла бла.
    А с другой стороны бизнесу показывают площадку, где ты заказываешь автоматическое продвижение, или гарантированное число лайков и тп.
    Ответ написан
    Комментировать
  • Как с помощью Advanced Custom Fields сделать множественное добавление полей?

    neuotq
    @neuotq
    Прокрастинация
    Вам нужна про версия ACF Pro, там есть возможностей создавать повторяющиеся поля/наборы полей через тн
    Repeater
    Ответ написан
    1 комментарий
  • Почему никогда не выполняется первое условие?

    neuotq
    @neuotq
    Прокрастинация
    У вас в форме нет ничего что передаёт $_POST['text'], текстареа у вас с именем message, поэтому если вы перепутали то замените на $_POST['message'].
    Ответ написан
  • Как решить утечку логов при их записи?

    neuotq
    @neuotq
    Прокрастинация
    Сложно сказать без более подробной логики и кода. Скорее всего у вас ошибка где-то. Запись в Monolog ведётся в режиме добавление в конец fopen + a, что подразумевает (в POSIX совместимой ОС):
    O_APPEND и O_CREAT
    O_APPEND Перед каждой записью помещает указатель файла в конец
    файла. Иными словами, все операции записи будут
    происходить в конец файла.
    O_CREAT Создает файл, если он не существует.

    Поэтому в целом проблем быть в Линуксе не должно(грубо говоря), тк fwrite (при fopen + a) будет работать в атомарном режиме (и блокировать файл нет необходимости), только порядок строк не гарантируется.
    А насчёт RabbitMQ не совсем понял. Ну ок, куда-то вы передали сообщение, но потом же его снова таки нужно записывать?
    Насчёт нагрузки, здесь это вторично, нужно исходить из логики работы приложения, ну и RabbitMQ таки быстро работает, бутылочным горлышком в сравнении с записью в файл не будет.
    Ответ написан
    4 комментария
  • Почему анимации работают неправильно?

    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));
    Ответ написан
    Комментировать