Задать вопрос
  • Характеристика микроконтроллера. Что означает 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 комментариев
  • Можно ли раньше срока истечения деактивировать подписанный url в Laravel?

    @Kostik_1993
    Web Developer
    Такую задачу нужно реализовывать с базой или кешем чтобы можно было деактивировать

    В текущем варианте подпись и дата будет храниться в самой ссылке
    Ответ написан
    Комментировать
  • Как в vuejs делегировать событие?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Точно так же, как и без vue - смотрите на event.target, действуете по обстоятельствам:

    https://jsfiddle.net/rdcem751/
    Ответ написан
    2 комментария
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

    Это не очень хороший подход. Во-первых ваши стили не изолированные, что может приводить к неожиданным результатам. Во-вторых у вас очень много дублирования стилей. Определите Input и Label как базовые компоненты и используйте в разных местах, то же с остальным если есть.

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • Почему this в данном примере указывает на глобальный объект window?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Передавайте в map вторым аргументом this
    const cars = {
       brands: ['ford', 'audi', 'bmw'],
       category: 'sport car',
       message: function() {
          return this.brands.map(function (brand) { 
             console.log(`The ${brand} is a ${this}`);
          }, this);
       }
    }
    cars.message();
    Ответ написан
    4 комментария
  • Код в парадигме ООП PHP?

    makarenya
    @makarenya
    программист
    Вы сконцентрировались на попытке сделать ваше решение БД-ориентированным, в то время как вас не просили этого делать. Из за БД-ориентированности в вашем коде происходят странные вещи, можно сказать "магия". Некоторые вещи вообще странные, вроде списка статей внутри статьи.
    Вас просили сделать описания классов, методов и свойств класса в формате PhpDoc, а вы этого не сделали.

    Попробуйте ещё раз, но со следующими ограничениями:
    • В классе User оставьте только свойство $name и свойство $articlesList = [] - который будет уже списком статей, которые написал автор. Пусть список храниться внутри объекта пользователя, в ORM типа Doctrine так и происходит. Уберите оттуда $id.
    • Не забудьте добавить методы getName() и setName($newName) для работы со свойством name. Это является правильным для ООП - не позволять клиентам класса работать со свойствами напрямую, а лишь вызывая методы, которые вы предоставляете. Причина проста - в методе вы можете указать какое-нибудь дополнительное поведение, которое требуется при изменении свойства.
    • Также придумайте методы, необходимые для работы со списком статей. Ну вот два уже напрашивается из задания: "возможность для автора создать новую статью" и "возможность получить все статьи конкретного пользователя". Но по хорошему статью ещё и удалить можно...
    • Для статьи вам понадобятся 2 поля - это ссылка на автора (то есть сам объект класса User, а не магический id). То есть $author, и ещё, раз это статья, то ей неплохо бы добавить свойство $text.
    • А теперь главное - не пишите вообще текста методов. Только открыли фигурные скобки и сразу закройте на следующей строке. От вас этого не просили. И даже явно указали этого не делать!


    Если всё ещё сомневаетесь, то советую почитать обучалку по Doctrine. Там они постепенно создают совершенно коректные с точки зрения ООП классы User и Bug. (они это делают последовательно, так что не поленитесь докрутить до самого конца обучалки)
    Ответ написан
    2 комментария
  • Зачем в JS постоянно возвращают функции которые возвращают значения?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Вы не возвращаете функцию, вы возвращаете результат reduce
    т.е. получается, функция sum делает суммирование аргументов, реализация которой состоит из вызова reduce. Чтобы каждый раз не писать этот reduce, можно теперь просто вызывать эту функцию. Так проще.
    Ответ написан
    7 комментариев
  • Как работает метод render() в React?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    return возращает в скобках html код

    return не возвращает html код. JSX это лишь синтаксический сахар над JavaScript.

    JSX вида:
    render() {
      return (
        <h1 className="greeting">
          Hello, world!
        </h1>
      );
    }

    транслируется в JS вида:
    render() {
      return React.createElement(
        'h1',
        { className: 'greeting' },
        'Hello, world!'
      );
    }

    результат выполнения render в этом случае будет следующий:
    {
      $$typeof: Symbol(react.element),
      key: null,
      props: { className: "greeting", children: "Hello, world!" },
      ref: null,
      type: "h1",
      _owner: null,
      _store: { validated: false },
      _self: null,
      _source: null,
      __proto__: Object,
    }

    Возвращаемый объект это Virtual DOM Node. По ней библиотека создает элемент в реальном DOM.


    React компилятор перед сборкой парсит данные в файлах компонентов...
    ...Я понимаю что реакт собирает все в ES2015...

    React ничего не собирает. Никаких компиляторов библиотека не имеет. Процесс преобразования JSX в JS называется не компиляцией, а транспиляцией. Транспиляцию JSX в JS выполняют с помощью babel/TypeScript, а сборку обычно осуществляют с помощью библиотеки webpack.

    или же это нормально для ES6

    Нет. JSX не входит в спецификацию ECMAScript 2015
    Ответ написан
    3 комментария
  • Влияет ли 301 редирект на позиции сайта?

    windakolit
    @windakolit
    SEO-специалист
    Стандартная ситуация при любых доменных переездах с редиректами или массовой сменой URL страниц с настроенным редиректом 301 на новые версии это временная просадка трафика, которая может занимать от одной до нескольких недель. Но если все настроено правильно, то трафик и позиции восстанавливается до прежнего уровня с поправкой на текущий уровень конкуренции в тематике и по поисковым запросам.
    Ответ написан
    Комментировать
  • Как преодолеть кризис начинающего специалиста?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    99% программистов 90% времени занимаются отловом багов в махровом легайси или формошлёпством. Есть только один способ попасть в 1% настоящих творцов - быть творцом, способным написать что-нибудь поистине выдающееся.
    Ответ написан
    4 комментария
  • Что такое class component в React?

    @SeaBreeze876
    Front-end разработчик
    В данном случае class - это тип компонента. Правильнее перевести не "компонент класса", а "классовый компонент", в противоположность функциональному
    Ответ написан
    2 комментария
  • Как работать с очень длинными списками в JavaScript (angular, react, vuejs)?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Разом все эти сообщения обычно и не рендерятся - отрисовывается то, что на экране и немного сверху и снизу. При скролле контейнеры переиспользуются и в DOM элементов не так много. Называется виртуальный список, для каждого указанного фреймворка есть реализации.
    Ответ написан
    Комментировать
  • Как сгруппировать данные?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const grouped = data
      .reduce((acc, n, i, a) => {
        if (i && n.id === a[i - 1].id + 1) {
          acc[acc.length - 1][1][1] = n.id;
        } else {
          acc.push([ [], [ n.id ] ]);
        }
        acc[acc.length - 1][0].push(n);
        return acc;
      }, [])
      .reduce((acc, n) => {
        acc[n[1].join('-')] = n[0];
        return acc;
      }, {});
    Ответ написан
    1 комментарий
  • Хотите задать вопрос администрации Тостера?

    Sanes
    @Sanes
    Доколе?
    Ответ написан
    Комментировать
  • Как сгенерировать ссылку в VueJS?

    lavezzi1
    @lavezzi1
    <a :href="`/disease_history/${patient.id}/`">Перейти к карте -></a>
    Ответ написан
    1 комментарий
  • Почему пропсы из Редакса в обработчике Реакт не видит, когда в render(){} видит?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Вы передаете метод clickHandle в колбек слушателя события click, при вызове метод теряет контекст, так как вызывается не на вашем объекте. this в таком случае ссылается не на ваш объект, а на undefined. Так как babel при трансляции добавляет 'use strict' (иначе, при выполнении в браузере, ссылался бы на window). Исправить это можно несколькими способами:
    1. переделать обработчик из метода класса в class field arrow function:
    было:
    clickHandle(e) {
      // some code
    }

    стало:
    clickHandle = e => {
      // some code
    };

    class field arrow function получает контекстом экземпляр класса при инициализации и всегда ссылается на него, куда бы вы ее не передали. Это экспериментальная возможность JavaScript и в спецификации ее пока нет. За трансляцию этой конструкции в валидный код отвечает babel.
    Результат, который будет получен после трансляции, можно посмотреть тут. Строки с 23 по 28.

    2.забиндить его в конструкторе на экземпляр класса:
    constructor(props) {
      super(props);
      this.clickHandle = this.clickHandle.bind(this);
    }

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

    3. обернуть в стрелочную функцию в render:
    <SomeComponent onClick={() => this.сlickHandle()} /> // контекст не будет потерян

    При оборачивании в стрелочную функцию происходит следующее: сама функция использует как контекст ваш объект, поэтому при вызове метод будет вызван на вашем объекте и this в самом методе будет ссылаться на объект. Этот вариант разумно использовать, только тогда, когда в хандлер необходимо передать свои аргументы, помимо event:
    <ListItem
      key={item.id}
      onClick={e => this.сlickHandle(item.id, e)}
    >
      {item.name}
    </ListItem>

    так как движок вынужден определять контекст для стрелочной функции каждый рендер, а на это уходит дополнительное процессорное время.

    Как метод теряет контекст.
    Разберем на примере объекта. То же самое происходит в случае с классом, но мы будем использовать в примере объект:
    var john = {
      firstName: 'John',
      getName() {
        return this.firstName;  // this - контекст вызова и это не всегда наш объект
      }
    }


    Сценарий 1:
    console.log(john.getName()); // john
    Тут мы вызываем метод на объекте. Контекстом будет наш объект.

    Сценарий 2:
    var foo = {
      firstName: 'foo',
    };
    var foo.getName = john.getName;
    console.log(foo.getName()); // foo

    Тут мы передаем метод объекта john в свойство объекта foo без вызова и следующей строкой вызываем его на нем. Контекстом в этот раз будет объект foo. Ошибки не будет только потому, что у объекта foo есть свойство fullName

    Сценарий 3:
    var bar = john.getName;
    console.log(bar()); // undefined

    В данном случае в стандартном режиме контекстом будет window, а в строгом режиме вылетит исключение:
    Cannot read property 'firstName' of undefined
    так как this в строгом режиме будет ссылаться на undefined

    Когда вы передаете метод в колбек onClick или в любой другой колбек события, вызов идет подобно третьему сценарию. Поэтому вы должны позаботиться о том, чтобы ваш метод не терял контекст, используя один из способов приведенных выше.
    Ответ написан
    2 комментария
  • Чем дизайн на шаблоне хуже кастомного?

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

    @maxbublik
    JS фреймворки уже несколько лет - это будни фронтэнда, и это не мода, и это никуда не уйдет. Также как никуда не уйдет традиционная верстка. Они будут жить вместе. Четкую границу между веб-сайтами и веб-приложениями провести нельзя, но суть вопроса автора вопроса понятна.

    Конечно же, делать простой лендинг на чем-то типа Angular/React - это клиника. Хотя если нужны интерактивные блоки, очевидно лучше использовать Vue, чем городить что-то на jQuery. Vue как раз хорош тем, что его можно задействовать только для отдельных виджетов, а весь остальной сайт продолжай писать как тебе угодно.

    Сам Vue фреймворк и свой код Vue-виджетов нет необходимости всегда собирать. Шаблоны для Vue не похожи на кошмар, приведенный в листинге. Все верстать кастомными тегами не обязательно, по мне, так это тоже клиника. Да, в продуктив все равно придется собирать, и сборка всегда сложная, и это якорь, который еще несколько лет придется тащить, но со временем втягиваешься, скрипт сборки кочует из проекта в проект. Со сборкой придется потерпеть.

    Короче, если вы верстаете но на JavaScript ничего сложней jQuery вы не умеете, то вы в заднице. И каждый год вы все глубже.
    Ответ написан
    Комментировать