Задать вопрос
  • Юридические последствия бага на сайте?

    @rPman
    В российским законодательстве есть необходимость в умысле и понесенных убытках.
    Если нет умысла и тем более нет убытков, то по уму сложно будет что то сделать.

    Ок, если умысел еще можно притянуть за уши если доказать что разные аккаунты принадлежат атакующему, то с убытками не все так просто.

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

    Пользователи не должны нести ответственность за ошибки, которые допускает магазин... поставьте себя на место двух разных пользователей, которые случайно совершили покупку используя один скидочный купон (не обсуждаем сейчас вероятность этого события), почему они должны нести какое-либо наказание за это?

    p.s. помним, что цена на ценнике имеет приоритетное значение тому что ожидает магазин, в момент совершения покупки цена была озвучена? оплачена клиентом в полном размере? помним про то как человек купил телевизор по цене 0 (ошибка на сайте интернетмагазина, после которой все стали писать что цена на сайте не является офертой и т.п.)
    Ответ написан
    1 комментарий
  • Юридические последствия бага на сайте?

    В первую очередь, наличие ответственности зависит от того к юрисдикции какого государства относится покупка. В РФ такое деяние может быть квалифицировано по ст. 165 УК РФ (Причинение имущественного ущерба путем обмана или злоупотребления доверием) или ст. 159.6 УК РФ (Мошенничество в сфере компьютерной информации). А в другом государстве может не быть "подходящего" запрета и, соответственно, такое деяние вообще не будет квалифицировано как преступление.
    Ответ написан
    Комментировать
  • Vue.js / как создать и поддерживать клон dom элемента?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    В firefox есть такая нестандартная фича как -moz-element, которая идеально подходит под задачу:
    Увы, она никогда не станет стандартной, да и из ff её могут рано или поздно выпилить.

    В остальном, решения, собственно, два:
    1. Делать всю рабочую область на собственном canvas движке(можно попробовать что-то такое), и тогда просто получать копию холста на меньший canvas. Это более оптимально но требует переписывание всего и сложности основной работы.
    2. Держать два идентичных компонента делящих одно состояние(на пример через внешний Vue.observable\reactive или vuex), один из которых уменьшать с помощью transform: scale().

    html2canvas, предложенный выше, имеет очень ограниченную область применения и вряд ли тут сработает, но можете попробовать

    P.S. Есть ещё один вариант: на любое обновление(тут поймать обновление в зависимости от вашей архитектуры может быть либо очень просто, либо очень сложно) делать верхнему компоненту тупо this.$el.cloneNode(true) и класть полученную копию в нужное место с тем же transform: scale(), но это может весьма сильно тормозить в зависимости от количества элементов и частоты обновления.
    Ответ написан
    3 комментария
  • Есть ли возможность комфортно изучать js без интернета?

    fruworg
    @fruworg
    Да, возможно. Пару книг, статей и нужных инструментов (иде, бд и другие, которые вам нужны) вполне хватит. Но есть проблема - без интернета может просто не получится решить какую-нибудь проблему.
    Ответ написан
    Комментировать
  • Иконки в меню - стоит ли ставить?

    hint000
    @hint000
    у админа три руки
    В вертикальном меню иконки бывают уместны (не всегда, но бывают уместны).
    В горизонтальном меню иконки загромождают.
    Ответ написан
    Комментировать
  • Как стать бэкэнд разработчиком без высшего образования?

    xez
    @xez
    TL Junior Roo
    Работал я как-то в банке...
    Год работаю, второй, третий.
    Тут, неожиданно, приходит письмо из кадров с вопросом: предоставьте, мол, свой диплом об образовании. А у меня образования - только три класса церковно-приходской школы.
    Ну я в ответ и пишу: пока ещё вуз не окончил.
    Больше никто никогда об образовании меня не спрашивал.
    Ответ написан
    Комментировать
  • Как достать превью видео с youtube?

    @a22432
    Немного Web
    Большая картинка
    https://i.ytimg.com/vi/--------ID--------/maxresdefault.jpg

    Маленькая картинка
    https://i.ytimg.com/vi/--------ID--------/hqdefault.jpg
    Ответ написан
    2 комментария
  • Помнит ли, кто игру веб-приложение про IP пакеты в сети?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    CS4G Netsim by Erinn Atwater and Cecylia Bocovich

    Netsim is a simulator game intended to teach you the basics of how computer networks function, with an emphasis on security. You will learn how to perform attacks that real hackers use, and see how they work in our simulator!

    Оно? А то я из вашего описания впервые про такую штуку слышу.
    Ответ написан
    2 комментария
  • Какой программой пользовался Стивен Хокинг и почему ни одного релиза для общественности?


    Но не обнаружился ни одного релиза, который был бы доступен

    Плохо искал. В статье чётко сказано название, и по нему легко можно найти репозиторий на гитхабе:
    https://github.com/intel/acat
    Получается, Интел выполнил своё обещание, и как раз в 2015 году.
    мои дальнейшие рассуждения на актуальны.
    Оставил только чтобы опровергнуть ваши заблуждения.


    Почему не выложен релиз программы, тогда как в нем нуждаются множество людей

    1. Она делалась специально под Хокинга и являлась частью всего комплекса средств вокруг него.
    2. Возможно, в процессе разработки использовались какие-то компоненты, лицензия на которые не позволяет их распространять.
    3. Интел просто не выделяет ресурсы на то чтобы провалидировать это и опубликовать.
    Разработка такого софта не является профильной для интела, по тому, возможно, в разработке участвовали другие компании, и нужно получить от них разрешение на публикацию.
    По тому это может занять какое-то время, но никто не хочет, тк есть работа по важнее.

    Как мы знаем, программы постоянно совершенствуются

    Но не все и не всегда.
    Программы совершенствуются не сами по себе, а это делают люди.

    Рассматриваете ли вы такой вариант, что Хокинг был лишь куклой и от его имени говорил кто то другой?

    Теории заговора обсуждаются не тут.
    Но лично я такой вариант не рассматриваю.

    тогда как в нем нуждаются множество людей

    Интел тут ничего нового не разработал, и есть несколько других компаний, которые делают что-то аналогичное. Даже в РФ.
    Но название не вспомню
    Ответ написан
    5 комментариев
  • Как сверстать подобное?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    тут по сути тебе 2 плагина найти:
    1) соединительные линии по типу https://github.com/anseki/leader-line
    2) и плагин для перетаскивания по типу https://interactjs.io/
    Ответ написан
    1 комментарий
  • Popperjs как добавить задержку для show и hide?

    profesor08
    @profesor08 Куратор тега JavaScript
    Не надо себя мучать и извращаться, не используй js компоненты из бутстрапа, они убогие, а апи еще более убогое.

    Для тултипов можешь использовать Tippy.js, работает нормально и пользоваться можно нормально.
    Ответ написан
    1 комментарий
  • Как дабавить список ссылок видио на сайт?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    const links = [];
    const html = links.reduce((html, link) => html + `<a href="${link}">${link}</a><br>`, '');
    document.getElementById('links').innerHTML = html;
    Ответ написан
  • Как быстро и надежно закрывать задачи по сайту не нанимая программиста?

    nowm
    @nowm
    Могу ответить с точки зрения фрилансера:

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

    Вот несколько советов, которые помогут улучшить «возвращаемость» фрилансеров:
    • Чаще всего фрилансер готов делать работу сразу (особенно когда работает с вами первый раз), он показывает рвение и очень быстро всё делает. С вашей стороны ожидается, что вы можете оплатить работу мгновенно после того, как всё сделано и проверено как фрилансером так и вами. Если вы скажете фрилансеру, что вам нужно некоторое время, чтобы дойти до банкомата и пополнить счёт, потому что прямо сейчас не можете заплатить, это очень сильно испортит впечатление, и с большой вероятностью человек не покажет виду, спокойно без психов подождёт, когда вы ему заплатите, но в следующий раз работать с вами больше не будет. Фрилансер готов работать сразу, значит и вы должны быть готовы платить сразу.
    • Если у вас низкая техническая подготовка, и фрилансеру приходится кроме самого кода очень много общаться с вами на тему, что именно нужно делать, желание работать дальше тоже пропадает. Чем меньше требуется обсуждений и созвонов в мессенджере, тем больше веротность, что фрилансер и дальше будет с вами работать. Фрилансеры обычно не считают переписку частью оплачиваемой работы и, соответственно, чем больше времени будет занимать переписка, тем меньше будет желание продолжать работу. Фрилансер обычно хочет сразу делать работу и не отвлекаться на всякую бесплатную болтологию.
    • Если фрилансеру нужно заниматься в дополнение администрированием вашего сервера, а это заранее не обговаривалось, это тоже может испортить впечатление. Часто заказчики пишут, что им нужно поправить менюшку на сайте, а это в итоге превращается в правку менюшки, а потом залитие кода на сайт, настройка и перезапуск сервера и ещё какие-то подобные работы, которых в задании не было вообще. И, скорее всего, вы считаете само собой разумеющимся, что фрилансер должен уметь это делать, и думаете, что это нормальная практика, если он в дополнение к кодингу будет делать ещё и это. Дополнительно, если эти моменты ещё и не оплачиваются, шансы, что люди захотят с вами работать и дальше, снижаются ещё сильнее.
    • Некоторые заказчики любят показывать свой авторитет. Запомните, что для фрилансера вы не начальник, а равноправный партнёр, и он ждёт от вас соответствующего уровня общения. Если вы строите из себя начальника, люди будут придумывать любые отмазки, но повторно работать не станут.


    Вот это основные факторы, которые влияют на то, что вам ответит фрилансер, если вам понадобится помощь в следующий раз, и вы решите, что можно обратиться к тому, с кем раньше работали.
    Ответ написан
    8 комментариев
  • Как сложить числа c пробелами jquery?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Правильный подход - отделять мух от котлет.
    Числа надо держать в отдельном data-атрибуте, а не парсить их каждый раз из текста.
    Ответ написан
    1 комментарий
  • Как поменять вывод списков?

    Stalker_RED
    @Stalker_RED
    Ответ написан
    Комментировать
  • Как посчитать количество элементов массива, имеющих определённое свойство?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Конечно, можно прямо посчитать количество интересующих нас элементов:

    const countWithKey = (arr, key) => arr.filter(n => key in n).length;
    
    console.log(countWithKey(arr, 'ключ'));

    Но можно решить задачу и в более общем виде.

    Например, просуммировав данные. Функция суммирования кроме данных получает также функцию, которая из отдельного элемента данных извлекает слагаемое, в данном случае - факт наличия нужного свойства:

    const sum = (data, val = n => n) =>
      Array.prototype.reduce.call(
        data,
        (acc, n) => acc + val(n),
        0
      );
    
    console.log(sum(arr, obj => obj.hasOwnProperty('ключ')));

    Кстати, что даёт более общий вид.
    Считать можно разные суммы. Как, например, обычных массивов из чисел (sum([ 1, 2, 3 ]) // 6), так и более сложные варианты. Например, есть массив, представляющий содержимое корзины с товарами (цена, количество), надо посчитать общую стоимость:

    const cart = [
      { price: 100, count: 5 },
      { price:  10, count: 6 },
      { price:   1, count: 7 },
    ];
    
    const total = sum(cart, item => item.price * item.count); // 567

    Или, считаем количество лайков за ответы на этот вопрос (можете открыть консоль и прямо там выполнить этот код):

    const likes = sum(document.querySelectorAll('.btn_like .btn__counter'), n => +n.innerText);


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

    function Counter(data, key = n => n) {
      const counted = new Map;
    
      for (const n of data) {
        const k = key(n);
        counted.set(k, (counted.get(k) ?? 0) + 1);
      }
    
      return k => counted.get(k) ?? 0;
    }
    
    const keyExists = Counter(arr, obj => Object.hasOwn(obj, 'ключ'));
    console.log(keyExists(true)); // смотрим, у скольких элементов массива ключ есть
    console.log(keyExists(false)); // и у скольких нет

    Аналогично суммированию, есть разные варианты применения.

    const str = 'hello, world!!';
    
    const chars = Counter(str);
    console.log(chars('h')); // 1
    console.log(chars('!')); // 2
    console.log(chars('x')); // 0

    const persons = [
      { name: 'Вася', birthday: new Date('1999-05-22') },
      { name: 'Маша', birthday: new Date('2004-03-06') },
      { name: 'Катя', birthday: new Date('1976-05-15') },
      { name: 'Петя', birthday: new Date('1987-04-18') },
      { name: 'Коля', birthday: new Date('2000-01-01') },
      { name: 'Дима', birthday: new Date('2003-05-09') },
      { name: 'Миша', birthday: new Date('1996-02-29') },
      { name: 'Таня', birthday: new Date('1981-03-12') },
      { name: 'Олег', birthday: new Date('1992-08-24') },
    ];
    
    const birthMonths = Counter(
      persons,
      ({ birthday }) => birthday.toLocaleString('ru-RU', { month: 'long' })
    );
    console.log(birthMonths('май')); // в мае родилось три человека
    console.log(birthMonths('март')); // в марте два
    console.log(birthMonths('октябрь')); // а в октябре никто

    function* naturalNumbers(n) {
      for (let i = 1; i <= n; i++) {
        yield i;
      }
    }
    
    const numLengths = Counter(naturalNumbers(100), num => `${num}`.length);
    console.log(numLengths(2)); // среди первых ста натуральных чисел - девяносто двухзначных
    console.log(numLengths(3)); // и одно трёхзначное
    console.log(numLengths(0)); // число из нуля знаков? - конечно же нет таких

    Ответ написан
    1 комментарий
  • В чем суть такой записи в reset.css?

    nowm
    @nowm
    Это специфичное для blockquote определение, которое Eric Meyer (автор reset.css) позаимствовал у Paul Chaplin. Первая строка content: "" делает так, чтобы у blockquote исчезли кавычки — на случай, если вторая строка content: none не поддерживается браузером, потому что первая строка — это CSS 2, а вторая — это CSS 2.1. В одну строку их записать нельзя, потому что по стандарту для свойства «content» нельзя комбинировать ключевые слова «normal» и «none» с другими значениями.

    Вообще, когда встречается перечисление одного и того же свойства с разными значениями, это делается для того, чтобы обеспечить совместимость с разными браузерами. То есть, если, например, браузер не поддерживает «content: none», он применит «content: ""», а другую запись проигнорирует.

    Обычно дублирующие записи располагаются в определённом порядке. Первой записью идёт самый плохой вариант, который должен сработать везде. Затем идёт вариант, который более полно описывает вашу цель. Пример:

    .some-class {
        background: #e66465;
        background: linear-gradient(#e66465, #9198e5);
    }


    В этом коде, если браузер поддерживает градиентный фон, он сначала прочитает, что нужно использовать цвет «#e66465», а потом это перезапишется записью «linear-gradient», и итоговое значение будет «linear-gradient(#e66465, #9198e5);». Если же браузер не поддерживает градиент, он сначала прочитает, что нужно использовать «#e66465», а потом увидит неподдерживаемое определение «linear-gradient», проигнорирует его, и итоговое значение будет «#e66465».
    Ответ написан
    Комментировать
  • Как встроить на сайт сложную 3d анимацию?

    profesor08
    @profesor08
    Пример с анимацией по наведению курсора. Минусом будет тут то, что картинки надо объединить в одну длинную картинку, где все кадры следуют друг за другом по порядку. Онлайн сервисы по объединению картинок в спрайт есть.

    Ответ написан
    Комментировать