• В каком направлении нынче двигаться начинающему C#-разработчику?

    Robur
    @Robur
    Знаю больше чем это необходимо
    хотя бы позволит спустя полгода-год не осознать "Миша, всё #&$!@, давай по новой".


    Если точно хотите без этого - то завязывайте с программированием. Тут будет не "спустя полгода год" а "каждые полгода-год".
    Ответ написан
    2 комментария
  • Почему скрытые элементы подгружаются в момент их появления, а не в момент загрузки сайта?

    Robur
    @Robur
    Знаю больше чем это необходимо
    потому что браузер экономит трафик и время и не грузит то что он все равно не будет показывать.
    Можно принудительно загрузить эти картинки через JS - гуглите "js image preload".
    либо скрыть блоки другим способом кроме display:none, с которым браузер их загрузит заранее.
    так же может помочь
    <link rel="preload" href="урлнакартинкутут" as="image">
    , но это не точно
    Ответ написан
    2 комментария
  • Как работать с React Bootsrap and Typescript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    "export type" это новая фича в тайпскрипте, поддерживается по моему с 4-й версии, обновите тайпскрипт
    Ответ написан
    Комментировать
  • Почему не работает автокомплит в PhpStorm|WebStorm для объектов JS?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Лучше чем сами разработчики ide вам никто не поможет :)

    возможно какой-то баг, заведите тикет тут https://youtrack.jetbrains.com/issues/WEB
    они отвечают всегда, достаточно оперативно и если проблема понятная - чинят, или говорят что ты делаешь не так.
    Ответ написан
    Комментировать
  • Как можно сохранять данные сессии, чтобы при случайном отключение данные сохранялись?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Сохранять в БД - нормально, если бд сделана не левой пяткой, то на масштабах до тысяч пользователей которые одновременно онлайн будет все быстро. Даже очень быстро.
    самый простой вариант - сохранять у пользователя в localStorage. для 90% случаев этого будет достаточно.
    вариант с сокетами это какое-то извращение. Вы будете хранить такой же объем данных как и с вариантом с БД, только очень кривым, медленным и ненадежным способом.
    Ответ написан
    Комментировать
  • Как правильно передать соединение с базой данных в модель?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Я бы взял готовую ORM, где над этим всем уже подумали (sequelize например) и не изобретал велосипед.

    Если прямо хочется свой велосипед? то ваш подход тоже подойдет.
    Ответ написан
    Комментировать
  • Как засекьюрить код API запросов в React?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Как это можно предостеречь и не допустить?

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

    Robur
    @Robur
    Знаю больше чем это необходимо
    Какое внешнее лексическое окружение у анонимной функции, создаваемой при вызове другой функции в качестве ее аргумента?


    такое же как у создаваемой в любых других условиях. например при `const x=() => {}` факт наличия вызова другой функции не играет никакой роли для привязки лексического окружения, в этом его смысл. так как функция стрелочная, this привяжется вместе со всем остальным контекстом.

    Во втором примере у вас нет стрелочных функций, поэтому this никуда не привязывается и определяется контекстом вызова sayHello, остальные переменные, если они будут - привязываются по общему принципу замыканий - лексического контекста

    const x=1
    console.log(this) //некий объект A
    doSomething( () => console.log(this, x))// this привязан, равен A, x привязан равен 1
    
    doSomething(function () { console.log(this, x)}) //this не привязан значение зависит от кода doSomething, x все так же привязан, равен 1
    Ответ написан
  • Реален ли такой дженерик в TypeScript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    function wrapper<A extends any[], T extends { start(...args: A): void }>(target: { new(): T }, ...args: A): T {
      let instance = new target();
      instance.start(...args);
      return instance;
    }
    
    
    class RandomClass {
      start(arg1: string, arg2: number) { /* ... */ }
    }
    let instance = wrapper(RandomClass, 'Hello, world!', 777); /// все ок
    let instance2 = wrapper(RandomClass, 777); /// ошибка


    ошибка правда немного странная ругаться будет на RandomClass а не аргументы, возможно можно заставить ругаться на агрументы, не уверен.
    Ответ написан
    Комментировать
  • Компилятор nodejs приложений?

    Robur
    @Robur
    Знаю больше чем это необходимо
    babel это и есть "компилятор" для js. с плагинами и прочим. Не уверены - почитайте документацию чтобы понять это то что вам надо или нет. Можно еще всякие бандлеры взять. webpack, rollup.
    Ну или конкретно напишите что за "компилятор" такой вам нужен, что и во что он должен компилировать.
    Ответ написан
    Комментировать
  • Функция валидации которая выбрасывает исключения?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Выглядит странно, ранее очень редко встречал такие конструкции,


    вполне себе нормально, assertSomething()
    даже в ноде в стандартной либе есть https://nodejs.org/api/assert.html#assert_assert_o...

    ваш if (cond) throw 'aaa' превращается в assert(cond, 'aaa'). Наглядно, понятно, в одну строчку. Ну или еще как вам будет удобнее.
    Ответ написан
    3 комментария
  • Как работает отрицание функции?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Непонятно, как в общем работает отрицание функций в JS

    никак, нет такого понятия "отрицание функции".

    функция вызовется, что-то вернет и к этому значению применится оператор "!"
    в данном случае функция возвращает true или false, соответственно будет if (!true) или if (!false). как это работает вы я думаю уже должны знать.
    по простому - в этом примере если вызов compareObjects для ключей объектов вернул false (свойства key в а и b не равны) то возвращаем false (объекты a и b тоже не равны)
    Ответ написан
    Комментировать
  • Почему возвращается Promise pending?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Почему возвращается Promise pending?

    потому что вы вызываете асинхронные функции которые возвращают промис, и в свою очередь возвращаете промис.

    Можно ли как-то избежать .then или await при использовании функции loadJSON?

    можно конечно, не используйте их и все.
    только данные из вызова loadJSON вы при этом не получите, потому что данные загружаются после того как ваш console.log(loadJSON()) сработает, их просто нет еще.

    Хотите получить эти данные - пишите асинхронный код вокруг console.log тоже.
    console.log(await loadJSON()) например.
    чтобы работало надо чтобы это было внутри функции с async или включена поддержка top-level await.
    Ответ написан
    Комментировать
  • Как сделат localstorgate на http https?

    Robur
    @Robur
    Знаю больше чем это необходимо
    сейчас получается так что на http свое хранилище, а на https свое. как будто другой сайт.

    да, это разный origin со всеми вытекающими. Все равно что разные айпишники.

    Непонятно, если у вас уже есть https то в чем проблема его использовать в обоих вариантах?
    Ответ написан
  • Ошибка у одного, у другого все нормально, в чем проблема?

    Robur
    @Robur
    Знаю больше чем это необходимо
    unexpected token in json at position 0

    бывает когда сервер отдает не json ответ. вам надо как-то получить от других пользователей лог запроса и ответ сервера, тогда будет понятно что там происходит. Либо отловить это на стороне сервера
    Ответ написан
    Комментировать
  • Как создаются SPA с AJAX на чистом JS?

    Robur
    @Robur
    Знаю больше чем это необходимо
    как человек который написал большое SPA приложение на чистом js в далеком 2011, когда не было всяких реактов-ангуляров-вью-вебпаков-тайпскриптов, надеюсь что никак.

    Если вам хочется разобраться в архитектуре приложений - то не ищите spa на js, ищите книжки-статьи по архитектуре. разделение бизнес-логики от интерфейса, хранение стейта, общение с сервером, связность, модульность, вот это вот все. И посмотрите как устроены современные фреймворки, желательно все мейнстримовые, у них разные подходы.
    Можете еще посмотреть на extjs чтобы понять как делать не надо.
    Ответ написан
    Комментировать
  • Стоит ли отправлять ответы по веб сокету, если соединение уже установлено или лучше использовать rest?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Сразу же возникают проблемы

    Решение проблем - это необходимый навык.
    Отправляйте с запросом какой-нибудь id запроса, и в ответе его же возвращайте, и будут у вас и лоадеры и ошибки и promise.all и все остальное с небольшим колчеством усилий.
    Ответ написан
  • Какое сходство между продактом и проджектом?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Для того чтобы все получилось, они оба должны быть ПРО.
    Ответ написан
    Комментировать
  • Как управлять командами в рамках одного проекта?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Поэтому выходит что ответственность по ревью (или полностью, или всё кроме архитектуры) нужно делегировать лидам команд.

    делегируйте, лиды затем и нужны.

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


    вопрос кому делегировать ответственность не влияет на уровень, который могут выдать команды, а влияет на то кто за это будет отвечать.
    Общий уровень качества всегда в первую очередь обеспечивается уровнем команд. Все остальное - управление, QA, ревью и прочее - только поддержка чтобы он всегда был на этом максимуме. Если уровень недостаточный, это решается не контролем и проверками, а обучением и наймом специалистов более высокого уровня.

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

    Если бы архитектор был один в поле воин, вам не нужны были бы эти 80-100 человек.
    Архитектор в первую очередь принимает решения по архитектуре, принимает на себя ответственность за эти решения и доносит это все до остальных. Ответственность за реализацию лежит уже не на нем а на командах.

    Текст звучит так что у вас есть кто-то слишком за все ответственный, кто контролирует код который пишут 80-100 человек. Это заведомо гиблое дело. Либо у кого-то очень большое эго, если он сам на себя это взял, либо очень слабый характер, если на него навешали. На таких масштабах вам нужны иерархия и делегирование.

    Это что касается уровня написанного кода.
    А качество самого продукта(и это совершенно другая штука) должен проверять отдел QA. Либо те кто выполняет эти функции, но на таких масштабах у вас должен быть такой отдел из нескольких человек, явно или не явно.
    Ответ написан
    Комментировать
  • Как лучше получать props'ы в компоненты React?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Да все равно.
    Это не филосовский вопрос, а вопрос принятого стиля.
    Я пишу и так и так, если пропсы зачем -то нужны как объект то не деструктурирую, если нужны только значения - с деструктуризацией.

    Я сразу использую деструктуризацию и считаю это очень удобной вещью

    Продолжайте, это нормально.
    Ответ написан
    1 комментарий