• Характеристика микроконтроллера. Что означает 32-разрядный? А если сказать 32-битный, это одно и тоже?

    15432
    @15432
    Системный программист ^_^
    Что означает 32 — разрядный
    Что микроконтроллер в своих машинных кодах может оперировать с 32-битными значениями. Размер регистров у него 32 бит.

    А если сказать 32 битный, это не одно ли и тоже?
    Да, одно и то же. 32 бита данных в один регистр помещается. 32 разряда в регистре.

    Память: 520 КБ памяти SRAM
    Внутри микроконтроллера встроена оперативная память типа SRAM объёмом 520 КБ

    Wi-Fi: 802.11 b / g / N, Bluetooth: v4.2 BR/EDR and BLE
    В чипе есть встроенный аппаратный модуль WiFi / BT, не нужно ничего дополнительного подключать для обеспечения беспроводной связи

    12-разрядный АЦП до 18 каналов
    Контроллер умеет измерять напряжение на своих 18 выводах с точностью до 12 бит, тем самым преобразуя аналоговый сигнал в цифровой

    2 × 8 бит ЦАПа
    Контроллер умеет формировать напряжение на двух своих выводах с точностью до 8 бит, тем самым создавая аналоговый сигнал
    Ответ написан
    25 комментариев
  • Что такое литерал объекта?

    Seasle
    @Seasle Куратор тега JavaScript
    Это вот это.
    {} // литерал объекта
    [] // литерал массива
    '' // литерал строки
    "" // тоже литерал строки
    `` // ещё один литерал строки
    /./ // литерал регулярного выражения (конкретно для примера - любого символа)
    Ответ написан
    Комментировать
  • Указатель на функцию или атрибут weak?

    @res2001
    Developer, ex-admin
    Указатель на функцию:
    плюсы: явный механизм (требует явных действий пользователя - вызова функции регистрации нового callback), понятней и проще (реализован стандартными средствами языка), универсальней (будет работать на всех платформах и компиляторах), для подключения пользовательского функционала не требуется пересборка библиотеки.
    минусы: динамическое связывание - если функция будет активно вызываться, то это может привести к дополнительным накладным расходам.

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

    Условная компиляция:
    плюсы: статическое связывание (отсутствие накладных расходов на вызов), универсальность, явный механизм
    минусы: возможно немного сложней в реализации, чем weak, для подключения пользовательского функционала требуется пересборка библиотеки

    Выводы:
    Если требуется статическое связывание, то выбор - условная компиляция. При грамотной реализации тут можно минимизировать действия пользователя по подключению своей реализации функции в сборку библиотеки. Если библиотеку не планируется выпускать в открытый доступ и не смущает не стандартность - можно использовать weak из-за простоты реализации.
    В остальных случаях - указатель на функцию.
    Ответ написан
    Комментировать
  • Как указать что аргумент функции - это значение из массива?

    Kozack
    @Kozack
    Thinking about a11y
    const arr = ['name', 'age', 'surname'] as const;
    type arrKeys = typeof arr[number]
    
    const obj: {[k in arrKeys]?: any} = {}
    const prepareFn = (key: arrKeys) => { obj[key] };
    
    
    
    prepareFn('name')
    // @ts-expect-error
    prepareFn('name2')
    
    obj.name
    // @ts-expect-error
    obj.name2


    https://www.typescriptlang.org/play?#code/MYewdgzg...
    Ответ написан
    1 комментарий
  • Почему не работает v-for?

    @tema1302
    Помогло? Отметь решением!))
    Наверное потому, что вы не указали в теге script ровным счетом ничего, кроме подключенного vue.js? :))
    У вас банально нет экземпляра Vue))) Предлагаю вернуться к выводу "Hello World", там вы увидите, в чем ошибка.
    Ответ написан
    Комментировать
  • Как заставить функцию ждать выполнения события click?

    Обернуть в Promise и использовать async await как написал 0xD34F но есть одно но
    Для того чтобы это работало, функцию Func делают асинхронной async function Func() { а это значит что она не возвращает результат, она возвращает Promise, который вам тоже нужно обрабатывать асинхронно.
    Прежде чем лезть в асинхронщину, нужно понять что обратно оттуда вам не выбраться.

    Хорошенько подумайте прежде чем спрашивать "как подождать результат колбека?"
    https://habr.com/ru/company/mailru/blog/269465/
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    Ответ написан
    Комментировать
  • Не могу правильно сделать условие?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Слушать лучше событие не клавиатуры, а input — так не пропустите, например, вставку ctl+v

    Почему бы не заменять запятые точками?

    Наверное, допустим вообше лишь один знак: не может же быть числа 12.34.56? Тогда регулярка валидации примерно такая \d*[\.,]?\d+
    Ответ написан
  • Как сделать вывод очереди из чисел в обратном порядке через список?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Раз в обратном порядке выводить, то это не очередь, а стек получается.

    А дальше - просто добавляйте элементы в начало списка. Потом выводите весь список.
    Ответ написан
    Комментировать
  • Как сделать вывод очереди из чисел в обратном порядке через список?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Реализовать список.
    2. Реализовать очередь на списке.
    3. Выполнить задание.
    Ответ написан
    1 комментарий
  • Что предпочтительнее insertAdjacentHTML или создавать элементы через createElement?

    y0u
    @y0u Куратор тега JavaScript
    dev
    Всё зависит от ситуации. Предпочтительнее createElement, так как в момент создания сохранится ссылка на элемент для последующей работы с ним. Если работать с этим элементом не нужно, например если с сервера пришел ответ в виде html строки и нужно всего лишь отобразить результат без дополнительных действий, то createElement здесь не нужен.
    Ответ написан
    Комментировать
  • Как указать тип возвращаемого значения?

    Lynn
    @Lynn
    nginx, js, css
    function foo<K extends keyof State>(key: K, callback: (value: State[K]) => void) {
        // ...
    }


    https://www.typescriptlang.org/play?#code/JYOwLgpg...
    Ответ написан
    Комментировать
  • Как массив превратить в связный список?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Перебираем массив от конца к началу, на каждом шаге создаём копию текущего элемента, к которой будет добавлена ссылка на объект, полученный на предыдущем шаге.

    Коротко:

    const arrToSinglyLinkedList = (arr, nextKey = 'next') =>
      arr.reduceRight((acc, n) => ({ ...n, [nextKey]: acc }), null);

    Длинно:

    function arrToSinglyLinkedList(arr, nextKey = 'next') {
      let list = null;
    
      for (let i = arr.length; i--;) {
        const node = Object.assign({}, arr[i]);
        node[nextKey] = list;
        list = node;
      }
    
      return list;
    }

    Пользоваться этим, понятное дело, так:

    const list = arrToSinglyLinkedList(arr, 'child');
    Ответ написан
    1 комментарий
  • Как перехватывать все вызовы console.log?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const oldLog = console.log;
    
    console.log = function(...args) {
      // здесь можете что-нибудь сделать с переданными значениями
    
      oldLog(...args);
    };
    Ответ написан
    Комментировать
  • Что будет за использование чужих ассетов в проекте с открытым исходным кодом?

    zenwalker
    @zenwalker
    0xABADBABE
    Как я должна указывать права на эти самые ассеты и могу ли вообще их использовать?

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

    Репозиторий под открытой лицензией

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

    Какие последствия этого и можно ли как-то через упоминание автора избежать писем добра?

    Упоминание автора вы можете сделать только при условии, что он на это согласен: либо ввиде пункта в тексте лицензии (то есть там есть пункт а-ля «разрешено использовать при наличии ссылки на автора»), либо ввиде личного согласия автора о том, что он не будет иметь претензий к такой форме использования.

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

    P.S.: Не юрист.
    Ответ написан
    Комментировать
  • Как преобразовать имена свойств объекта из kebab-case в camelCase?

    0xD34F
    @0xD34F
    const toCamelCase = val =>
      val instanceof Array
        ? val.map(toCamelCase)
        : val instanceof Object
          ? Object.fromEntries(Object
              .entries(val)
              .map(n => [
                n[0].replace(/_+(.)/g, (m, g1) => g1.toUpperCase()),
                toCamelCase(n[1]),
              ])
            )
          : val;
    Ответ написан
    1 комментарий
  • В чем опасность регистрации/авторизации по номеру телефона?

    DevMan
    @DevMan
    обычно делается наоборот: сначала логин/пароль, затем уже код.
    иначе можно достаточно легко вас разорять на смс в никуда.

    архитектурно – это достаточно простая задача: пока не получили всех данных – ничего не делаем кроме показа формы.

    лично я терпеть не могу коды по смс, и считаю их антипаттерном: интернет может быть, а мобильной связи может не быть (у меня такое было не раз, и достаточно часто). лучше использовать другие способы otp.
    Ответ написан
    3 комментария
  • Что такое Доменный объект и Предметная область, простым языком?

    @deliro
    Предметная область — множество всех сущностей и их отношений в рамках контекста.

    Например:
    В рамках магазина это покупатели, продавцы, товары, цены, скидки, поставщики, процесс продажи, прихода на склад, возврата и т.п.
    В рамках дискорда это пользователи, серверы, комнаты, группы, права на доступ, процессы присоединения к серверу, входа в комнату, оплаты nitro, написания текстового сообщения и т.п.

    В целом, это всё, что понимает твой менеджер и ничего, что он не понимает. В предметную область не входит, например, то, где именно ты хранишь данные — в mysql, в файлах, получаешь и сохраняешь их по API или хранишь их в redis'е. Но входит абстрактная сущность "хранилище". Она же — интерфейс репозитория. Репозиторий — это паттерн, который скрывает реализацию конкретного хранилища и который оперирует объектами доменной модели — элементами предметной области, как будто они хранятся у тебя в оперативной памяти. Например, у репозитория могут быть методы
    users.getByID(1234), users.save(user), users.getByEmail("hello@world")
    и т.п. Реализация репозитория определяет, куда именно сохранится этот user или откуда он скачается. В одну таблицу или в несколько. Нормализованные ли будут данные лежать в РСУБД или денормализованные. Именно здесь можно реализовать запись в master, а чтение с реплик. Или энкодинг в msgpack и передачу его по API куда-то. Или по gRPC. Потому что предметная область не должна перегружаться деталями реализации хранилищ.

    Про доменную модель:
    Словарь (он же хэш, он же ассоциативный массив) — это не доменная модель (хотя в некоторых функциональных языках может быть). Объект ORM — это тоже не доменная модель, хотя много где пытается ей быть. Доменная модель не зависит от конкретных фреймворков, баз данных, оптимизаций этих баз и прочих навязанных технической составляющей сущностей. Чаще всего это обычный класс на языке, на котором пишется код (или struct в случае Golang).

    Недавний пример:
    У сущности есть теги по категориям:
    {"category1": ["foo", "bar"], "cat2": ["foo", "hello", "world"]}
    . Их так удобно представлять на уровне предметной области, об этой структуре я могу общаться с заказчиком. Но в монге они сохраняются в виде
    ['category1%%foo', 'category1%%bar', 'cat2%%foo', 'cat2%%hello', 'cat2world']
    , потому что так их легче индексировать и быстрее по ним искать. Но это скрыто в реализации репозитория, доменная область про это ничего не знает. Это даёт сразу много преимуществ:
    1. Это очень просто тестировать, без всяких моков. Вместо репозитория с монгой я делаю репозиторий, который хранит сущности в оперативе. Всё, тесты бизнес-логики не зависят от инфраструктуры. А репозиторий монги я тестирую отдельно, мокая запросы в саму монгу или даже не мокая
    2. Это облегчает понимание всего продукта. Мозг не пытается составить полную картину, когда запросы в БД перемешаны с логикой, тут же сплиты-джойны строк, какие-то ещё низкоуровневые действия. Мозгу легко ориентироваться в пределах уровня. На уровне репозитория я думаю о том, как сущности хранить и доставать из хранилища, на уровне служб я думаю о том, как сущности взаимодействую и какие их них нужно извлечь/сохранить, но не как
    3. Рефакторинг очень простой. Даже теоретическая смена БД. Завтра с монги нужно будет перенести одну сущность на постгрес — без проблем. Я напишу один новый репозиторий, не затронув ни строчки кода за его пределами, кроме места, где он создаётся. При этом, остальные сущности могут лежать всё также в монге

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

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    В ES5 нельзя было задать блочную область видимости.
    if (true) {
      var foo = 'bar';
    }
    
    console.log(foo); // bar


    В ES6 такая возможность появилась, но не для всех, а только для новых переменных
    if (true) {
      var foo = 'bar';
      let baz = 'biz';
      const alpha = 'beta';
    }
    
    console.log(foo); // bar
    console.log(baz); // ReferenceError: baz is not defined
    console.log(alpha); // ReferenceError: alpha is not defined


    По этому если вы присвоите функцию одной из переменных const/let то вы добьетесь того же эффекта:
    if (true) {
      const foo = () => {};
    }
    
    console.log(foo); // ReferenceError: foo is not defined


    Функциональная область видимости существовала всегда
    function foo () {
      function bar() {}
    }
    
    console.log(bar); // ReferenceError: bar is not defined
    Ответ написан
    Комментировать