• Откуда берутся сотые доли при умножении на дробное число?

    Stalker_RED
    @Stalker_RED
    Такое не только в js, но и в подавляющем большинстве других языков (см. https://0.30000000000000004.com )

    Потому что процессоры не могут представлять дробные числа с бесконечной точностью. Про это есть стандарт IEEE 754, и это в принципе нормально (или просто все давно привыкли). Можно повышать точность вычислений, но тогда они будут длиться дольше, и можно округлять результаты.
    Ответ написан
    Комментировать
  • Кому реально нужны правила по использованию cookie на сайте?

    sim3x
    @sim3x
    Сайты отдают вашу информацию третьим лицам, хранят и обрабатывают для своих целей, продают и тд и тп
    Сайты знают о вас больше чем ваши самые близкие родственники

    Деньги в данном секторе крутятся нормальные

    Ето основа контекстной рекламы

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

    ИТ решение - не истерить, а обновить правила на блокировщике рекламы, использовать решения для "чтения"
    Ответ написан
    2 комментария
  • Кому реально нужны правила по использованию cookie на сайте?

    Kozack
    @Kozack
    Thinking about a11y
    Большинство сайтов используют cookie, так сказать косвенно. Вот на пример, вы ведёте свой личный блог. В нем нет никаких форм, комментариев, ничего. Пользователи просто зашли, почитали и ушли. Ваш сайт не использует cookie. Но стоит вам поставить аналитику — и уже аналитика будет добавлять для каждого посетителя cookie.

    Дело в том, что с их помощью вы можете отслеживать любую активность человека. Откуда он пришел, что смотрел, что делал. Об этом и стоит информировать пользователя. Поведение пользователя в интернете — это его личная, приватная информация. И вы обязаны его информировать о том, какие данные вы о нем собираете, и что вы с ними делаете.

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

    UPD
    Недавно законы в этом отношении несколько ужесточились. Большие мешающие просмотру плашки с вопросом "А можно мы будем использовать cookie?" это на самом деле не такая серёзная проблема. Куда серёзнее:
    1. Сайт не предлагает вам вариант НЕ разрешать слежение за собой. Он просто информирует. "Ты уже тут, и я уже всё о тебе знаю"
    2. Сайт предлагает вариант "Не следить" но лишь формально. Не зависимо от вашего выбора, cookie всё равно будут собираться и обрабатываться.
    3. При выборе варианта "Не следить" вас попросу не пускают на сайт. Потому что дешевле заблокировать вам просмотр, чем переделать сайт таким образом, чтобы он корректно работал без cookie.
    Ответ написан
    8 комментариев
  • Как в классе навешивать и удалять EventListner'ы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вам следует осознать, что

    this.onWheel.bind(this) !== this.onWheel.bind(this) // true

    Сохраняйте куда-нибудь созданный обработчик при добавлении, и при удалении передавайте в removeEventListener его, а не новую функцию.
    Ответ написан
    5 комментариев
  • Html good practices - 2 пробела, или 4?

    iamd503
    @iamd503
    Верстальщик
    Можно использовать автоформатирование и не париться. Делайте как вам удобней
    Ответ написан
    3 комментария
  • Отклики - это что?

    @artem78
    Все вопросы к заказчику. Мы-то почём знаем, что у него на уме?
    Ответ написан
    Комментировать
  • Объясните что такое полиморфизм простыми словами ?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Да ладно, парни. Ну хватит уже, к чему такие сложности? Берём и читаем. Вообще совсем не обязательно читать про архитектуру и абстракции именно по своему языку, хотя javascript в этом плане родился уродом.

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

    Собственно, представим себе рядом стакан, кружку, чайник, кофемашину, велосипед и скейт. Что между ними всеми общего? Ну как минимум то, что они есть. То есть это - объекты, которые были созданы. Но как они были созданы? Скорее всего на заводе производителя по чертежам. Ок, чертежём назовём конструктор. Ну а класс? А что это такое? А его нет в нашей вселенной - эта сущность есть абстракция, что живёт лишь в наших мыслях. В реальном мире её нет и никогда не будет, такова уж физика - ей по барабану, что птицы и млекопитающие имеют дальних родственников - она лишь обеспечивает возможность естесственного отбора. А уж родственников друг другу находим мы, люди.

    С объектами и классами разобрались, а что же там с нашими стаканами и велосипедами. Мы уже поняли, что всё это объект, то есть грубо можно все объекты наследовать от какого-нибудь суперпредка, суперкласса, что и реализовано в некоторых языках. Но что другого общего между скейтом и стаканом, например? Конечно, можно углубляться и считать, что они все из молекул, и они все из твёрдых веществ. Однако это всё бред и СПГС, так что ответ прост - да ничего. То есть это совершенно разные объекты с совершенно разным функционалом. Более того - естесственно компьютерные модели и иерархии будут сильно отличатся от физик и химий. И это нормально, вопрос об адекватностях моделей ставиться лишь когда модель неадекватна, а до тех пор пилить можно что угодно, лишь бы работало.

    Вот. У нас есть супер-предок Object, от которого дефолтно наследуются все объекты. Допустим, то что объекты состоят из атомов и есть то, что наследуют все объекты. Но все дополнения и правки - полиморфизм. Так, из атомов мы слепили колёса и приделали на доску - ок, это скейт. На него можно встать и катиться, а сильно извернувшись и полетать в трёх метрах над землёй, прямо таки излучая своё яркое эго. В то время как стакан - это мы слепили из атомов плотную ёмкость, из которой вода не выливается под действием силы тяжести. И прямое применение стакана - налив воды опрокинуть его над ртом, чтобы вода вытекла прямо в желудок. Так делают настоящие пацаны, не заботясь об икоте или страхе утонуть, так что вот - полиморфизм.

    Однако что с остальным? У нас ещё абстракция, инкапсуляция и наследование. Ок, начнём с наследования, так оно наиболее близко. Вот что у нас общего между стаканом и кружкой? Ну в оба можно налить воду, но у кружки есть ручка чтобы держаться. То есть можно придумать некий общий класс - ёмкость. Однако что это за класс? Можно например за этот класс взять стакан, тогда все ёмкости по дефолту стаканы, а всё остальное - видоизменённые стаканы. Но кому-то больше нравяться кувшины, например некоторые чики насят их на голове, считая что это удобно. Ну и пусть носят, но как-то же решить надо, что главнее и идеальнее. Так вот - недостяжимый идеал и есть главный - это называется абстрактный класс. То есть ёмкость, что невозможно создать, для которого нет полного чертежа. А все чертежи, что дополнили до полного - есть наследованные классы от класса ёмкость.

    Тут мы подошли к абстракции. Вот такое иерархическое наследование приводит нас к, возможно главной, идее ООП. Вот мы взяли и выделили всё, куда можно налить воду в отдельный класс, нарисовали общий чертёж, но специально не доделали его, оставив зазор для будущих творцов, и назвали чертёж - ёмкость. Тысячи лет изобретатили всех миров создают свои ёмкости, одна лучше другой. Для разных людей - по разному, конечно. Но каждый раз группировать молекулы стекла определённым образом - непростая задача. Поэтому ремесленники пошли на хитрость, они создали тайный совет ремесленников мира и решили делиться друг с другом своими наработками. То есть создавать мелкие чертежи и объявлять классом, например, извлистой ручки в форме ленты Мёбиуса, например. Возможно такая ручка удобно только инопланетным существам, но чертёж создан и к нему можно ссылаться при создании своего чертежа. Таким образом мы абстрагируемся от низкоуровневой задачи "формирования ёмкостей посредством перемещения молекул" к "конструированию ёмкости посредством совмещения деталей, элементов". Это и есть абстракция.

    Но мы подошли к последнему пункту - инкапсуляция. Она неразрывна с абстракцией, и по сути благодаря ей она и работает. Инкапсуляция - это своеборазный клей (или синяя изолента), которым склеивают разные чертежи в один. То есть совмещение деталей для создания своей - это и есть инкапсуляция. Причём при совмещении мы можем не описывать детали этого совмещения (то есть члены класса могут быть приватными), таким образом помогая абстрагироваться тем, кто этот чертёж использует. Вот посмотрим на чайник - что это такое? Это стакан (или кружка) к которому снизу (а может внутри по середине?) приклеен нагревательный элемент. Пустив по нему ток, согласно инкапсулированному в нагревательный элемент закону Ома, будет выделяться тепло и нагреваться вода. А кофемашина? Это куда более сложное устройство, с множеством насосов, ёмкостей, шлюзов, измельчителей и чайников. И всё склееное клеем. А может синей изолентой. Это снова инкапсуляция.

    Таким образом, абстракция невозможна без инкапсуляции и наследовании, как невозможен полиморфизм без, собственно, наследования. Ну а полиморфизм невозможен ещё и без инкапсуляции, которая банально бесполезна без наследования и полиморфизма. Вот такие тут треугольники с пирогами. Жаль только про пирог наврали. И про день рожденье.
    Ответ написан
    3 комментария
  • Как выполнять различные действия в зависимости от содержимого массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    if ( typeof arr[i] === 'number' ) {
     		x*= arr[i];

    А что если arr[i + 1] окажется строкой? Сначала надо проверить всё, а уже потом вычислять (если потребуется) объединённое значение:

    function bullshit(arr) {
      if (arr.every(n => typeof n === 'number')) {
        return arr.reduce((acc, n) => acc * n, 1);
      }
    
      if (arr.every(n => typeof n === 'string')) {
        return arr.join('');
      }
    
      return null;
    }
    
    
    bullshit([ 1, 2, 3 ]) // 6
    bullshit([ 'a', 'b', 'c' ]) // 'abc'
    bullshit([ 1, '!' ]) // null

    или

    function bullshit(arr) {
      const count = arr.reduce((acc, n) => {
        const type = typeof n;
        acc[type] = (acc[type] || 0) + 1;
        return acc;
      }, {});
    
      switch (arr.length) {
        case count.number: return arr.reduce((acc, n) => acc * n, 1);
        case count.string: return arr.join('');
        default: return null;
      }
    }
    Ответ написан
    1 комментарий
  • Что почитать/посмотреть по тестированию кода (JS)?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Сначала легко запутаться. Мне помогло следующее:
    1) есть тест-раннеры (то есть утилиты, которые запускают тесты, в вашем вопросе это mocha) и библиотеки "ассеротов" - это что-то типа "утверждений", которые вы в тестах будете использовать.
    2) все unit тесты, это не что иное как тестирование какой-то функции на то, что она выдаст заранее описаный (вами!) результат. Образно: есть функция sum(a,b), вы пишите какой-то такой код:
    import { sum } from './my-functions'
    ожидаю, что sum(1,3) === 4


    если добавить какую-нибудь псевдо-библиотеку ассертов, будет примерно так:
    import { sum } from './my-functions'
    import { should } from 'another-assert-library' // should в переводе "быть/являться" 
    ожидаю, что sum(1,3).should.be.eql(4) // ожидаю что sum(1,3) будет равно 4


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

    Не остался в стороне и learn.javascript.ru с его разделом про тесты
    Ответ написан
    Комментировать
  • Что это за черная магия?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Давным давно (года 2-3 назад) заварилась тема рисования с помощью CSS. Я тогда даже небольшую заметку на хабр писал по этому поводу. В те времена мы делали простые картинки вроде таких:

    Это было интересно и познавательно. С одной стороны это челлендж, с другой - способ самообразования. На тот момент картинки были не очень сложными для понимания и тема людям понравилась. Время шло, народ постепенно изучал основы CSS (правда как всегда не у нас, у нас это дело в основном критиковали со словами "фигней маятесь, зачем это нужно" или "ну я же фронтенд-сеньер-реакт-помидор-разработчик, зачем мне нужно знать CSS"), но так или иначе картинки становились все более интересными, появлялись новые квесты и на данный момент можно сказать, что это своеобразный вид искусства с практически полезной составляющей. Понятное дело, что в продакшен такие картинки делать долго - проще взять SVG, но для обучения они хорошо подходят. Магии там нет.
    Ответ написан
    1 комментарий
  • Как быстро пересесть на vue.js с angular?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Приноровился к angular 2+

    Если это правда, то чтения официальной документации вам будет более чем достаточно. Понимание начнёт приходить вот прям сразу.
    Ответ написан
    Комментировать
  • Допустимо ли на хабре делать статьи в стиле "кое-что о ...", а не "всё, что нужно знать о ..."?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Имхо, зависит от того, насколько сложно было это узнать, и насколько вы потенциально облегчите кому-то жизнь, написав эту статью.

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

    В своём случае решайте сами. Ну или сообщество потом решит:)
    Ответ написан
    Комментировать
  • Оценить приложение?

    search
    @search
    мама говорит что я особенный
    Вот классный проект, который задаёт планку программирования на ангуляре https://angular-checklist.io/default/checklist/arc...

    Можете пробежаться по всем пунктам и сравнить с тем что есть сейчас.

    Как верно заметил Дмитрий Лузанов, сразу бросается в глаза непонимание принципов работы RxJS. Вот видео, которое помогло мне разобраться в этом деле: https://www.youtube.com/watch?v=3LKMwkuK0ZE . Там старая версия RxJS, но принципы не поменялись.

    От себя добавлю, что хранить состояние системы в переменных сервисов (это я про items у ItemService) - это грабли. Не наступать на эти грабли поможет понимание RxJS (сорри, уже надоел, наверное, но в ангуляре без него никуда). И/или подключение NgRx.
    Ответ написан
    Комментировать
  • Что умеет выдающийся Frontend разработчик?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    linux

    Ну, это и фрондендеру нужно часто знать.
    ЯП

    Я сомневаюсь, что он сейчас сильно проще питона или php, JS очень довольно быстро развивается. А если взять в расчет TypeScript, то тем более.
    В целом, если его очень хорошо протестировать, то разработчик уверен на 99.9%

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

    Ну вот просто вообще не правда. Я также могу сказать, что в бэке учить нечего, изучил язык, изучил laravel, а sql даже учить не надо, используй ORM. Справедливое высказывание?

    Теперь в общем. Во front-end много чего можно изучить
    1) Верстка. Хороший front-end'ер должен хорошо верстать, вопреки частому мнению, что этим должен заниматься верстальщик. А верстка это отдельная широкая тема.
    2) SVG, для многих интерактивных приложений, очень полезно использовать svg, а там куча своих особенностей, хаков и.т.д.
    3) Webgl - довольно сложная тема, не знаю, есть ли в бэке что-то аналогичное по сложности.
    4) Canvas - не просто знать, а уметь рисовать то, что желаешь.
    5) Фрейморки, а там тебе для каждого свое разветвление.
    6) Асинхронное программирование, которое для многих php-шников кажется непонятным.
    7) ООП, т.к. в JS завезли классы, да и TypeScript часто нужно использовать.
    8) Шаблоны проектирования - не только для бэкенда.
    9) Webpack+gulp - ну это было.

    Буду дополнять, если что-то еще в голову придет.
    Ответ написан
    6 комментариев
  • Как проверить, что значения уникальны?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const isAllUnique = (...args) => new Set(args).size === args.length;
    
    console.log(isAllUnique(69, 187, 666)); // true
    console.log(isAllUnique(2, 2, 3, 4)); // false
    console.log(isAllUnique(...'ABCDA')) // false
    Ответ написан
    2 комментария
  • Как получить цифру без буквы e?

    Stalker_RED
    @Stalker_RED
    Number.MAX_SAFE_INTEGER
    9007199254740991

    Ваше 712577413488402631964821329 намного больше, чем MAX_SAFE_INTEGER
    Следовательно, такие операции нельзя проводить "в лоб".

    Можно воспользоваться какой-нибудь библиотекой реализующей длинную арифметику.

    Ну или написть свою.
    Ответ написан
    1 комментарий
  • Перевод из окна браузера в отдельное окно. Как это сделать?

    Stalker_RED
    @Stalker_RED
    у вас на картинке ответ.
    в заголовке окна.
    электрон.
    Ответ написан
    2 комментария
  • Как выстроить архитектуру приложения?

    @grinat
    И нафига тебе рест на го для этого?) Исходя из тз, даже просто html файлов хватит. Гоу он для чего-то высоконагруженного, а не потому что модно, он с orm будет работать по скорости на уровне какого-нить пэхэпэ, потому что к примеру они все делают мэпинг, тянуть рэлейшены и т.п. через рефлекты, разные костыли . Вот если тебе надо выдрать из бд миллион записей и сотворить с ними страшные и жуткие вещи, то тут го раскроется.
    Ответ написан
    2 комментария