• Ошибка Error: EACCES: permission denied, stat '/root/.config/postcss' при сборке?

    JastaFly
    @JastaFly Автор вопроса
    Проблему решить помогло смена версий пакетов:
    "postcss": "^8.4.32",
        "postcss-loader": "^7.3.4",
        "postcss-preset-env": "^9.3.0",

    Спасибо szQocks за совет)
    Ответ написан
    Комментировать
  • Как найти циклы в массиве?

    0xD34F
    @0xD34F
    Вот говнокод:

    $result = [];
    
    foreach ($arr as $n) {
      for ($visited = []; array_key_exists($n, $arr); $visited[] = $n, $n = $arr[$n]) {
        if (($i = array_search($n, $visited)) !== false) {
          $loop = array_slice($visited, $i);
          if (empty(array_intersect(array_column($result, 0), $loop))) {
            $result[] = $loop;
          }
          break;
        }
      }
    }

    или

    $result = [];
    $visited = [];
    $iLoop = -1;
    
    foreach ($arr as $n) {
      for ($iLoop++; isset($arr[$n]); $visited[$n] = $iLoop, $n = $arr[$n]) {
        if (isset($visited[$n])) {
          if ($visited[$n] === $iLoop) {
            for ($loop = [ $m = $n ]; ($m = $arr[$m]) !== $n; $loop[] = $m) ;
            $result[] = $loop;
          }
          break;
        }
      }
    }
    Ответ написан
    Комментировать
  • Как сгруппировать массив объектов по значениям одного из свойств?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const group = (arr, key) =>
      arr.reduce((acc, n) => {
        const k = n[key];
        (acc[k] = acc[k] || []).push(n);
        return acc;
      }, {});
    
    
    const result = Object.values(group(array, 'prop'));

    UPD. Код немного осовременим (на момент публикации ответа оператор ??= отсутствовал); пусть группировать можно будет не только массивы, а любые итерируемые объекты; также добавим возможность задавать имя группы через функцию (на тот случай, если в качестве имён групп должны будут выступать значения вложенных свойств, или не непосредственно значения свойства, а производные от них - например, есть свойство, представляющее дату, а нужен месяц; или есть имя, а нужна его первая буква и т.п.); ну и ещё в качестве значений групп пусть можно будет брать не исходные значения, а что-то другое:

    function group(data, key, val = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const getVal = val instanceof Function ? val : n => n[val];
      const grouped = {};
    
      for (const n of data) {
        (grouped[getKey(n)] ??= []).push(getVal(n));
      }
    
      return grouped;
    }

    Теперь можно делать так:

    const groupedBySign = group([ 0, 1, 2, 3, -10, -20, -30, 0 ], Math.sign);

    Или так:

    const groupedByParity = group(Array(10).keys(), n => [ 'чётные', 'нечётные' ][n & 1]);

    Или так:

    const chars = group(
      'ABC123?!+',
      n =>
        n.toLowerCase() !== n.toUpperCase() ? 'буква' :
        Number.isInteger(+n)                ? 'цифра' :
                                              'другое'
    );

    И даже так тоже можно:

    <input name="xxx" value="69">
    <input name="xxx" value="187">
    <input name="xxx" value="666">
    <input name="yyy" value="0">

    const values = group(document.querySelectorAll('input'), 'name', 'value');

    UPD. Наконец-то дождались, и пяти лет не прошло:

    const result = Object.values(Object.groupBy(array, n => n.prop));
    Ответ написан
    1 комментарий
  • Как соединить локальный порт с сервером?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Использовать SSH туннель.
    Ответ написан
  • Как отслеживать подключение пользователей к сайту?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Какие есть способы отслеживания подключений, как это делают соцсети?
    Магии не существует. «Соцсети» просто держат флаг активности ещё несколько секунд после разрыва соединения, чтобы обработать ситуацию «обновления страницы».
    Ответ написан
    5 комментариев
  • Как сделать разные характеристики для разных категорий?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Навскидку, варианта 2:
    1. Использовать EAV;
    2. Если есть возможность переехать на Postgresql - jsonb;
    Ответ написан
    7 комментариев
  • Какой скрипт выбора страны в input для поля телефона?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    International Telephone Input, Vanilla JS, React, Vue, 7к звиздецов и последнее обновление 3 часа назад, думаю достойный вариант.
    Ответ написан
    Комментировать
  • Как убрать/запретить выделение картинки?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    не актуально
    Если картинка вообще не должна реагировать на указатель, то явно напишите это

    .your-image {
      pointer-events: none;
    }


    Или запретить выделение

    .your-image {
      user-select: none;
    }


    Или вообще полностью запретить выделение на странице

    body {
      user-select: none;
    }


    UPD. На мобилках это не выделение, а подсветка тапа.
    Обычно добавляют в стили такое правило, чтобы сделать ее прозрачной
    body {
      -webkit-tap-highlight-color: transparent;
    }
    Ответ написан
    4 комментария
  • При анимации списка сбрасывается background-attachment: fixed, как исправить?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Это вполне ожидаемое поведение. Пофиксить его, вероятно не получится (мне такие методы неизвестны). Остается два варианта.
    1. Не использовать трансформации, как предложили в комментариях. Задать position:relative и анимировать свойство top, вместо transform.
    2. Указать фон для родителя, а промежутки между сообщениями устанавливать бордером.
    Вот так:

    Ответ написан
    1 комментарий
  • Как зациклить эффект печати?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Строки сложить в массив. Завести два индекса - текущей строки и её последнего отображаемого символа. Если при увеличении количества отображаемых символов выходим за границу строки - переключаемся на следующую строку и сбрасываем счётчик символов.

    Куда, что и с какой задержкой будем печатать:

    const el = document.querySelector('p');
    const strings = [ 'hello, world!!', 'fuck the world', 'fuck everything' ];
    const delay = 100;

    Печатаем:

    function Typewriter(el, strings, delay) {
      let i = 0;
      let length = 0;
    
      return setInterval(() => {
        if (++length > strings[i].length) {
          i = -~i % strings.length;
          length = 0;
        }
    
        el.textContent = strings[i].slice(0, length);
      }, delay);
    }
    
    
    const intervalId = Typewriter(el, strings, delay);
    // хотим остановить, делаем так: clearInterval(intervalId);

    или

    function Typewriter(el, strings, delay) {
      let timeoutId = null;
    
      (function step(i, length) {
        length = -~length % -~strings[i].length;
        i = (i + !length) % strings.length;
        el.innerText = strings[i].substring(0, length);
        timeoutId = setTimeout(step, delay, i, length);
      })(0, 0);
    
      return () => clearTimeout(timeoutId);
    }
    
    
    const stop = Typewriter(el, strings, delay);
    // хотим остановить, делаем так: stop();
    Ответ написан
    1 комментарий
  • Как удалить лишнее с БД mysql имея более 7000 id, которые удалять не надо?

    @rPman
    Тебе все ответили, тут два варианта - создавать в базе inmemory таблицу с одной колонкой и без индексов, и на ее основе уже делать
    DELETE FROM A WHERE A.id NOT IN (SELECT id FROM B);


    Либо написать скрипт, который выгрузит все id из базы, сравнит их (пока чисел не миллионы, это вообще не проблема) и сформирует список id которые нужно удалить (если всего 10к то их будет всего 3к), когда на десяток строк в любом языке программирования. Так как удаляются конкретные id то такой запрос будет работать быстрее чем delete where not in и возможно быстрее использования временной таблицы. Особых ограничений на количество id в where id in (...) я не нашел, если они есть то это проблема драйвера подключения к бд.

    Есть еще третий вариант, который потребует изменения всего проекта, но заложит неплохие возможности. В базе данных нужно определить флаг - deleted (boolean), который устанавливать true если запись нужно удалить, это может быть дополнительное поле в каждой таблице где это имеет смысл, либо отдельная таблица (это эффективнее, если удаленные записи долго не нужно хранить) с единственным полем id, куда будут складываться идентификаторы записей на удаление. Естественно все запросы проекта нужно будет модифицировать с учетом этого поля/таблицы, чтобы пропускались записи, помеченные на удаление. Реальное же удаление проводить в момент наименьшей нагрузки на сервер или по другому критерию (например удаленные записи можно хранить для использования, к примеру отчетности). У метода есть подводные камни - например уникальные индексы/ограничения на другие поля нужно так же переделывать на сдвоенные с флагом удаленности, чтобы допускались записи с тем же значением что и удаленные.
    Ответ написан
    1 комментарий
  • Какие курсы по 1с программированию лучше выбрать?

    @Dementor
    программист, архитектор, аналитик
    Могу дать ответ как бывший преподаватель 1С ЦСО на сертифицированных курсах по программированию и по использованию УТ и БП.

    1. Любые курсы - это всего лишь обзоры возможностей. Это как аттракционы, чтобы быстро и сразу показать красочный результат. Если нужны фундаментальные знания, то тут только самостоятельная работа поможет. При чем нельзя верить ни ИТС, ни синтаксис-помощнику в конфигураторе - все нужно лично перепроверять! Правильный выбор курса позволит получить ускорение только на первых 10% пути.

    2. Курс - это лишь план для преподавателя. Толковый преподаватель - это залог понимания материала! Когда я сам только пришел в 1С в 2006 году, то у меня был достаточно бестолковый учитель с минимальным опытом, который плавал в терминологии и "читал по книжке" (вероятно его отправили в учителя, чтобы он смог из мидлов выйти в сеньоры). Помня про него, я свои лекции всегда насыщал множеством примеров из практики. Некоторые коммерческие курсы делают завлекающие вебинары с преподавателями, а у учебных центров 1С есть каналы на Ютубе - можно посмотреть на лекторов, на их стиль преподавания.

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

    0xD34F
    @0xD34F Куратор тега CSS
    Дефолтная ширина блока половина, а для :nth-child(odd):last-child полная. Типа так.
    Ответ написан
    Комментировать
  • Как лучше инициализировать объект?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    типа, антипаттерн...

    но это все равно вызов метода в конструкторе, что не приветствуется.

    Бред. Вот кем не приветствуется - вот он пускай и не приветствует и тихо миро плавает в своем болотце. Спокойно вызывайте приватный инициализатор в конструкторе - это как раз нормально. Конструктор - это и есть инициализатор объекта. Он даже называется "конструктор" - сборщик объекта. Его для этого и придумали. Выносить часть инициализации из инициализатора - на самом неделе не самая умная идея. А вот разбить инициализацию на разные логические части и разнести в разные методы - как раз таки очень даже хорошая практика. Декомпозиция, небольшие и простые функции/процедуры и все такое прочее.
    Ответ написан
    2 комментария
  • Как вытянуть одну из вершин фигуры вверх?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Как вариант маска. В идеале SVG, чтобы края были ровнее
    Ответ написан
    Комментировать
  • Не видит переменную js. Как получить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ваш код работать не будет.
    Анонимная функция, в которой вы задаёте значение переменной dd будет вызвана только при наступлении события message, то есть при приходе сообщения от WS-сервера. А это сообщение может прийти как сразу же, так и через час.
    Кроме того, даже при приходе события, вызов функции будет помещён в очередь и выполнится только после завершения выполнения текущего кода, то есть когда console.log(vv) уже отработает.
    Ответ написан
    Комментировать
  • Как работают SSR компоненты?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понимаю работу Next.js: компоненты без состояния рендерятся на сервере и могут индексироваться поисковыми роботами

    Верно, индексация стандартная.
    А с состоянием - на стороне клиента, и роботы их не видят.

    Не совсем. Поисковики индексируют динамику, но ограниченно, и она проиграет классической статике или ssr. То, что Вы видите динамику в топе - это не заслуга динамики, а недоработка конкурентов со статикой.
    Однако в компоненте самой страницы ArticlePage у меня в любом случае будет использование useState. Значит ли это, что вся страница будет отрисовываться на клиенте?

    Не совсем. Часть страницы будет отрисована на сервере, а часть на клиенте.
    И что поисковые роботы обойдут контент страницы стороной?

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

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

    0xD34F
    @0xD34F Куратор тега React
    Состояние компонента должно содержать три значения - индекс печатаемой строки, количество отображаемых символов, направление печати (печатаем или стираем, т.е., в какую сторону надо изменять количество отображаемых символов, увеличивать или уменьшать). Дальше понятно что - setInterval или рекурсивный setTimeout, изменяем количество отображаемых символов, если дошли до конца строки - меняем направление, дошли до начала - меняем направление и индекс строки. Вот как-то так:

    const defaults = {
      index: 0,
      length: 0,
      step: 1,
    };
    
    function Typewriter({ strings, delay }) {
      const [ state, setState ] = useState(null);
    
      useEffect(() => {
        setState(() => ({...defaults}));
      }, [ strings ]);
    
      useEffect(() => {
        const timeoutId = setTimeout(setState, delay, ({...state}) => {
          state.length += state.step;
          if (state.length === strings[state.index].length) {
            state.step = -1;
          } else if (state.length === 0) {
            state.step = 1;
            state.index = (state.index + 1) % strings.length;
          }
          return state;
        });
    
        return () => clearTimeout(timeoutId);
      });
    
      return <div>{strings?.[state?.index]?.slice(0, state?.length)}</div>;
    }
    Ответ написан
    8 комментариев