• Как посмотреть массив до применения map?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    И что тут особенного? Объекты в JS копируются по ссылке.
    const a1 = [{ "id": "1" }, { "id": "2" }, { "id": "3" }];
    Здесь создаётся массив, в котором три ссылки на объекты.

    let a3 = [...a1];
    Здесь производится декомпозиция массива и из этих трёх ссылок формируется новый массив. Сами ссылки при этом остаются неизменными.

    let a4 = a1.slice();
    Опять таки, ссылки не меняются и ведут на те же самые объекты.

    const a2 = a1.map(i => {
        i["name"] = "Name" + i["id"];
        return i;
    });
    Здесь в объекты по ссылкам добавляется новое поле и как результат каллбэка возвращается ссылка на объект. Соответственно в a2 те же самые ссылки.

    В результате имеем четыре массива, в которых ссылки на одни и те же объекты.

    Чтобы не менять исходные объекты, надо из них строить новые:
    const a2 = a1.map((o) => ({ ...o, name: `Name${o['id']}` }));
    Ответ написан
    1 комментарий
  • Какой самый простой способ организовать SSO?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Самый популярный фреймворк для SSO - OAuth.
    Про него много где уже писали. Например, вот некоторые ссылки:
    - https://habr.com/ru/articles/77648/
    - https://habr.com/ru/companies/vk/articles/115163/
    - https://oauth.net/2/

    Также есть еще и OpenID Connect. Это фреймворк построенный вокруг OAuth:
    - https://habr.com/ru/companies/nixys/articles/566910/
    - https://openid.net/developers/how-connect-works/

    Поймешь как они решают эту проблему - поймешь как решить свою.
    На вопрос прямого ответа не дам - много букв
    Ответ написан
    Комментировать
  • Как защитить программу от копирования без интернета?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Никак. Единствнный способ гарантированно защититься от нелицензионного копирования - это вынести ключевую часть функционала на сервер. Любая остальная защита - лишь усложнение реверс инжениринга и взлома. Всегда можно каленым железом вырезать любую проверку ключа из исполняемого кода.

    Активация ключа по телефону/интернету исключает лишь самый тривиальный способ "взлома" - просто копирование одной и той же лицензии по куче компьютеров без модификации исполняемых файлов.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Дык onclick - это свойство. В нём одновременно может быть только одна функция.
    Используйте addEventListener.
    Ответ написан
    1 комментарий
  • Нужно ли писать суффиксы литералов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во всех случаях мы описали тип слева. Тоесть задача типизации - выполнена.
    float a = 1.0f;
    unsigned int a = 10u;

    Я думаю что ничего дополнительно указывать не надо. В противном случае у code-reviewer
    это вызывает удивление и очередной WTF. Тоесть вам придется объяснять своему коллеге
    ДЛЯ ЧЕГО вы ввели в исходные код дополнительную информацию.

    Нужно писать так чтобы у коллег к вашему коду вообще не возникало вопросов.
    Ответ написан
    Комментировать
  • Почему startOfDay возвращает неравильное время для UTC зоны?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    RTFM
    startOfDay
    Return the start of a day for the given date. The result will be in the local timezone.
    Ответ написан
    Комментировать
  • На чем писать маленький портал для тестирования сотрудников?

    @zkrvndm
    Софт для автоматизации
    Используй Google формы: https://www.google.ru/forms/about/
    Ответ написан
    Комментировать
  • Что такое upstream в Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Гит — это распределенная система. Мы можем иметь много равноправных репозиториев и обмениваться информацией между ними. Тот репозиторий, в который мы сейчас коммитим, будет локальным. А другие репозитории, в которые отправляем (push) или из которых получаем (fetch), они внешние (вышестоящие, upstream, remotely)
    Часто говорят удаленные, но это не очень уместный перевод слова remote в данном контексте. Потому что появляются странные формулировки типа «удалить удаленный»

    Именем upstream ещё принято обозначать исходный репозиторий, от которого мы сделали форк на GitHub, так как имя origin уже занято и указывает на форк. Поэтому адрес исходного репозитория, при необходимости, сохраняем в переменной upstream. В данном контексте это просто традиция, и назвать ссылки на внешние репозитории мы вольны как угодно. Команда git remote лишь создаёт переменные, в которых мы храним URL внешних репозиториев, чтобы затем использовать имя переменной в командах, вместо того, чтобы писать длинный URL.
    Ответ написан
    Комментировать
  • Ошибка при JSON.parse как исправить?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    А вы можете объяснить, зачем вам здесь вообще JSON.parse?
    И почему нельзя написать просто
    var dataJSONArray = <?= json_encode($u,JSON_UNESCAPED_UNICODE) ?>;
    Ответ написан
    1 комментарий
  • Как быть с кэшированием файлов (css, js, svg...) при их изменении?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    ведь его браузер новые стили не прочитает
    Бразуер кеширует конкретный файл. Соответственно, для сброса кэша просто меняют путь к файлу.
    Простой вариант: добавить get-параметр, в котором будет содержаться время последнего изменения. Но этот вариант требует чтения с диска на сервере, чтобы узнать mtime (не велика беда) и работает не со всеми reverse proxy (некоторые криво настроенные могут игнорировать get-параметры).
    Поэтому уже лет десять существуют системы сборки фронтенда, которые прямо в имя файла подставляю хэш от его содержимого. Сейчас это есть для абсолютно любой системы - gulp, webpack, что угодно.
    Называется это Cache Busting, вот вам первая попавшаяся статья: https://www.keycdn.com/support/what-is-cache-busting
    А ещё, кэш - это не только "не запрашивай файл 365 дней", там много различных функций: https://jakearchibald.com/2016/caching-best-practices/

    при их изменении на стороне клиента
    Такая формулировка подразумевает, что это клиент что-то меняет. Я уж обрадовался: "о, какой интересный вопрос, есть над чем подумать!"...
    Ответ написан
    2 комментария
  • Как разбить строку через разделитель несколько раз?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Самый простой и лаконичный вариант
    $uuid_str = "392981414524f56f68d9f4a47e7072f2";
    
    echo join('-', sscanf($uuid_str, '%8s%4s%4s%4s%12s'));


    Ещё вариант через substr
    $uuid_str = "392981414524f56f68d9f4a47e7072f2";
    
    $uuid_dashed = 
        substr($uuid_str , 0, 8) . '-' . 
        substr($uuid_str , 8, 4) . '-' . 
        substr($uuid_str , 12, 4) . '-' . 
        substr($uuid_str , 16, 4)  . '-' . 
        substr($uuid_str, 20)
    ;
    
    var_dump($uuid_dashed);
    Ответ написан
    1 комментарий
  • Что такое Docker простыми словами?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Что такое Docker простыми словами

    простыми словами

    Если совсем прям простыми, то - это некая легковесная оболочка, которая способна изолировать приложение внутри себя от внешнего мира. Очень похож (по логике) на системы виртуализации VMware, VirtualBox, Parallels итп, но сам не является им.

    Возможности:

    - Контейнеризация: Docker позволяет паковать приложения вместе со всеми их зависимостями в контейнеры, обеспечивая тем самым их независимость от конкретной инфраструктуры.
    - Переносимость: Контейнеры Docker могут быть запущены на любом компьютере, который поддерживает Docker, независимо от операционной системы. Это делает распространение и развертывание приложений намного проще.
    - Изоляция ресурсов: Каждый контейнер Docker работает в изолированной среде и не влияет на другие контейнеры или хостовую систему.
    - Слоистая файловая система: Docker использует слоистую файловую систему для хранения данных, что позволяет существенно экономить дисковое пространство и упрощает обновление и распространение контейнеров.
    - Сетевые возможности: Docker позволяет настраивать сетевые параметры каждого контейнера, что позволяет создавать сложные многокомпонентные приложения.
    - Docker Hub: Docker Hub – это репозиторий, где можно хранить и делиться контейнерами. Это облегчает развертывание и распространение приложений.
    - Docker Compose: Это инструмент для определения и запуска многоконтейнерных - Docker-приложений. С помощью Compose вы можете использовать файл YAML для конфигурации служб вашего приложения, а затем с помощью одной команды создать и запустить все службы.
    - Docker Swarm: Docker Swarm предоставляет нативные возможности Docker для оркестрации и масштабирования кластера Docker.
    Ответ написан
    Комментировать
  • Онлайн-школа или личный ментор?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    На обучение денег не жалко, главное, чтобы был результат.


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

    Тем более, что вы уже делали какие-то попытки и начнете не с нуля.
    Пишешь много кода, парралельно читаешь что-нибудь системное (один учебник).
    И нет смысла искать самый-самый лучший. Ну вот вообще.
    Если бы был какой-то самый лучший учебник, он бы уже был единственным путем в мир разработчиков.
    А на деле - можно научиться разными способами.

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

    xez
    @xez
    TL Junior Roo
    Тут дело такое:
    1. Хороший "личный ментор", скорее всего, вам не по карману. З.п. старшего java разработчика / тим лида сейчас от 300к. Т.е. ставка около 2тр/час. Какая у такого специалиста мотивация чтобы с вам возиться?
    2. Профессия разработчика подразумевает непрерывное постоянное самостоятельное обучение. Не умеете сами учиться? Не хватает мотивации? Эта профессия не для вас.
    Работа програмиста на 80% - это чтение кода, изучение технологий, ковыряние логов, отладка и т.д. Рутины будет много (как и в любой другой профессии) и эту рутину нужно любить чтобы не сгореть еще стажером.
    3. Курсы вам помогут системным подходом к обучению, но вся информация в них доступна бесплатно в интернете, а так же в книгах за сравнительно небольшой прайс.
    Ответ написан
    6 комментариев
  • Онлайн-школа или личный ментор?

    ali5
    @ali5
    Не нужны ни менторы ни курсы,
    лучшее обучение тут 2 варианта -
    Институт по спецальности Разработка/it или Самому ТОЛЬКО по книгам (Авторов тех же Интститутов или уважаемых программистов с тонной опыта), а то как мой знакомый начитался на каком-то сайта по JS, а там была умышленно сделана ошибка чтобы курс их купили xd и ему на собеседовании из за этого отказали, обрывки в интернете эти могут на нет вообще обучение свести.

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

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

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Подскажите какую-нибудь книжку или бесплатный курс, где нет ничего сложного и лишнего, чтобы с полного нуля научиться диагностировать болезни и пойти работать врачом-диагностом начинающим.
    Ответ написан
    Комментировать
  • Как использовать AsyncThunk в middleware redux?

    @ArgeoMer Автор вопроса
    Next прокидывает action в следующий middleware или, если middleware больше нет, запускает action в редьюсер. По этому пути ясно, что acync Thunk не может быть обработан(он не встречает на этом пути необходимый DefaultMiddleware)
    Чтобы это исправить достаточно отправить асtion не в следующий middleware, а прокинуть его в начала пути через store.dispatch(asyncThunk)
    export const updateData: Middleware =
       (store) => {
          const dispatch = store.dispatch as AppDispatch
          return (next) =>
             (action: PayloadAction) => {
                if (action.type.startsWith('login/')) {
                   dispatch(fetchOffersAction())
                }
                return next(action)
             }
       }
    Ответ написан
    Комментировать