• Можно ли через GET запрос отправлять телло запроса?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Всегда тело запроса ассоциировалось с методом POST

    "ассоциировалось".... Чтобы не было "ассоциаций" надо читать доки.

    Возможно ли отправлять тело запроса

    Достаточно почитать документацию https://www.w3schools.com/tags/ref_httpmethods.asp и станет понятно, что GET-запрос передаёт данные в URL, а не в теле запроса, и есть ограничение на объём передаваемых данных, это очень небольшое значение.
    Ответ написан
  • Как лучше реализовать защищённый react router?

    vovvkka
    @vovvkka
    Я использую так, если пользователя нет в стейте, то проверка не срабатывает, и производится редирект на ту страницу, которую я передал пропсом как redirectTo, а если пользователь есть, то он просто возвращает обычный роут.

    const ProtectedRoute = ({isAllowed, redirectTo, ...props}) => {
        return isAllowed ?
            <Route {...props}/> : <Redirect to={redirectTo}/>
    };
    
    const App = () => {
        const user = useSelector(state => state.users.user);
    
        return (
            <Switch>
                <ProtectedRoute
                    isAllowed={user}
                    redirectTo="/"
                    path="/new-artist"
                    component={NewArtist}
                />
              
                <Route path="/register" component={Register}/>
                <Route path="/login" component={Login}/>
    
                <Route component={() => <h2>Not Found.</h2>}/>
            </Switch>
        );
    };
    Ответ написан
    Комментировать
  • Почему не отображаются параметры URL?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Метод pushState() браузерного History API:
    const url = new URL(window.location);
    url.searchParams.set('qna', 'habr');
    window.history.pushState({}, '', url);
    // в адресной строке теперь ?qna=habr
    Ответ написан
    1 комментарий
  • В основе flex или inline-block?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Дело в том, что флекс был не всегда. И раньше элементы в ряд выстраивали инлайн-блоками, ещё раньше флоатами.

    Сейчас инлайн-блок нужен для того, для чего придуман, т.е. чтобы элемент получил строчно-блочное отображение. Т.е. элемент ведёт себя снаружи как строчный, а внутри как блочный. А также реагирует на свойства задающие ширину, высоту, отступы.

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

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сразу определим селекторы элементов и класс, они нам дальше понадобятся:

    const blockSelector = 'селектор блоков';
    const buttonSelector = 'селектор кнопок';
    const activeClass = 'класс, показывающий блок';

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

    const blocks = document.querySelectorAll(blockSelector);
    const buttons = document.querySelectorAll(buttonSelector);
    
    buttons.forEach((n, i) => {
      n.addEventListener('click', () => {
        blocks[i].classList.toggle(activeClass);
      });
    });

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

    const onClick = function({ currentTarget: { dataset: { index } } }) {
      this[index].classList.toggle(activeClass);
    }.bind(document.querySelectorAll(blockSelector));
    
    document.querySelectorAll(buttonSelector).forEach((n, i) => {
      n.dataset.index = i;
      n.addEventListener('click', onClick);
    });

    Также есть вариант вычислять индекс при клике:

    const blocks = document.querySelectorAll(blockSelector);
    const buttons = document.querySelectorAll(buttonSelector);
    
    buttons.forEach(n => n.addEventListener('click', onClick));
    
    function onClick() {
      const index = Array.prototype.indexOf.call(buttons, this);
      blocks[index].classList.toggle(activeClass);
    }

    А вообще, если у каждой из пар кнопка-блок есть отдельный общий предок (const containerSelector = '...';), то индексы не нужны. Достаточно от нажатой кнопки подняться до общего предка кнопки и блока, и найти внутри блок (а можно даже и не искать, если добавлять класс контейнеру; конечно, стили придётся в этом случае немного изменить, вместо .блок.класс будет .контейнер.класс .блок):

    const toggleBlock = button => button
      ?.closest(containerSelector)
      ?.querySelector(blockSelector)
      .classList
      .toggle(activeClass);
    
    
    // можно добавить обработчик клика каждой кнопке индивидуально
    document.querySelectorAll(buttonSelector).forEach(function(n) {
      n.addEventListener('click', this);
    }, e => toggleBlock(e.currentTarget));
    
    // или один раз на всю страницу
    document.addEventListener('click', e => {
      toggleBlock(e.target.closest(buttonSelector));
    });
    Ответ написан
    Комментировать
  • AUX и Jack 3,5 - это одно и то же?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не путайте тёплое с мягким.
    Jack 3.5 - это форм-фактор разъёма. Может быть стандарта TS (моно), TRS (стерео или моно+микрофон), TRRS (стерео+микрофон).
    AUX - это назначение разъёма (Auxiliary - дополнительный).
    А наушники надо подключать в разъём, предназначенный для подключения наушников. Как правило, он обозначен соответствующим знаком. На некоторых материнских платах бывают конфигурируемые разъёмы, назначение которых задаётся из панели управления звуком.
    Ответ написан
    1 комментарий
  • AUX и Jack 3,5 - это одно и то же?

    @Mercury13
    Программист на «си с крестами» и не только
    AUX ≠ Jack 3,5 ≠ наушники.
    1. AUX (неусиленный линейный выход) может быть и другими разъёмами — чаще всего DIN-5 или два RCA. Допустим, в моём самодельном переключателе колонки-наушники на колонки идут два RCA из-за сверхнадёжности, а на наушники — ну, так и быть, джек.
    2. На миниджеке 3,5 мм может быть и микрофон. У микрофонов отдельный механизм работы, и ухи от микрофона отличают омметром — наушник имеет сопротивление около 30 Ом, а микрофон — около 1к. И даже ухи с микрофоном, если джек 4-контактный.
    3. В советской аппаратуре существуют разъёмы для высокоомных наушников, и низкоомные могут плохо работать. (Сомневаюсь, что погорят — для проверки полярности часто берут и подключают к ним батарейку, хотя на AUX меньше вольта.) Впрочем, не видел ни одного устройства, где этот разъём — джек.

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

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    select *
    from tbl
    order by row_number() over(partition by user_id order by views desc), views desc;


    sql online editor
    Ответ написан
    Комментировать
  • Как обойти блокировку от парсинга для почты?

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

    iMedved2009
    @iMedved2009
    Не люблю людей
    select 
      people.* 
    from people 
    join people as parent on people.parent_id = parent.id 
    where people.size > parent.size;
    Ответ написан
    Комментировать
  • Как найти настоящего эксперта по ML (для консультаций), а не выпускника "курсов дата-саенсов" с бэкграундом копирайтера?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Например среди разработчиков банковского скоринга. Только они не оказывают платных консультаций. Задайте себе вопрос, если бы вы получали огромные деньги за программирование, которые вы любите, стали бы вы в свободное время подрабатывать консультантом?
    Ответ написан
    3 комментария
  • О каких IT специалистах говорят, когда речь идет о дефиците кадров?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Откуда у вас миф о "50 человек на место, если убрать новичков"?

    Для уверенности буду говорить о бэкенде, но тимлид фронтов моей команды говорит, что и у фронта ситуация похожая. На одну нашу вакансию прилетает 50-200 резюме в неделю, в зависимости от активности рекрутёров, и все они от джунов, за исключением одного-двух слабых мидлов с опытом не больше трёх лет. Причём эти мидлы брезгливо морщатся на зарплаты меньше 300. Зачастую даже они получают оффер от другой компании быстрее, чем мы заканчиваем их собеседовать. Сильный мидл попадается раз в два-три месяца. Сеньоры не попадаются вообще. В некоторых банках уже несколько лет почти тысяча незакрытых вакансий.
    Ответ написан
    9 комментариев
  • Можно ли добавлять Null в INT поле?

    mayton2019
    @mayton2019
    Bigdata Engineer
    NULL и 0 будут давать разный результат при подчете агрегации. Sum, Avg и прочие стат- функкии будут учитывать 0 и игнорировать NULL.

    Вообще в реляционной алгебре правильно использовать NULL когда данных нету.

    Еще для некоторых dbms (Oracle) Null не индексируется. Это экономит место в сегменте индекса и делает поиск более быстрым дла nullable колонок.
    Ответ написан
    Комментировать
  • Можно ли добавлять Null в INT поле?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    NULL — это отсутствие значения. Если не "устанавливать" значение, то это и будет по-умолчанию. Если поле участвует в вычислениях, то лучше поставить 0. Если отсутствие значения используется в логике, то оставляйте NULL. Например количество товара: 0, код (если допускается неопределённость) —NULL.
    Ответ написан
    1 комментарий
  • Правильно ли составлена схема для магазина?

    @full_stack_newbie
    Если это не курсовая, то сыро.
    Цены - в отдельную таблицу, добавлять период действия. Если цена меняется с завтрашнего дня, вы когда их менять будете?
    Закупочные цены - тоже имеют свойство меняться. Партии товаров на складе могут иметь разную цену поступления. Не увидел, что будет двигать остатки товара на складе (на вход).
    Оплаты фиксировать в отдельной таблице, там будут конкретные транзакции, типы оплаты, не стоит это все пихать в заказ.
    Скидки - так же в отдельную таблицу, период действия, типы скидок, etc
    Это очень кратко.
    Ответ написан
    5 комментариев
  • Правильно ли составлена схема для магазина?

    vabka
    @vabka
    Токсичный шарпист
    1. Хранение адреса в виде записей в базе.
    Думаю, вполне можно было бы обойтись текстовым полем и id по кладр/фиас/гар (если россия).
    Всё равно все возможные форматы адресов ты нормально не покроешь (а если покроешь - это будет свой фиас)
    2. Использование float для хранение цены товара
    3. Скидка чисто в виде числа в заказе - вполне возможно, что ты захочешь ввести какую-нибудь более гибкую систему скидок.
    В текущей ситуации такое невозможно.
    Например скидку в виде абсолютного количества денег, полностью бесплатный/подарочный товар.
    Скидку только на отдельную категорию товара, или систему баллов.
    Так что я бы сделал бы отдельную таблицу со скидкой на заказ, которую бы мог потом расширять.
    (в принципе, можно оставить пока так, а потом миграцией всё исправить)
    4. (комментарий про хранение цены убран, тк я изначально не заметил поле store_price)
    5. Хотелось бы, чтобы была функция оформления заказа без регистрации.
    6. А, ну и да. В заказе должен быть указан адрес. У пользователя их может быть несколько, и должен быть способ определить, на какой именно доставлять. (а с учётом п5 - адрес должен быть самостоятельной вещью)
    + Должна быть система как и с ценой - адрес у уже завершённого заказа не должен меняться.
    7. А где статусы заказа? Типа новый/оплачен/доставка/доставлен/завершён?

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

    PPS: Применять такую схему я бы осмелился только в рамках курсовой работы в колледже. Даже на диплом это врядли тянет, не говоря о реальном мире.
    Ответ написан
  • Правильно ли составлена схема для магазина?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В целом правильно, но если уж затеваться с хранением адресов, то тогда в заказе должна быть ссылка на id адреса. иначе просто нет смысла. В целом для такой примитивной схемы отдельное хранение адресов выглядит неадекватным, я бы просто писал адрес в заказ.
    То же самое про телефоны. Просто писать в таблицу юзеров.
    Не хватает емейла. Смс на каждый чих рассылать дорого.

    В таблице заказов очень сильно не хватает поля status. Ну и связанной таблицы с историей статусов.
    Отдельно хранить дату и время - это глупость. Есть тип datetime
    discount - это ОЧЕНЬ отдельная тема. Но по крайней мере скидка должна размазываться по товарам. Если клиент при выкупе откажется от одного, то как пересчитывать цену?
    В целом стоит в заказе дублировать основную инфу по товарам. Потому что её надо показывать в истории заказов, а товара может уже не быть в базе. В том числе цену до скидки и со скидкой.

    Непонятно, что за таблица store.
    Ответ написан
  • Подойдет для простого букинга?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Для ООООЧЕНЬ простого букинга с большой натяжкой.

    Не вижу собсно отелей (или он будет один? Тогда это не букинг, а бронирование в отеле)

    Не вижу типов комнат (возможно это сайт бронирования конкретной квартиры покомнатно?)

    Эмоунт - это деньги? Тогда тип флоат не подходит.

    Что за фючеред_имэйдж? еще и интежер...

    Где опции в номере? Или в комнатах квартиры все удобства на улице и это где то отдельно текстом прописано?

    Короче пока на 2 с плюсом...
    Ответ написан
    6 комментариев
  • На чем лучше делать ML-движок/модель - на Python или C++? Где библиотек больше и т.п.?

    @dmshar
    Если вы не понимаете преимущества и недостатки этих языков именно в задачах ML, а кроме того, вы в одну кучу намешали "ML-движок" и "ML-модель" , то это просто означает что у вас (и вашей команды) знания в области ML реально нулевые. В таком случае писать самостоятельно "ML-движок" я бы вообще поостергся. Как вам уже посоветовали - нанимайте людей, которые имеют соответствующую экспертизу, они и на ваши вопросы вам ответят. Опыт в программировании и опыт в ML - это близкие, но совершенно различные скилзы.
    P.S. Про вопрос - а ЗАЧЕМ самостоятельно писать "ML-движок" - я вообще умолчу.
    Ответ написан
    1 комментарий
  • Не удается получить дочерний элемент родителя, в чем проблема?

    mizutsune
    @mizutsune
    Frontend Developer
    Свойство children хранит в себе псевдомассив дочерних элементов. Дочерними элементами считаются все теги, которые непосредственно расположены внутри блока. Подробнее можно прочитать в документации.

    Ну, а так... интересная конечно строка:

    var parent = this.closest('div').className;

    Как вы думаете что содержит в себе переменная parent? HTMLElement или строку содержащую селектор класса выбранного элемента?

    В общем правильнее сделать так:

    const parent = this.closest('.parent-selector');
    const child = parent.querySelector(".b24-form-control-label");


    И вообще, пора бы уже использовать const/let вместо устаревшего var.
    Ответ написан
    Комментировать