• Зачем нужен восклицательный знак при объявлении переменной TS?

    Lynn
    @Lynn
    nginx, js, css
    Он говорит компилятору TS, что не нужно ругаться на неинициализированную переменную. Что на самом деле она будет инициализирована каким-то способом который TS не может отследить. Например, в данном случае она инициализируются внутри static блока, а TS видимо этого пока не понимает.
    Ответ написан
    Комментировать
  • Почему Event Loop пропускает первый task и сразу переходит к микротаскам?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как будто начальное выполнение всего этого кода уже и есть таск.
    Вы таки не поверите, но код, запускающийся при загрузке скрипта - это отдельный таск. Он помещается в стек тасков и выполняется, пока стек не опустеет. Затем выполняются все накопившиеся микротаски, затем из очереди тасков в стек перемещается следующий таск.
    Ответ написан
    8 комментариев
  • Должен ли WEB-разработчик уметь настраивать VPS/сервер?

    Aetae
    @Aetae
    Тлен
    Знать как работает и уметь боль-мене понять конфиг того же nginx - да. Без этого часто может быть грустно. Даже если именно настраивать не придётся ни разу.

    Уметь именно правильно настраивать - нет. Это задача админа(девопса). Там на самом деле тонкостей и сложностей очень и очень много. На отдельную должность, ага, и не одну.
    Ответ написан
    3 комментария
  • Должен ли WEB-разработчик уметь настраивать VPS/сервер?

    Adamos
    @Adamos
    Вопрос "должен ли" - всегда идиотский. Никто никому ничего не должен. В частности, нанимать и платить.
    Если вы такой крутой фронтендер, что вас ценят именно на этом фронте настолько, чтобы работодателю было жалко тратить ваше ценное время на настройки, он лучше наймет девопса - скорее всего, вам это все не понадобится.
    Но как можно стать крутым специалистом, вообще не интересуясь настолько смежными областями? Я не знаю.
    Вы такими сомнениями и прикидками сами себе ограничиваете рост статусом веб-макаки, которую можно только посадить в опенспейс на узкоспециализированную работу и до настройки серверов просто не допускать. Зато - "не должен", да...
    Ответ написан
    3 комментария
  • Как сказать тайпскрипту что я жду обьект с нужными полями в jsx?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    export const Film = ({ film }: { film: IFilm ): ReactElement => {
      return <div></div>;
    };

    А лучше:
    export const Film: React.FC<{
      film: IFilm
    }> = ({ 
      film 
    }) => {
      return <div></div>;
    };
    Ответ написан
    1 комментарий
  • Как валидировать пароль?

    SagePtr
    @SagePtr
    Еда - это святое
    А вообще, эти правила - несусветная глупость. Например "Password1+" ничем не лучше "password". Но при этом может отпугнуть менеджеры паролей, если те генерируют пароли только из букв ради более широкой совместимости с сайтами (ибо часть кривописных сайтов зачем-то ругается на спецсимволы)
    Ответ написан
    Комментировать
  • Нужно ли оборачивать сбор данных из формы в promise?

    Stalker_RED
    @Stalker_RED
    Нет, не нужно делать ее асинхронной, из формы и синхронно получится данные собрать.

    1. Если вдруг вы переделаете форму так, чтобы у полей были name, то можете выбросить функцию getSaveData и использовать $(form).serialize();

    2. сбор данных не обязательно записывать в переменную, да еще и объявленную через let. Можно делать прямо вот так:
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: getSaveData() },  // переменная data не нужна
        // ...
    })


    или, если у ваших полей есть имена
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: $(form).serialize() },
        // ...
    })

    и можно использовать встроенный в браузер способ
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: new FormData(form) },
        // ...
    })


    Кроме того, довольно странно делать отправку данных только по клику по кнопке. Обычно формы также отправляются при нажатии enter, и она таки отправится средствами самого браузера, "мимо" вашего ajax-ового отправлятора.

    Соответственно правильнее будет куак-то так:
    const $form = $("#idForm");
    $form.on('submit', function(evt) {
        evt.preventDefault(); // отмена обычной отправки
        
        $.ajax({
               type: "POST",
               url: $form.attr('action'),
               data: $form.serialize(),
          // ...


    А если вам вдруг не нужна поддержка очень старых браузеров, то можно вообще выбросить jQuery
    const form = document.getElementById('myForm');
    
    form.addEventListener('submit', function(evt){
      evt.preventDefault();
      fetch(form.action, {
        method: 'POST',
        body: new FormData(form)
      });
    });

    https://developer.mozilla.org/ru/docs/Web/API/Fetc...
    Ответ написан
    2 комментария
  • Как работают банковские карты?

    DMGarikk
    @DMGarikk
    Lead Software Developer
    Попробую совсем кратко описать:
    Пластиковая банковская карта - это буквально номер карты, датадействия, некоторая техническая информация и ВСЁ. так было изначально. никаких ключей и т.п. изначально на ней не было. но и потом когда они появились - стали выполнять несколько иную ф-цию чем подпись транзакций

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

    Системы типа GPay - не делают копию карты, они выпускают некий аналог виртуальной карты и делают оплаты от лица этой 'виртуальной'...списывая деньги с вашей, также как если бы вы подписались на онлайн кинотеатр с ф-цией автооплаты.

    Далее, двухфакторная авторизация не является обязательной, вообще. в РФ она чуть больше распространена чем в остальном мире, но она всегда опциональна и защищает не покупателя (как бы странно это ни звучало)
    ==
    и самое главное и непонятно-недоступное многим, даже некоторым сотрудникам банка

    операцию по банковской карте можно провести имея ТОЛЬКО номер карты. ВСЁ. не нужны ни CVV/CVC ни даты действия ни имя владельца, ни данные чипа, ничего, ТОЛЬКО номер.
    Эту операцию конечно не сможет сделать любой сотрудник в магазине (лет 7 назад прикрыли оч большую дырку в этом направлении кстати), но она возможна и ей часто пользуются например отели.
    Ответ написан
    5 комментариев
  • Что лучше выучить, Java или C#?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Язык является инструментом. Важны ваши навыки, как разработчика (алгоритмы, структуры данных, понимание tcp/ip и т.д.)
    Что касается выбора языка, то ориентируйтесь на:
    - что вы собираетесь на нем делать и кем планируете работать. Если например, речь о геймдеве, то конечно же C# (Unity) или C++. И тут Java ну никак... хоть и позволяет писать игры. Если enterprise, то да, тут уже можно выбирать между Java & C#.
    - ориентируйтесь на то, где вы планируете работать. Возможно, что вы в результате вашего исследования поймете, что Java популярнее C# (или наоборот), но на деле окажется, что в вашей стране/городе она вовсе не популярна. Соответственно, посмотрите какие компании есть у вас в городе (если планируете работать офлайн) и изучите их стек.
    Ну и конечно же пробуйте. Я например, пока дошел до Java, успел попробовать PHP & JavaScript. В любом случае, когда вы станете востребованным и опытным специалистом, то уже будете владеть несоклькими языками.
    Ответ написан
    Комментировать
  • Как обрезать строку в Javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    возвращать нулевую строку массива

    Нет. Посмотрите, что делает метод строки slice() — он возвращает часть строки.
    const str = "abcdef";
    // индексы:  012345
    
    str.slice(2, 4)
    // от индекса 2, т.е. "c"
    // до индекса 4 (но не включая его)
    // т.е. до "e", но без самой "e"
    // итого вернёт "cd"

    Что значит в коде + "..."

    Строки в JavaScript можно «складывать»:
    "Hello" + " world!" 
    // получится "Hello world!"
    
    "Понимаете?"  +  "..."


    Что значит : str

    Это часть «тернарного оператора». Как «унарный» от 1-го аргумента, «бинарный» – от двух аргументов, так «тернарный» – от трёх.

    Логически похоже на if () then {} else {}, но это выражение - туда нельзя засовывать дополнительные действя, как в if. Удобен для короткой записи, когда нужно вернуть то или иное значение, в зависимости от условия:
    let a = 5 > 2    ?  "5 больше 2"  :  "5 не больше 2";
            условие     если верно       если ложно
    Ответ написан
    Комментировать
  • Писать типы вначале или рассчитывать на вывод типов компилятором?

    Никакой религии в этом вопросе нет и быть не может. Есть вполне конкретные правила, когда писать типы весьма полезно.

    Если вы НЕ указываете тип, и рассчитываете на автовывод, то значит вам нужен не какой-то конкретный тип, а ТАКОЙ ЖЕ, КАК И... где-то ещё. Например, такой-же-как тип константы или такой-же-как тип возвращаемого значения функции. Иными словами, если я пишу:
    const id = findIdByName("abc");
    то мне не так важно, какой конкретно тип будет иметь id, мне важно чтобы это был тип возвращаемого значения функции "findIdByName". Для меня это приоритетно. Более того, если в какой-то момент тип возвращаемого значения у этой функции поменяется, то этот код продолжить компилироваться и, вероятно, даже РАБОТАТЬ (это зависит уже от того, что мы потом собираемся делать с id).

    Совершенно противоположная ситуация - интерфейсы. В широком смысле. Интерфейсы функций, интерфейсы классов, интерфейсы в смысле типов данных, создаваемых с помощью "interface". Особенно если эту функцию/класс/интерфейс использует много кто ещё. Тогда наоборот, вам НЕЛЬЗЯ допустить, чтобы типы параметров или тип возвращаемого значения просто так поменялись. Это вдвойне важно, если вы пишите библиотеку и речь идёт о её публичном интерфейсе - любое изменение интерфейса тогда должно подкрепляться версионированием (например, семантическим). Вы не можете просто так, тем более по недосмотру, вместо числа начать возвращать из функции строку - вы сломаете ваших клиентов, причём даже не знаете как и где.
    Ответ написан
    Комментировать
  • Как начинающему фронтенд-разработчику не утонуть в океане знаний?

    DollyPapper
    @DollyPapper
    Вы понимаете, что этот вопрос это вопрос о том, что будет завтра? Никто не знает, что будет завтра. Может вы придете работать, а там не будет БЭМ, значит он вам не пригодился. Но вдруг будет? Если с основными технологиями определится легко, то есть js,css, html это однозначно нужно сейчас, нужно завтра, и послезавтра нужно. С выбором конкретной технологии тоже вроде не сложно. React? Ну учите его и ищите вакансии только по нему. А вот с методологиями и прочим делом уже сложнее. Тот же БЭМ не известно. Если взять выборку из 20 компаний, 10% из них может их не использовать, или наоборот - использовать могут 90%. Тут уже ничего сказать нельзя. Какую методологию, архитектуру, сборщик, препроцессор и прочие вещи используют в компании знают только в этой компании. По этому нужно понять принципы которые за этими вещами стоят и зачем они нужны. Мне вот например совершенно похер какой будет сборщик на проекте, я просто открою документацию и понеслась. А я даже не фронт. Просто фокус в том, что я понимаю зачем они. Что вам по сути нужно чтобы использовать любой сборщик? 1) значить зачем нужен сборщик 2) знать js. Всё! Вы знаете любой сборщик, детали самого сборщика почитаете в доках при необходимости. Выберите сейчас один и изучите его. Выберите один препроцессор, поймите его. Выберите один фреймворк, изучите его. Идите на собес. Если повезло, вы работаете, если нет изучаете то на чем завалились.
    понять для чего нужно и как это применить

    Вот в этом весь ключ
    Ответ написан
    Комментировать
  • Как из компонента Child добавить родителю нужный класс?

    0xD34F
    @0xD34F Куратор тега React
    Так делать не принято, и вам это не нужно.

    Раз у всех этих элементов должен быть один класс, это должны быть корневые элементы экземпляров компонента Preloader. Тэг можно передать через props, как и те элементы, что сейчас являются соседними:

    function Preloader({ Tag = 'h1', children }) {
      return (
        <Tag className={s.wrapper}>
          <div className={s.preloader}></div>
          {children}
        </Tag>
      );
    }

    <div className="App">
      <Preloader>hello, world!!</Preloader>
      <Preloader Tag="h2">fuck the world</Preloader>
    </div>
    Ответ написан
    1 комментарий
  • Что считается технологией в программировании?

    DollyPapper
    @DollyPapper
    Технология понятие размытое. Это совокупность методов, инструментов и процессов для достижения определенного результата. Алгоритм сортировки пузырьком тоже можно считать технологией. Этот алгоритм может быть реализован в React или Angular, тогда это технология внутри бОльшей технологии.
    В общем процессы, инструменты, методики и подходы в совокупности направленные на решения какой-то задачи или группы задач можно назвать технологией.
    P.S.
    SPA это скорее подход, который реализуется с помощью какой нибудь технологии. В контексте моего ответа его скорее нужно называть "задача"
    Ответ написан
    Комментировать
  • Почему в тернарный оператор нельзя положить цикл?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    По стандарту. Во всех трёх параметрах тернарного оператора могут находиться только выражения.
    https://tc39.es/ecma262/multipage/ecmascript-langu...
    Ответ написан
    Комментировать
  • Насколько целесообразно разбиение на функции и классы?

    vabka
    @vabka
    Токсичный шарпист
    Автор этого добра заявляет, что это абсолютно нормальная практика - выносить каждые пару строк в отдельную функцию.
    Нормальная ли?

    Только ситхи возводят всё в абсолют. Без кода нельзя сказать, норма или нет.
    В принципе - если эти функции так хорошо делятся, то почему бы и нет?

    1000 строк кода на 3 класса - это не очень много. Это всего 300 строк на класс.
    75 функций - это получается в среднем около 10-15 строк на функцию, что в принципе тоже ок.

    По вашим словам больше ничего объективно сказать нельзя.
    Ответ написан
    2 комментария
  • Как рассчитать сложность данного алгоритма?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    O(n + 2 * 0.7 * n) = O(2.4*n) = O(n)
    Ответ написан
    4 комментария
  • Перенос файлов между серверами без моего участия?

    команда screen запустит автономную сессию, от которой можно отключиться и потом подключиться снова.

    В сессии screen, уже не боясь оставить/отключиться, вместо scp, может, удобнее воспользоваться rsync — он зипует, что может ускорить передачу:
    rsync -avz /var/www/projectOldName  user@newserver.example.com://var/www/projectNewName

    И нажать Ctrl + A, D — чтобы покинуть работающий вирт. терминал и спокойно отключиться от SSH. Позже, когда снова зайдете, командой screen -r снова подключитесь к оставленной сессии.
    Ответ написан
    Комментировать
  • Почему typescript не воспринимает тип родителя?

    WblCHA
    @WblCHA
    Потому что пытаешься применить частный случай к общему.
    https://www.typescriptlang.org/play?#code/KYDwDg9g...
    (ты ещё круглые скобки в последнем мапе забыл)
    Ответ написан
    2 комментария