• Как выводить новые данные на страницу в зависимости от ответа пользователя?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    По данным из JSON ездит «курсор», указывающий на какой-то один вопрос.
    Переменная, в которой лежит ключ текущего вопроса. Сначала "1". Потом, в зависимости от ответа.
    Установили новое значение – показали новый вопрос.

    Можно заполнять массив «историей», чтобы добавить функционал шагать «назад» и потом вернуться «вперёд», или начать отвечать иначе.

    Ответ написан
    Комментировать
  • Как объединить два gif скриншота в один, по вертикали?

    ffmpeg и фильтр vstack — подходит, когда у входных источников одинаковая ширина и одинаковый пиксельный формат.

    Простой рабочий вариант:
    ffmpeg \
      -i 1.gif \
      -i 2.gif \
      -filter_complex vstack \
      result.gif

    Далее можно попытаться уменьшить размер результирующего gif'а, генерить оптимальную палитру — всё описано сто раз, гуглится и выходит за рамки вопроса.
    Ответ написан
    Комментировать
  • Как правильно устанавливать что-либо в Docker контейнеры?

    1. Если это на 1 раз, то №1.
    2. Если понадобится более 1 раза, то №2. Там несложно: всего 2 инструкции: FROM (имя исходного образа), и RUN и там как в bash файле команды apt-get update && apt-get install XXX && ...
    Ответ написан
    Комментировать
  • Написать функцию, принимающую массив сотрудников из объектов, и возвращающую массив строк. Какие ещё есть способы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Adamos верно заметил, что в задании просили функцию, а вы разово получаете результат. Согласен, что это вероятная причина отказа.

    Ещё вариант в копилку, принципиально не меняющий сути мэппинга:
    Array.from(employees, ({name, age}) => `Имя: ${name}, возраст: ${age}`)
    Ответ написан
    Комментировать
  • Как работает замыкание в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Каждый вызов createCounter() создаёт и возвращает новую функцию. С которой в комплекте идёт свой новый «чемодан» замыкания, в котором лежит своя переменная counter.
    Каждый раз отдельная-новая.

    откуда берется counter при втором вызове console.log(z())

    Из того же «чемодана» от первого вызова createCounter()
    Ответ написан
    2 комментария
  • Как найти в одну переменную 2 класса?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    какой логической операцией хотите два класса сочетать?
    класс1 И класс2 — чтобы непременно оба были в наличии у элемента, и тогда только его брать;
    класс1 ИЛИ класс2 — достаточно любого одного из двух, ну или оба, вообще супер.

    Чтобы непременно оба класса одновременно присутствовали:
    document.querySelector('.popup__close.popup__area'); // без пробела


    Чтобы хотя бы один был:
    document.querySelector('.popup__close, .popup__area'); // через запятую


    Ну и помните, разумеется, что querySelector() выбирает первый подходящий найденный элемент. Один.
    А querySelectorAll() выберет все подходящие.
    Ответ написан
    Комментировать
  • Какой 3d редактор на маке самый удобный и есть учебники?

    Maxon Cinema 4D
    Уроков на русском языке полно.
    Но как проще моделировать такую далеко не «простую» красоту я что-то не представляю.
    Может, это на основе реального объекта из фотографий сделано? Там вон нижний виток, скажем, неидеально округлый.
    Ответ написан
  • Как вот это сделать на стандарте ES6?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Как-то так, наверное:
    import { initializeApp, credential } from 'firebase-admin';
    import serviceAccount from './my.json';
    
    initializeApp({
      credential: credential.cert(serviceAccount),
    });
    Ответ написан
    2 комментария
  • Как найти дату в тексте вида - 10 января 2023 г?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробуйте по-всякому. Например, 1-2 цифры, пробел, один из месяцов (перечислить), пробел, 4 цифры года.
    const months = 'января|февраля|марта';
    const re = new RegExp(`(\\d{1,2})\\s(${months})\\s(\\d{4})`);
    
    'блаблаблаб ла блаб ла 10 января 2023 блаблабла'.match(re)
    // [ "10 января 2023", "10", "января", "2023" ]
    Ответ написан
    Комментировать
  • Лучше выбрать Symfony или Laravel для новичка и виртуального хостинга?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Цель: изучить оба фреймворка и уметь с ними работать.

    Сделать проект на то и на сём.

    Начать проще с Laravel, он чуть доступнее, проще, в красивой яркой упаковке. В то же время он построен на компонентах Illuminate, которые зачастую под капотом используют компоненты Symfony. Например, см. зависимости консольного компонента Laravel.

    Другой проект попробуйте сделать на Symfony. Увидите, как много общего, похожего с уже знакомым Laravel.

    Как часто здесь бывает, ответ на вопрос, на самом деле:
    «хватит уже задавать никчёмные вопросы, берись и делай».
    Ответ написан
    Комментировать
  • Почему условие не возвращает true?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    - if (myArray.every((element, index) => index < myArray.length - 1 ? element <= element[index + 1] : true) {
    + if (myArray.every((element, index) => index < myArray.length - 1 ? element <= myArray[index + 1] : true)) {
    Ответ написан
    1 комментарий
  • Чем меньше символов, пробелов и пропусков в коде, тем лучше?

    Не правильно.

    Код должен быть читаем и понятен человеку. Причем, не только автору, но и «злому маньяку тим-лиду, который вооружен и знает, где вы живёте», как говорится в шутке программистов.
    Для этого пустые строки между блоками кода бывают полезны. Как и комментарии, и длинные осмысленные наименования переменных и фукций.
    Компилятор потом всё равно всё перелопатит по-своему в ацкие бинарные инструкции )

    Как форматировать код — договариваются. Есть общепринятые стандарты форматирования кода (coding style). Например, стандартный для PHP. Или принятый в компании AirBnB для JavaScript.

    Хороший-удобный редактор кода всегда подскажет, где накосячили со стилем вашего кода, почему, и как исправить.
    Ответ написан
    Комментировать
  • Как на JS правильно конвертировать миллисекунды в формат 00:00:00,000?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    JS в браузере считает даты в часовом поясе браузера.
    timestamp в миллисекундах однозначно задаёт момент времени в зоне UTC.
    В это момент, например, в Москве на 3 часа больше. Поэтому браузер покажет
    Mon Mar 20 2023 07:42:33 GMT+0300 (Moscow Standard Time)


    Excel, видимо, предпочитает UTC, поэтому у него получилось 04:42

    Раз хочется получить именно в UTC, можно так:
    (new Date(1679287353711))
      .toISOString() // "2023-03-20T04:42:33.711Z"
      .substring(11, 23) // "04:42:33.711"
    ;
    Ответ написан
    Комментировать
  • Как с помощью регулярок на js заменить в тексте слова, которые могут ялвяться частью других слов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Регулярные выражения не инструмент, который умеет понимать корень слова. Как уже написали в комментариях, с числом букв споткнётесь о коллизию «думой» vs «думал» – первое надо капитализировать, второе нет.

    Так что предложил бы засучить рукава и перечислить все словоформы явно. Но и это не гарантирует безошибочность: подставят переносы слова, или омонимы.
    Омонимы сидели в баре, развалившись, как баре.


    В помощь
    учебник по регулярным выражениям.

    Граница слова: \b — работает только для ASCII, не годится для Unicode кириллицы.

    Unicode и флаг "u"

    Вариант выражения
    /дум.?(?=$|\s)/u – один опциональный символ, и смотреть вперёд, чтобы там был или конец строки или пробельный символ.

    const m = str => str.match(/дум.?(?=$|\s)/u);
    m('ду') // null
    m('дум') // ["дум"]
    m('дума') // ["дума"]
    m('думать') // null


    Вам нужно ещё разобраться и самостоятельно сделать такую же проверку до искомой строки: чтобы там было начало строки ^ или пробельный символ.
    Ответ написан
  • Как определить метод, а не свойство-функцию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    MDN: Using super in method definitions:
    Only functions defined as methods have access to the super keyword. super.prop looks up the property on the prototype of the object that the method was initialized on.


    Learn.Javascript: Методы, а не свойства-функции
    Свойство [[HomeObject]] определено для методов как классов, так и обычных объектов. Но для объектов методы должны быть объявлены именно как method(), а не "method: function()".

    Для нас различий нет, но они есть для JavaScript.
    Ответ написан
  • PHP websocket насколько сильно он уступает node.js по производительности?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Open Swoole – мощный супер-быстрый асинхронный PHP.
    WebSocket'ы, корутины, высокая нагрузка.

    Пример WebSocket сервера:
    <?php
    
    use OpenSwoole\WebSocket\Server;
    use OpenSwoole\Http\Request;
    use OpenSwoole\WebSocket\Frame;
    
    $server = new Server("0.0.0.0", 9502);
    
    $server->on("Start", function(Server $server)
    {
        echo "OpenSwoole WebSocket Server is started at http://127.0.0.1:9502\n";
    });
    
    $server->on('Open', function(Server $server, OpenSwoole\Http\Request $request)
    {
        echo "connection open: {$request->fd}\n";
    
        $server->tick(1000, function() use ($server, $request)
        {
            $server->push($request->fd, json_encode(["hello", time()]));
        });
    });
    
    $server->on('Message', function(Server $server, Frame $frame)
    {
        echo "received message: {$frame->data}\n";
        $server->push($frame->fd, json_encode(["hello", time()]));
    });
    
    $server->on('Close', function(Server $server, int $fd)
    {
        echo "connection close: {$fd}\n";
    });
    
    $server->on('Disconnect', function(Server $server, int $fd)
    {
        echo "connection disconnect: {$fd}\n";
    });
    
    $server->start();
    Ответ написан
    Комментировать
  • Как сделать такую, переливающеюся всеми цветами радуги текстуру?

    В Photoshop сделать можно через Gradient Map («карту градиента»)

    1. Сделать базовое изображение (можно в градациях серого) с плавными переходами яркости: светлые области станут радужными «горами», темные – полосатыми «низинами». Размыть, чтобы не было мелких деталей, добавить Liquify и всякие другие плавные искажения.

    2. Подготовить градиент, который слева будет чередой белых и черных областей, а ближе к другому краю – радужными переходами ярких цветов.

    3. Использовать этот градиент как карту цветов. В Photoshop это – наложить корректирующий слой Gradient Map поверх изображения.

    У меня наскоро получилось такое:
    скрин
    64161055c3c0d942782847.jpeg

    Вот tutorial с похожим эффектом.
    Ответ написан
    Комментировать
  • Как заменить функционал Sublime Text 3 У visual studio code?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    1. cmd + F2 (на маке) выделит все включения текущего слова. Мульти-курсор, можно заменить или допечатать/удалить часть – везде и сразу ©
    2. поиск в VSCode офигенный. И по документу, и по всему проекту, причем можно открыть несколько «редакторов поиска». Искать и с учётом регистра, совпадением слова целиком, регулярными выражениями. Белый/черный список расширений файлов, папок. Исключить / включить папки типа vendors или node_modules.
    3. cmd + shift + P и начать печатать "Emmet: Balance (inward)" – и выбрать команду
    4. плагин PHP Intelephense, и не забыть отключить VSCode PHP Language Features, как пишут по ссылке в разделе Quick Start


    Скачайте/распечатайте самые популярные клавишные команды VSCode под Windows, под Mac или под Linux.
    Ответ написан
    5 комментариев
  • Как установить macOS без дисковой утилиты?

    вот тут пишут, что вероятно, бук просто не может по сети достучаться до яблочных серваков. Советуют зажать при загрузке клавишу Option, чтобы попасть в Startup manager, где можно выбрать WiFi сеть и ввести её пароль.

    Ещё, теоретически, может не помешает VPN на роутере, чтобы к яблочным серверам подключаться через VPN где-то за рубежом, т.к. есть вероятность, что российские IP блокируются.
    Ответ написан
  • Как превратить массив в число?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Небезопасный плохой вариант:
    const str = '1+1'; // строка
    const result = eval(str); // 2
    плохой кулхацкер передаст не "1+1", а злодейский код, который тупо выполнится и всё сломает.

    Вариант получше: разбивать строку "1+1" на токены: число, операция, число. Предположим, что задача из детского сада, поэтому числа всегда целые, неотрицательные, а операций всего 4: + - * / Разбить можно используя «регулярное выражение», или просто тупо искать в строке один из 4 операторов. С регуляркой примерно так:
    const str = '1+1'; // строка
    const parts = str.match(/(\d+)([-+*\/])(\d+)/); // массив [ "1+1", "1", "+", "1" ]
    if (!parts) throw 'не похоже на арифметику!';
    const [ _, A, op, B ] = parts;
    const a = +A; // из строки в число
    const b = +B;
    
    let result;
    if (op === '+') result = a + b;
    if (op === '-') result = a - b;
    if (op === '*') result = a * b;
    if (op === '/') result = a / b;
    
    console.log('result', result); // 2
    Ответ написан
    Комментировать