Задать вопрос
  • Можно ли восстановить удалённое 10-й виндой при проверке диска?

    @rPman
    Немедленно прекратите самодеятельность и несите диск на восстановление, но шансов у вас мало.
    Основной рабочий пока первый, с 7кой.
    ...
    После этого ребутнулся в 10ю винду и запустил проверку первого диска.

    Об этом моменте все забывают, что в windows 10 (начиная с win8) есть механизм ускорения загрузки, который при использовании последовательно нескольких ОС может угробить ваши данные (полагаю это сделано специально, как одна из миллиона мер борьбы с linux конкуренцией, иначе об этом бы везде писали большими буквами). Принцип следующий - windows 10 при выключении, закрывает рабочие приложения (делает быстрый logout) а затем вызывает гибернацию (hibernation), сброс оперативной памяти и состояния устройств (включая gpu) на диск в файл hiberfil.sys в корне диска, т.е. не завершая процессы, не закрывая файлы, не сбрасывая кеши записи на диски и кучу всего, что могло бы замедлить этот процесс... при включении, данные очень быстро и эффективно считываются с диска (линейная скорость даже медленных дисков hdd - сотня мбайт/с), включение занимает считанные десяток секунд, после чего идет login и запуск процессов пользователя.

    Если после гибернации вы загружаетесь в другую ОС, файловые системы на дисках находятся в не консистентном состоянии, и вероятность сбоя и потери данных на них очень сильно повышается, причем самым странным образом (например позже, после пары перезагрузок). Если постоянно туда сюда переключаться, ошибки накапливаются.

    Но вот винда ругнулась на этот диск и я решил его проверить. Забекапил что нужно и на 2й и на 3й диски.
    Что это была за ругань, сообщение в подробностях скорее всего раскроет подробно, что случилось.

    p.s.
    эту фичу зовут Fast Startup (включена в win10 и 11 по умолчанию) можно не выключать всю гибернацию, а вручную выключать компьютер в правильном режиме:
    shutdown -s -t 0

    отключается в Панели управления, электропитание, действия кнопок питания, изменение параметров которые сейчас недоступны, выключить быстрый запуск.
    либо отключить гибернацию полностью, выполнив в командной строке:
    powercfg /h off
    Ответ написан
  • Как собрать массив массивов, имея массивы ключей, ключей и значений вложенных массивов?

    0xD34F
    @0xD34F
    function combine($ids, $keys, ...$values) {
      return array_combine(
        $ids,
        array_map(
          fn($i) => array_combine($keys, array_column($values, $i)),
          array_keys($ids)
        )
      );
    }
    
    
    $result = combine($input, $params, $array1, $array2);
    Ответ написан
    2 комментария
  • Стоит ли использовать lodash сейчас?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Я так понимаю все что предлагает лодаш уже реализовано нативно

    Не понимаете.
    Ответ написан
    Комментировать
  • Как преобразовать JSON файл в другой JSON файл?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Прочитать содержимое файла, распарсить, выполнить необходимые преобразования, превратить данные обратно в строку, записать в файл.

    Как видите, всё довольно просто.
    Ответ написан
    Комментировать
  • Как сгруппировать массив в одномерный с соединением ключей и значений?

    0xD34F
    @0xD34F
    function getCombinations($arr, $keys = [], $vals = []) {
      return ($n = $arr[count($keys)] ?? null)
        ? array_merge(...array_map(
            fn($k) => getCombinations(
              $arr,
              [ ...$keys, $k ],
              [ ...$vals, ...$n[$k] ]
            ),
            array_keys($n)
          ))
        : [ implode('_', $keys) => $vals ];
    }
    Ответ написан
    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 комментарий
  • Как найти центральную ячейку таблицы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Как получить строки таблицы:

    // если гарантируется отсутствие thead и tfoot, или их содержимое также должно учитываться
    const { rows } = table;
    
    // если tbody один
    const [ { rows } ] = table.tBodies;
    
    // если tbody несколько
    const rows = Array.prototype.flatMap.call(table.tBodies, n => [...n.rows]);
    // или
    const rows = [].concat(...Array.from(table.tBodies, n => [...n.children]));
    // или
    const rows = table.querySelectorAll('tbody tr');

    Как получить средний элемент:

    const middle = arr => arr[arr.length >> 1];
    // или
    const middle = arr => arr[Math.floor(arr.length / 2)];
    // или
    const middle = arr => arr[Math.round(~-arr.length / 2)];
    // или
    const middle = arr => arr[(arr.length - arr.length % 2) / 2];

    Всё, можно доставать ячейку:

    const cell = middle(middle(rows).cells);
    // или
    const cell = middle([].reduce.call(rows, (acc, n) => (acc.push(...n.children), acc), []));
    // или, без получения строк
    const cell = middle(table.querySelectorAll('tbody td'));
    Ответ написан
    Комментировать
  • Как сделать страницу с тремя вкладками на каждой из которых будет своё приложение vue3?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Не надо заниматься ерундой. Делайте одно приложение, в качестве контента вкладок будут выступать различные компоненты. Как переключаться между ними? - известно как.

    чтобы данные не терялись

    Не проблема.
    Ответ написан
    2 комментария
  • Как вывести данные из двух таблиц?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ошибка детская, она вот в этом: "Есть 2 таблицы, в которых одинаковые поля".
    Очень часто новички, которые не понимают, как работает база данных, делают подобное.
    И всегда потом приходится переделывать, даже если очень не хочется.
    Потому что в БД не должно быть таблиц с одинаковыми полями. Собственно, сообразительные новички уже на этом вопросе, "как выбрать из двух таблиц" начинают понимать, что у них что-то пошло не так.

    Так что надо просто сделать одну таблицу, записать в неё данные из всех таблиц с одинаковыми полями, и выбирать из неё обычным способом.

    Имя таблицы, кстати, тоже очень странное. Наверняка там внутри тоже треш и угар и вот её-то как раз и надо разделить, только не горизонтально, а вертикально. Судя по составу полей, нужна одна таблица city и одна таблица people, в которой указывается только city id
    Ответ написан
    2 комментария
  • Как правильно подружить Vue и php?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    а vue выступает сугубо в роли небольших компонентов на разных страницах

    Исходя из этого я могу предположить, что подобные виджетики скорее всего не нуждаются в серверном рендере, а значит все довольно просто.
    Настраиваем любой сборщик (webpack, vite). На входе будет какой-нибудь main.js, на выходе готовый файл (по умолчанию), пара файлов (main и vendor, если настроили разделение) или больше, в зависимости от хитрожопости настроек. Вот эти файлы и подключаем (соблюдая порядок, если их несколько, например vendor перед main)

    В main можно писать весь фронт сайта, или модульно импортировать.
    Туда же подключается вью и компоненты ваших виджетов

    import Vue from 'vue';
    import Calculator from './calc/Calculator.vue';


    На странице, где нужно вставить компонент пишем нечто вроде

    <div class="calc"></div>

    Сюда будет рендериться компонент в рантайме. Например так (в том же main.js)

    document.querySelectorAll('.calc').forEach(el => {
        new Vue({
            el    : el,
            render: h => h(Calculator, {
                props: {
                   /// Пропсы, если надо
                },
            }),
        });
    });


    То есть каждый виджет в этом случае будет независимым vue приложением.

    Если нужно передавать в компоненты какие-то данные, то можно научить компонент самому их запрашивать. Но тут придется отдельные роуты создавать. Или прямо на страницу в head выплевывать их в виде json

    <script>window.calcData = <?= json_encode($calcData) ?>;</script>


    а в компоненте по mounted их доставать

    mounted() {
      const d = window.calcData;
    }
    Ответ написан
    1 комментарий
  • Как посчитать количество объектов в классе?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вариант А. считать в конструкторе, как предложил Lynn «Кофеман» Такой вариант не учитывает удалённые объекты класса. Метода desctructor() в ECMAScript 6 не предусмотрено.
    class Menu {
      static counter = 0;
    
      constructor(name) {
        this.name = name;
        ++Menu.counter;
      }
    }
    
    menu1 = new Menu("меню1");
    menu2 = new Menu("меню2");
    menu3 = new Menu("меню3");
    menu4 = new Menu("меню4");
    
    delete menu1;
    
    console.log(Menu.counter); // 4


    Вариант Б. Полагаться на родителя, хранящего ссылки на созданные инстансы. В данном случае это глобальный window. Тоже не лучший вариант, т.к. мало ли, где в коде содержатся ссылки на созданные объекты. Может, в анонимных функциях, вызванных по таймеру.
    let count = 0;
    for (obj in this) { // в примере this === window
      if (this[obj] instanceof Menu) ++count;
    }
    console.log(count); // 4
    Ответ написан
    2 комментария
  • Как убрать все лишние пробелы, js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    str.replace(/\s+/g, ' ').trim()
    Ответ написан
    3 комментария
  • Какой фреймворк популярнее в Америке Angular или React.js?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Учи не фреймворки, а сам язык.
    Потом любую технологию можно недели за две подтянуть.
    Ответ написан
    Комментировать
  • Как правильно обойти объект JS для построения дерева?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Составление дерева любого уровня вложенности.

    const categories = [
      { id: 1, name: 'name 1', parent: null },
      { id: 2, name: 'name 2', parent: 1 },
      { id: 3, name: 'name 3', parent: 6 },
      { id: 4, name: 'name 4', parent: 5 },
      { id: 5, name: 'name 5', parent: 6 },
      { id: 6, name: 'name 6', parent: null },
      { id: 7, name: 'name 7', parent: null }
    ]
    
    function buildTree (array) {
      // Складываем все элементы будущего дерева в мап под id-ключами
      // Так легче делать поиск родительской ноды
      const map = new Map(categories.map(item => [item.id, item]));
      
      // Обход в цикле по значениям, хранящимся в мапе
      for (let item of map.values()) {
        
        // Проверка, является ли нода дочерней (при parent === null вернет undefined)
        if (!map.has(item.parent)) {
          continue;
        }
        
        // Сохраняем прямую ссылку на родительскую ноду, чтобы дважды не доставать из мапа
        const parent = map.get(item.parent);
    
        // Добавляем поточную ноду в список дочерних нод родительчкого узла.
        // Здесь сокращено записана проверка на то, есть ли у ноды свойство children.
        parent.children = [...parent.children || [], item];
      }
    
      // Возвращаем верхний уровень дерева. Все дочерние узлы уже есть в нужных родительских нодах
      return [...map.values()].filter(item => !item.parent);
    }
    
    const tree = buildTree(categories);
    
    console.log(tree);
    Ответ написан
    Комментировать
  • Как найти все экземпляры определенного класса в javascript?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    const instancesOfFoo = new Set();
    class Foo {
      constructor() {
        instancesOfFoo.add(this);
      }
    }
    
    new Foo;
    new Foo;
    new Foo;
    
    console.log([...instancesOfFoo.values()]);


    Set
    Ответ написан
    Комментировать
  • Как работать с переводом типов в PHP?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Я для этих целей использую расширение Decimal:
    (new Decimal\Decimal('153.17'))->mul(100)->toInt(); // 15317


    Но можно использовать и функцию bcmul:
    (int)bcmul('153.17', '100'); // 15317
    Ответ написан
    1 комментарий
  • Как сделать следующий эффект для background?

    Aetae
    @Aetae
    Тлен
    Чуть более сложно чем нужно тебе:



    Упростишь сам, если надо.)
    Ответ написан
    Комментировать
  • Как получить подстроку между последними "/"?

    0xD34F
    @0xD34F Куратор тега JavaScript
    /[^\/]+(?=\/$)/.exec(str)[0]

    или

    str.match(/[^\/]+/g).pop()

    или

    str.split('/').at(-2)
    Ответ написан
    1 комментарий
  • Как корректно вызвать событие Drag?

    Stalker_RED
    @Stalker_RED
    elem.addEventListener('dragstart', function(evt) {
      // прозрачная картинка вместо "призрака"
      const img = new Image();
      img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';
      evt.dataTransfer.setDragImage(img, 0, 0);  
    });

    Ну и по событию drag можете двигать за курсором сам объект.
    Ответ написан
    Комментировать
  • Что нужно изменить, чтобы скрипт работал без jQuery?

    Adamos
    @Adamos
    https://youmightnotneedjquery.com/#on и далее по пунктам
    Ответ написан
    Комментировать