• Почему свойство length начинает считать с единицы, а не с нуля, если в массиве счет начинается с нуля?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Как раз с длиной всё очевидно. length – количество элементов массива:
    []; // сколько элементов? – 0
    ['a']; // сколько элементов: 1
    ['a', 'b', 'c']  // 3

    Индексы начинают с нуля, потому, что индекс – это смещение.
    Исторически, с низкоуровневых языков программирования.
    В памяти под массив выделена некоторая память, начиная с адреса X.
    Последовательно находятся ячейки одинаковой длины. Чтобы найти, где лежит значение i-го элемента, к адресу X прибавляют i * size байт. Самый первый элемент начинается сразу с адреса X. Его индекс 0.

    Так же и со строкой в JavaScript: к буквам можно обращаться по индексу, как к элементам массива.
    "abcd"[1] // "b"
    "abcd"[3] // "d"
    Представьте, что в начале строки стоит курсор. Курсор возвращает букву перед которой стоит. Индекс – на сколько вправо надо этот курсор подвинуть.

    Эта особенность index / length общепринята во многих языках программирования. Так же, как для интервалов часто принято включать начало и исключать конец: [a; b) – например, в методе массива slice(), который вырезает кусок массива, если указать slice(1, 5) — вытащит элементы с индексами 1, 2, 3, 4 – включая 1-й, но не доходя до 5.
    Ответ написан
    Комментировать
  • Как удалить тег не удаляя содержимое?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const expandNode = (node) => {
      node.after(...node.childNodes);
      node.remove();
    }
    
    [...document.getElementsByClassName("mark")]
    .forEach(expandNode);
    Ответ написан
    1 комментарий
  • Как хранить динамические данные?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Используйте time series Базы данных.
    Или проще говоря, базу данных в которых есть timestamp -> значение
    И стройте себе потом графики.
    Ответ написан
    2 комментария
  • Как запустить проект на C# в Visual studio code?

    UPD всё что ниже уже не актуально. Microsoft обновили расширения для работы с C# и сделали свою нормальную инструкцию прямо внутри Vs code
    https://code.visualstudio.com/docs/csharp/get-started

    1. Устанавливаешь .net 6 SDK

    2. Устанавливаешь все нужные плагины:


    3. Создаёшь новый проект по гайду
    4. Открываешь в vs code папку с проектом
    5. Жмёшь на кнопку отладки и запускаешь
      (при первом запуске он может напомнить, что в отладчике есть декомпилятор, который нелегально использовать на чужих приложениях - соглашаемся с этим)
      603d3bb386701819998214.png
      Если что - выбираем .net Core
      603d3bf3168e0691109502.png
      В итоге появится нужная кнопка
      603d3c19c5f27607073624.png


    Чтобы запустить без отладки - нужно будет покопаться в launch.json, либо использовать консоль

    PS: Вообще, советую пользоваться полноценной студией - может она на первый взгляд и пугает, но она сильно удобнее, чем vs code. (ну и в ней всё работает из коробки, что важно для новичков)
    PPS: А ещё существует Rider - для профессионального разработчика он стоит копеечные 15$ в месяц, а для школьника или студента вообще бесплатен. При этом он даёт целую кучу полезных инструментов, особенно для геймдева, если он вам интересен.
    Ответ написан
    13 комментариев
  • Что такое модули в javascript?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Поймите следующее, никто больше вручную не закидывает библиотеки в папки. Библиотеки живут в node_modules. Туда они попадают автоматически, когда вы устанавливаете зависимости проекта.

    Далее ваш проект собирается в билд версию каким то сборщиком вроде вебпак/парсел/роллап которые прекрасно резолвят все эти зависимости.

    Начните с изучения сборки проекта и вам откроется целый новый мир)
    Ответ написан
    Комментировать
  • Что такое модули в javascript?

    Dimski
    @Dimski
    Программирование - мое хобби
    Представь что в мире нет городов, только бесконечное название улиц. Так же и с областью видимости. Просто поверь, это полезное нововведение, но поймешь это когда будешь работать с большими проектами.
    Ответ написан
    Комментировать
  • Какая разница между await и Promise?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Promise – сложная штуковина для асинхроты всякой, с кучей методов.
    Зачем забивать себе голову, если можно зайти на QnA, задать вопрос и поджидать await готовый ответ.
    В это время не сидеть-тупить в экран, а пойти чайку попить. Как появится ответ — продолжим дальше.
    Ответ написан
    7 комментариев
  • Как повесить анимацию на курсор?

    RAX7
    @RAX7
    Там на webgl сделано, и вряд ли есть какие-то готовые библиотеки с именно таким эффектом.
    Упрощенный вариант можно сделать с использованием CSS mix-blend-mode
    Ответ написан
    2 комментария
  • Как получить indexOf по полю объекта?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Комментировать
  • Как уменьшить массив в два раза сложив значения?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Делаем просто:

    const result = arr.reduce((acc, n, i) => (
      (i & 1) || acc.push(0),
      acc[~-acc.length] += n,
      acc
    ), []);

    Делаем сложно:

    function chunked(data, chunkSize) {
      return Array.prototype.reduce.call(
        data,
        (acc, n, i) => ((acc[i / chunkSize | 0] ??= []).push(n), acc),
        []
      );
    }
    
    function sum(data, val = n => n) {
      const getVal = val instanceof Function ? val : n => n[val];
      return Array.prototype.reduce.call(
        data,
        (acc, n) => acc + getVal(n),
        0
      );
    }
    
    
    const result = chunked(arr, 2).map(n => sum(n));
    Ответ написан
    5 комментариев
  • Почему this внутри функции ведет себя неадекватно?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега JavaScript
    Руководитель frontend направления, предприниматель
    Комментировать
  • Могу ли я читать данные в Nginx?

    @MadridianFox
    Web-программист, многостаночник
    Можно, для этого есть конструкция map
    которая даже умеет подтягивать варианты из отдельного файла

    Однако это довольно статичный вариант, подходящий для случаев, когда вам достаточно один раз настроить и забыть.
    Если нужна интерактивность, то можно попытаться добавить её через модуль njs - он позволяет написать код на js, который устанавливает значение переменной.
    Однако этот довольно нетипичный вариант и с 99% случаев его использование это костыли и велосипеды.

    В случае, когда вам нужно проксирование на ддинамически формируемый список сервисов, посмотрите в сторону разного рода настраиваемых прокси и service discovery, например HAProxy или Consul.
    Ответ написан
    4 комментария
  • Как работают цепочки await в C#?

    Я много раз читал, что если await встречает Таск, который ещё не выполнен, то метод возвращает незавершённый таск и выполнение продолжается в вызывающем методе.

    Видимо, вы не дочитали, либо недопоняли.

    Возьму ваш первый пример, но немного его видоизмению, чтобы было понятнее, что проиходит:
    static async Task Method1Async()
            {
                Console.WriteLine("Starting Method1Async Thread id: "+ Thread.CurrentThread.ManagedThreadId);
                var task = Method2Async();
                await task; // До этой точки код выполняется синхронно (если таска ещё не готова)
                Console.WriteLine("End Method1Async Thread id: " + Thread.CurrentThread.ManagedThreadId);
            }
            
            static async Task Method2Async()
            {
                Thread.Sleep(100); // Thread.Sleep - это блокирующая операция
                Console.WriteLine("Starting Method2Async Thread id: "+ Thread.CurrentThread.ManagedThreadId);
                await Task.Yield(); // До этой точки код выполняетя синхронно. Task.Yield освобождает поток всегда
                Console.WriteLine("End Method2Async Thread id: " + Thread.CurrentThread.ManagedThreadId);
            }

    Подробнее можете узнать, если загуглите TAP.docx
    Ответ написан
    Комментировать
  • Что делает эта регулярка?

    \w matches any word character (equal to [a-zA-Z0-9_])

    https://regex101.com/r/HDoDzi/1

    Т.е. выбираются все символы, которые не являются пробелом и не входят в список указанный выше и удаляются.

    Если же указать модификатор юникода, логика меняется:
    \w match any word character in any script (equal to [\p{L}\p{N}_])
    Ответ написан
    Комментировать
  • Как выполняется установка Linux?

    @rPman
    Для систем основанных на debian (*.deb пакеты) есть отличный инструмент, называется dabootstrap, это консольная утилита, позволяет создать в указанном каталоге минимальную рабочую систему выбранного дистрибутива и архитектуры. Собственно она и используется графическими инсталляторами.

    Т.е. чтобы устновить систему нужно:
    * подготовить место куда система будет ставиться (рейд, шифрование, разбить диск на разделы, выбрать и отформатировать файловую систему, смонтировать, может по сети или iscsi и еще 100500 вариантов)
    * подготовить минимальную систему с помощью debotstrap, докинув необходимые пакеты по желанию, это можно сделать позже
    ***** войти в установленную систему сделав chroot (перед этим смонтировать туда /dev /sys /proc типом bind)
    * докинуть в установку ядро со стартовым образом initramfs (установив например пакет linux-image-generic но есть оптимизированные варианты например для запуска внутри kvm или подписанные цифровой подписью для залоченных биосов и т.п.)
    * настроить загрузчик (например grub или если по сети pxe или как еще хотите)
    * настроить пользователя, пароли, сеть, и т.п
    * перезагрузиться

    p.s. отличный способ понять, что да как происходит, это попробовать установить gentoo, там очень подробные инструкции включая настройку и сборку ядра linux из исходников, т.е. если вы сумеете пройти этот квест, понимая что происходит на каждом шагу - вы постигните дзен линкус (например осознаете мощь тюнинга системы под задачу, когда слабые машины, с 10-15-летним сроком жизни могут засиять в новом свете с последними версиями софта, например только с gentoo я сумел оживить eeepc900 с 1гб ram и слабым диском, даже без тюнинга ядра, графичеcкая система требовала всего 50мб оперативки, awesome de, остального хватало для браузера и плеера, последний запускался плагином при попытке смотреть ютуб)
    Ответ написан
    1 комментарий
  • Как сделать неумираемую linux-файловую файлопомойку?

    @rPman
    Дешевле решить проблему аппаратным способом, поставить ups, подключить его по usb/com к компу и настроить уход в сон по пропаданию электричества дольше чем на минуту. Чтобы восстановилось все после сбоя, необходимо городить какой-то watchdog со стороннего устройства, который будет будить сервер по WoL при появлении энергии, логично завести управление ups именно на это устройство а не сам файловый сервер, какую-нибудь малинку или дешевую mitx плату с процом потребляющим 5ват.

    Постоянные отключения энергии добьют любую систему, включая железо (hdd не любят этого)

    Если же отвечать по теме - настраивай linux за работу из ram/образа диска (смотреть как сделано в livecd, там есть ro образ squashfs сжатый, а необходимые записи заворачиваются через что то типа aufs в tmpfs).

    Саму же файлопомойку размести на btrfs/zfs/xfs (ключевое тут - cow), они легче переносят прерывание работы.
    Про производительность и надежность - при использовании ext3..4 можно разместить журнал на ssd диске (там надо от силы 512Мб), сильно ускорит запись на hdd без необходимости переводить nas в режим writeback (оно тоже улучшает но роняет надежность при потери энергии).

    p.s. про windows, в свойствах диска системы (рекомендуется при этом каталоги temp разместить на ram диске) и файлопомойки отключи кеширование записи, это даст гарантию что данные не потеряются при отключении энергии ценой понижения производительности (будет работать кеш записи самого hdd так что не все так плохо).
    Ответ написан
    Комментировать
  • Какое максимальное количество операций в бинарном поиске?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    С краями ошиблись: 3 бита (3 вопроса) — это числа от 0 до 7.
    Каждым вопросом уточняется бит, от старших к младшим:
    0  000
    1  001
    2  010
    3  011
    4  100 - четыре?  - больше (старший бит 1xx )
    5  101
    6  110 - шесть? - больше ( 11x )
    7  111 - семь – ага
    Ответ написан
    4 комментария
  • Как ответ сервера через fetch вернуть в виде текста в переменную?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Подскажите что тут не правильно, ведь text() возвратить должен ответ сервера в виде текста?

    Тут всё правильно. resp.text() как Вы заметили, тоже возвращает промис. А вот следующий then уже вернёт данные.
    fetch(ajaxurl, {
      method: 'POST',
      body: formData
    })
    .then(resp => resp.text())
    .then(data => alert(data))
    Ответ написан