• Как выполнить проверку на то, что был ли у пользователя отключен localStorage?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    MDN рекомендует такую функцию:
    function storageAvailable(type) {
        var storage;
        try {
            storage = window[type];
            var x = '__storage_test__';
            storage.setItem(x, x);
            storage.removeItem(x);
            return true;
        }
        catch(e) {
            return e instanceof DOMException && (
                // everything except Firefox
                e.code === 22 ||
                // Firefox
                e.code === 1014 ||
                // test name field too, because code might not be present
                // everything except Firefox
                e.name === 'QuotaExceededError' ||
                // Firefox
                e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
                // acknowledge QuotaExceededError only if there's something already stored
                (storage && storage.length !== 0);
        }
    }


    Применение:
    if (storageAvailable('localStorage')) {
      // Yippee! We can use localStorage awesomeness
    }
    else {
      // Too bad, no localStorage for us
    }
    Ответ написан
    Комментировать
  • Как показать последние 4 символа в строке, а остальные заменять?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Может, без регулярок?
    const mask = (s) => '*'.repeat(s.length - 4) + s.substr(-4);
    
    mask('1234567890123456') // "************3456"
    Ответ написан
    Комментировать
  • Защита от автоматизации?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    возможно, проверяют свойство события isTrusted. Чтобы его подделать, наверное, нужна автоматизация «над» браузером.
    Ответ написан
  • Как научить нейросеть анализировать логотипы и рисовать?

    Почитайте про GAN — generative adversarial network.
    В общих чертах там две нейросети. Одна генерит картинки, другая оценивает, насколько у первой хорошо получается. Например, урок про GAN на TensorFlow (на англ.)

    Можно попробовать попробовать обучить сеть на большой коллекции логотипов. Например с Brands of the World. И посмотреть, что у получится у этой парочки в плане создания новых, вдохновлённых.

    взаимодействие нейросетей с графическими элементами, а не только с математическими
    Нейросети работают только с «математическими элементами», с числами. Чтобы скормить картинку в сеть, её переводят в массив чисел: каждый пиксель в 1 (серое) или 3 (red, green, blue) значения от 0 до 255.

    Возможно, более интересный подход был бы без нейронных сетей. Слышали про «генеративное искусство»? Когда пишут программы, создающие что-то красивое. Можно было бы объединить опыт живых дизайнеров с большим портфолио, формализовать их подход к созданию логотипов, и случайно (?) выбирать один из путей. Такое, широкое дерево решений: начать с графического примитива (окружность | прямая | кривая N-го порядка), затем добавить к ней точки, из точек построить (?) и так далее, далеко ) Оценку созданного уже доверить субъективному взгляду человека.
    Ответ написан
    2 комментария
  • Как показать и запустить таймер по клику?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. Клик по кнопке определяет дату-время «сейчас», добавляет к ней 45 минут и сохраняет значение в localStorage.
    const timerKey = 'myTimer';
    function onButtonClick() {
      const D = new Date();
      D.setTime(45 * 6e4 + D.getTime()); // добавить 45 минут
      localStorage.setItem(timerKey, D.getTime()); // сохранить на случай обновления страницы
      startTimer(D.getTime()); // показывать обратный отсчёт
    }
    
    document.getElementById("id1").addEventListener("click", onButtonClick);

    2. обратный отсчёт отображает разницу текущего времени и «времени Че»
    function startTimer(ts) {
      function showTime() {
        const till = Math.max(0, che - Date.now()); // не меньше 0
        // далее вывод этого времени в нужном месте
        let seconds = Math.floor(till / 1000);
        const hours = Math.floor(seconds / 3600);
        seconds -= hours * 3600;
        // ...
    
        if (till > 0) setTimeout(showTime, 200);
      }
    
      const che = +ts; // чтобы число
      showTime();

    3. при загрузке страницы смотреть, если ли что в localStorage и запускать таймер, если есть
    const savedChe = +localStorage.getItem(timerKey);
    if (savedChe) startTimer(savedChe);
    Ответ написан
    4 комментария
  • Как объединить два параметра для получения единого числа?

    для получения процента выполнения проекта
    нужен только объём работы: выполненный / общий. С натяжкой на реальность можно считать часы: потраченные / всего.
    Дедлайн бинарный: хватает времени или нет.

    Ну или уточняйте модель. Например, можно делать проект «горячее», при приближении к нехватке времени до дедлайна. Считать помимо часов-на-задачи ещё и фактические задачи и их выполнение. Наверняка, будут расхождения.
    Ответ написан
    Комментировать
  • Как можно заново загрузить javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Есть скрипт который нужно после события click загружать заново.

    Здесь что-то очень, очень неправильно.

    Скрипт загружается единственный раз и сохраняется в кэше браузера. Выполнять его можно многократно.

    Хорошо бы привести содержание скрипта в вопросе. Под «спойлером», если он длинный. Обязательно обернув в тег <code>.

    Можно обернуть код файла в функцию. И вызывать её сразу при загрузке скриптов. И потом по клику.

    Например, в загружаемом скрипте было так:
    my_script.js
    var message = "Привет Хабр";
    alert(message);
    А вы сделайте так:
    my_script.js
    function my_func() {
      var message = "Привет Хабр";
      alert(message);
    }
    и в коде страницы:
    <button id="btn">нажми</button>
    
    <script src="my_script.js"></script>
    <script>
    document.addEvenListener('load', my_func); // при загрузке страницы выполнить
    document.getElementById('btn').addEventListener('click', my_func); // и при нажатии кнопки
    </script>
    Ответ написан
    2 комментария
  • Отображение в html содержимого формируемого в javascript, это возможно?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    роботы разберутся и без оглавления, которое не несёт в себе ничего нового.
    Ответ написан
    Комментировать
  • Как реализована данная механика?

    Не в курсе игры: если взять «кривой» кубик, его можно попытаться вставить в другом месте?

    Если нет, то вариант какой-то функцией от координат, например шумом Перлина, слегка искажать координатную сетку.
    Ответ написан
    Комментировать
  • Почему не работает автостатус вк?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    в Notice всё написано: после расшифровки JSON в получившемся объекте отсутствует свойство "response".

    Мой хрустальный шар даже подсказывает возможную причину косяка: в запросе не указываете обязательный параметр версии API.
    Ответ написан
  • Как сократить оператор if в JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    if (a == 1 && a == 2)

    (почти) всегда будет false, т.к. не может быть одновременно равно и 1 и 2 (может последовательно), так что смело удаляйте весь блок.

    Если интересует «если а равно одному из списка», можно так:
    if ([1, 2, 100500].includes(a))
    Ответ написан
    1 комментарий
  • Скажите, пожалуйста, что за формат pdf?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    PDF — portable document format, говоря бытовым языком, эл. версия бумаги )
    Бинарный файл, который может содержать много всего: и текст с указанием его шрифтов и форматирования, и векторные рисунки и bitmap картинки. В PDF файл можно вывести, вместо печати, что угодно, из любого приложения (на маке, во всяком).

    Чтобы передать содержимое PDF файла в JSON, надо его закодировать, как любые бинарные данные, в что-то текстовое и без спец-символов. Например, binhex или base64. Обратный процесс применить при "расшифровке".
    Ответ написан
    7 комментариев
  • Почему не работает setTimeout?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    setTimeout(function () {
      var counter = 0;
    
      setTimeout(() => counter++, 1000); // через 1с увеличит на 1
    
      console.log(counter); // выведет 0, сразу
    
      setTimeout(() => {
        console.log(counter);
        nextselect.addClass('same-as-selected').trigger("click");
      }, 1400); // через 1.4с "кликнет"
    }, 500); // вообще всё начнётся только через пол-секунды
    
    
    0         - начало
    0.5       - начнёт выполняться внешняя ф-я:
                зарядятся два таймера, в промежутке выведет 0
    0.5 + 1   - counter увеличится на 1
    0.5 + 1.4 - еще раз выведется counter, добавится класс, клик
    Ответ написан
    2 комментария
  • Как сделать так чтобы новый текст добавленный в фотошоп, не отличался от исходного текста сканированного документа?

    Наберите сначала тот же текст, что в оригинале, поверх. Подберите шрифт: начертание, размер, расстояние между букв.

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

    Размытие, яркость, артефакты jpeg.
    Ответ написан
    2 комментария
  • Как скрыть IP адрес при отправке почты?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Можно использовать ориентированные на приватность почтовые сервисы.
    Например, Proton Mail.

    У них же есть бесплатный сервис VPN, чтобы ваш домашний ip скрыть ото всех кроме них. Но, типа, Швейцария.
    Ответ написан
    Комментировать
  • Как форматировать дату?

    const months_RU = 'Января,Февраля,Марта,Апреля,Мая,Июня,Данунаф,Лень,Дальше,Сами'
      .split(',');
    const parseDate = d => d.split('.')
      .reduce((acc, c, i) => (acc.unshift(i & 1 ? months_RU[+c - 1] : +c), acc), [])
      .join(' ');


    Использование: parseDate('2020.06.01') // "1 Июня 2020"

    Как это работает:
    По точкам разбить в массив строк ['2020', '06', '01'];
    собрать в массив задом-наперёд (день, месяц, год) – вставить в начало массива .unshift();
    Месяц – элемент нечётный, последний бит = 1, проверка i & 1 вернёт 1 только для месяца;
    месяц заменить на название из массива. Там нумерация с 0, поэтому -1.
    Остальные (год и дату) просто сделать из строки – числом, через унарный оператор +
    Получится массив [1, 'Июня', 2020]
    Склеить его элементы в строку через пробел: join(' ')
    Ответ написан
    Комментировать
  • В чем ошибка в цикле вывода четных чисел?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. for (let i = 0; i < 50; ...
      от 0 и до, но не включая, 50. Поменяйте 0 и < 50, чтобы это исправить.
    2. out += i + ' ';  // добавляется всегда, в любом случае
      if ( i % 2 != 0) continue; // проверка уже потом
      поменяйте порядок: сначала проверка, потом добавление
    3. document.querySelector('.out-2').innerHTML = out;
      срабатывает в каждой итерации цикла. А надо 1 раз, когда цикл отыграл все повторы. Вынесите эту строку из цикла.


    spoiler

    2..50 через один, по чётным — это 2 * (1..25) подряд.
    document.querySelector('.b-2').addEventListener('click', () => {
      document.querySelector('.out-2').innerText = Array(25) // создали массив из 25 пустых слотов
        .fill() // заполнили их undefined, чтобы можно было..
        .map((n, i) => 2 * (i + 1)) // каждый заменить на (его индекс + 1) * 2
        .join(' '); // и склеить в строку через пробел
    })
    все эти методы массива можно посмотреть на MDN.


    Ответ написан
    1 комментарий
  • Что означает такой ответ сети?

    При классификации размерность выхода обычно равна числу классов.
    1 из 3 действий == 3 «нейрона».

    На каждом некое значение от 0 до 1 — вероятности. Брать вариант с наибольшей вероятностью.
    Ответ написан
    Комментировать
  • Какой лучше онлайн-фоторедактор?

    Крутейший профессиональный Adobe Lightroom – оказывается уже и онлайн и попробовать бесплатно можно.
    Ответ написан
    Комментировать
  • Как создать функцию/переменную с проверкой, что они еще не созданы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    чтобы не раздувать файл, решил вынести общие функции и переменные в отдельный файл

    Ну вот практически уже используете модули, но ещё не совсем. Раз там какие-то переменные хранятся, значит для каждого калькулятора, видимо, нужна своя _копия_ этого общего куска.

    Как вариант, оберните всё, что там общего, в класс или функцию или объект и создавайте для каждого калькулятора новую копию.

    calc_init.js?1 не удачная идея. Именно потому, что возникают описанные в вопросе проблемы.
    Лучше один раз его просто загрузить <script src="calc_init.js"></script>. Пусть там просто определяется единственная
    функция
    function calc_init(n, id) {
      let el_script = document.createElement("script");
      el_script.src = `/scripts/script_${n}.js`;
      el_script.setAttribute('defer', '');
      document.body.appendChild(el_script);
    
      let el_div = document.createElement("div");
      el_div.setAttribute('id', id);
      document.body.appendChild(el_div);
    }
    и потом вызывать его функцию:
    calc_init(1, 'id_calc_1'); // номер калькулятора и id HTML-элемента, куда его впихнуть
    calc_init(3, 'id_calc_3');
    Ответ написан