• Существует ли функциональная библиотека для соединения JSON?

    profesor08
    @profesor08 Куратор тега JavaScript
    const a = {
      a: 123,
    };
    
    const b = {
      b: 234,
    };
    
    // ой, библиотека не понадобилась
    const c = {
      ...a,
      ...b,
    };
    Ответ написан
    2 комментария
  • Обязательно нужно минифицировать файлы?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Минификация файлов нужна для ускорения скачивания файла на компьютер пользователя, обязательно это делать или нет - выбор руководителя проекта или другого ответственного за проект. С точки зрения СЕО специалиста будет "однозначно да", программисту же, как минимум до полной "полировки" файлов, удобнее работать с развернутой версией.

    В общем случае это крайне желательно(экономит время/энергию/байты, спасает птичек и лисичек), но в некоторых случаях не критично (например сайт малопосещаемый и файлы не большие).
    Ответ написан
    2 комментария
  • Как остановить setInterval из функции?

    @twolegs
    setInterval возвращает id таймер, который вам следует сохранять в каком-нибудь поле/переменной. А далее просто clearInterval с сохранным id.
    Ответ написан
    Комментировать
  • Почему не получается сравнить отрицание в switch?

    MvcBox
    @MvcBox
    Software Engineer [C/C++/JS(for Node.js)/etc]
    но тогда это больше похоже на баг, чем на фичу...

    Как обычно. Новички вместо попытки отладить свое поделие начинают обвинять компилятор/интерпретатор/etc.

    /sarcasm on
    Конечно, это же куча опытных разработчиков, которые много лет пилят V8, допустили такой "баг".
    И никто в мире кроме accountnujen его не нашел!
    /sarcasm off

    А если серьезно - научитесь мыслить критически и подумайте, вероятность чего больше:
    1. Вероятность того, что разработчики V8 допустили такой "баг".
    2. Вероятность того, что accountnujen (который даже забыл break написать после console.log ) банально не знает о таком понятии как приоритет операторов.

    switch(true) {
      case 'language' in localStorage:
        console.log('язык есть');
        break;
      case 'theme' in localStorage:
        console.log('тема есть');
        break;
      case !('theme' in localStorage):
        console.log('темы нет. загрузка дефолтной темы');
        // no break
    }


    P. S.
    Хотя я даже не уверен, что вы понимаете что делаете и зачем вам switch (вы понимаете как он работает?).
    Ответ написан
    1 комментарий
  • Почему не получается сравнить отрицание в switch?

    @Asokr
    Так как вы хотите сделать не получится если отсутствует break, проверка не выполняется - отрабатывают все инструкции после первого true.
    Ответ написан
    Комментировать
  • Как узнать, чем закодирована строка?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    console.log(atob('aCNVNGI4Tk9WSU5LSU1mbnYvRA=='));
    // "h#U4b8NOVINKIMfnv/D"
    
    console.log(atob('aCNVNGI4cGljb2RpY29tMjBNZm52L0Q='));
    /// "h#U4b8picodicom20Mfnv/D"
    Ответ написан
    Комментировать
  • Как ограничить количество одновременно исполняемых Promise?

    @GrayHorse
    Это называется семафором (Semaphore).
    class Semaphore {
        constructor(max = 1) {
            if (max < 1) { max = 1; }
            this.max = max;
            this.count = 0;
            this.queue = [];
        }
        acquire() {
            let promise;
            if (this.count < this.max) {
                promise = Promise.resolve();
            } else {
                promise = new Promise(resolve => {
                    this.queue.push(resolve);
                });
            }
            this.count++;
            return promise;
        }
        release() {
            if (this.queue.length > 0) {
                const resolve = this.queue.shift();
                resolve();
            }
            this.count--;
        }
    }


    const semaphore = new Semaphore(10);
    for (const url of urls) {
        await semaphore.acquire();
        void downloadUrlSynchronized(url, semaphore);    
    }
    
    async function downloadUrlSynchronized(url, semaphore) {
        const resp = await fetch(url);
        const blob = await resp.blob();
        semaphore.release();
        // const name = new URL(url).pathname.slice(1);
        // downloadBlob(blob, name, url);
    }

    Загрузка (fetch) будет не больше 10 в один момент, что собственно и требовалось.

    ---
    На примере 3:
    61ee50a555b4a690601785.png
    Ответ написан
  • Чем плох md5(md5($pass)) для пароля?

    @galaxy
    1. Нет соли
    2. Слишком быстрый
    Ответ написан
    Комментировать
  • Чем плох md5(md5($pass)) для пароля?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Иногда смотришь на вопрос и не понимаешь, о чем он.
    Судя по вопросу и цифрам в нем, автор и так уже осведомлен о правильных способах хэширования и должен уже знать ответ на свой вопрос.

    Ну если до сих пор не ясно, то цифры здесь приведены для цпу общего назначения, а не для железа, предназначеного для вычисления хэшей. На котором ситуация для мд5 будет совсем плачевная.

    Возможно, непонимание происходит оттого, что существует не один, а несколько векторов атаки на пароль.
    1. Поиск хэша по "радужным таблицам" (rainbow tables): огромным базам данных, где собираются заранее посчитанные хэши для любых возможных строк.
    2. Метод грубой силы (bruteforce): перебирать все комбинации символов и применять к ним хэширующую функцию до тех пор, пока она не вернёт искомый хэш.
    3. Поиск по словарю. Похож на брутфорс, но перебор не всех возможных значений, а всего нескольких тысяч самых популярных паролей, типа "123", "password" и пр.
    phpfaq.ru/tech/hashing

    И только одного элемента недостаточно, а нужны все в комплексе:
    - Хэширующая функция должна иметь большую вычислительную сложность, чтобы усложнить подбор перебором. по этой причине md5() не подходит
    - Хэш должен быть посолен уникальной солью, чтобы нельзя было, затратив 1 раз кучу вычислительных усилий, заранее построить хэши для любых комбинаций символов. По этой причине фарш без соли - деньги на ветер.
    - Пароль не должен быть слишком простым, иначе даже медленный перебор его раскроет. Этот момент тоже надо учитывать
    Ответ написан
    Комментировать
  • Как найти два или больше максимальных значения?

    ForestAndGarden
    @ForestAndGarden
    Совершенствовать среду обитания
    Допустим, в диапазоне A2:A11 у вас числа от нуля до девяти.

    Формула =ArrayFormula(LARGE(A2:A11;{1;2;3}))выведет в столбец три наибольших значения:
    9
    8
    7

    Для вывода в одной ячейке через запятую: =ArrayFormula(JOIN(", ";LARGE(A2:A11;{1;2;3})))
    Ответ написан
    Комментировать
  • Обязательно ли читать книгу по языку/технологии что бы быть тру и продвинутым кодером?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вы не найдёте ни одного авторитетного программиста с мировой известностью, который бы утверждал, что курсы и видео-уроки лучше книг. Обычно это утверждают либо профаны, оправдывающие своё нежелание читать, либо авторы курсов, делающие деньги на лентяях и глупцах. И я лично за 18 лет в отрасли встретил множество программистов, но ни одного хорошего, выучившегося по курсам и видео-урокам.

    Видеокурс может запилить любой дурак. Чтобы написать книгу, нужно иметь авторитет достаточный для издательства. Кроме того, текст пройдёт редактуру нескольких профессионалов. Поэтому знания в книгах качественные и систематизированные. Для начинающего это очень важные качества.

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

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

    Кроме того, чтение развивает абстрактное мышление - основной инструмент разработчика.
    Ответ написан
    16 комментариев
  • Недостатки видеоуроков?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Потому что чтобы учиться программировать, надо писать код. А просмотр видео это не написание кода, поэтому оно малополезно.
    Ответ написан
    Комментировать
  • Кто подскажет менеджер задач?

    @pfg21
    ex-турист
    process explorer by mark russinovich ??
    Ответ написан
    Комментировать
  • Кто подскажет менеджер задач?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Process Explorer от SysInternals
    https://docs.microsoft.com/en-us/sysinternals/down...
    Ответ написан
    Комментировать
  • Что будет если объявить двум элементам один id?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    <img data-id="uuid" />
    <p data-id="uuid" >text</p>

    querySelectorAll('[data-id="uuid" ]');

    можно ли объявить двум элементам один id

    Можно, но в приличном обществе могут ударить по лицу за такое.
    Ответ написан
    3 комментария
  • Почему setTimeout не работает?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    setTimeout(() => slideshow(j++, i++), 5e4);
    первым аргументом должна быть функция, которая выполнится через время.

    А у вас был результат мгновенного выполнения функции.
    Ответ написан
    Комментировать
  • Как вставить функцию в формулу?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Возможно,

    =ROW(A2)

    Или что-то вроде

    =INDIRECT("A" & ROW())
    Ответ написан
    6 комментариев
  • Почему одни экземпляры создаём через new, а другие литерально?

    profesor08
    @profesor08 Куратор тега JavaScript
    Number(123) === 123 // true
    new Number(123) === 123 // false
    Number(123) === new Number(123) // false


    Изучай в консоли результаты выполнения. Есть примитивы, есть конструкторы примитивов. Это разные вещи.

    Почему? А вот так. Запомнить, принять.
    Ответ написан
    Комментировать
  • Почему одни экземпляры создаём через new, а другие литерально?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    console.log(new Number(1) + new Number(2)); // выводится 3 и typeof полученного значения number
    То есть всё в порядке, это то же самое, как если бы мы сделали:
    console.log(1 + 2);

    Число - это Primitive. У примитивов есть эквивалентные объектные аналоги (кроме null и undefined). Поэтому да, это "то же самое" в каком-то смысле (у примитива нет методов, в отличии от эквивалентного объекта, они не могут быть изменены, и.т.д., но в таких простых расчетах мы не обращаем на это внимания). А штуки вроде упомянутых промисов, дат и что там еще бывает - это будут уже не примитивные типы данных, там такой двойственности уже нет.

    В остальном - там есть немного синтаксического сахара, связанного с функциями и объектами. Например Object может быть создан разными способами, хотя фактически они приводят к одному результату, а не как у примитивов и их объектных оберток-аналогов.
    Ответ написан
    Комментировать
  • Как запустить сайд-проект при основной работе?

    @majstar_Zubr
    C++, C#, gamedev
    Есть два процесса, которые могут работать в качестве топлива для процесса разработки сайд проекта, и вы о них знаете:

    1) процесс дискретного финансирования со стороны инвесторов. Логика следующая: если сайд проект нужен миру, то это значит, что с помощью сайд проекта можно заработать, а один из вариантов - купить долю в момент первой нарезки пирога.

    2) процесс замены исполнителей. Логика следующая: если у вас получается хорошо мотивировать, и какое-то время поддерживать огонь в глазах, то нужно всего-то вовремя отрывать связи с текущими исполнителями, и постоянно находить новых. Конечно, у такого есть свои минусы, и даже есть угроза судебных тяжб

    3) можно пойти и на компромисс: и инвестиции получать, и обманывать и исполнителей. Но этот вариант требует периодически менять страну пребывания, хотя если делать все аккуратно, то стран хватит до конца жизни.

    4) можно переехать в страну из доступных вам с самым большим уровнем жизни, а команду набирать в стране с низким уровнем жизни. При этом вы будете больше менеджерить и находить клиентов будет проще.

    5) можно продолжать схему, по которой вы уже что-то делаете. Наверное, просто стоит научится извлекать ошибки из прошлого опыта. Если такой сложный MVP, что у вас успевает core team распасться, может быть у вас не MVP вовсе? На энтузиазме больше двух недель работать могут только два друга, которые решили стать "духовными братьями", все остальное нужно чем-то питать.

    P.S. книг про мотивацию и менеджементъ персонала много, и все они написаны коучами, которые пишут книги для тех, кто приведет того, кто найдет автора-коуча для тренингов. Чтобы узнать про особенности разработки в командах без финансирования, вы можете взять интервью у мододелов, или самим поучаствовать, чтобы повстречать самых странных представителей человечества. В некоторых случаях оказывается, что вообще сам процесс важнее релиза, если бы можно было бы делать мод 20 лет, то его будут делать 30 лет.
    Ответ написан
    Комментировать