• Какой смысл в создании сигнатуры API ключа, если API ключ и так известен?

    kawabanga
    @kawabanga
    Чуть-чуть не изучили вопрос.

    Если вы через уязвимость получите хэши паролей, вы не будете знать первоначальный пароль, верно? и не сможете его использовать в качестве ключа.
    При этом вы так же не знаете, как формируется ваш хэш пароля. И в этом случае ,как минимум то, что вводит клиент - неизвестно, если вы не знаете исходный код и не внедряетесь внутрь системы. А мы то знаем, что в 95%+ пользователь использует одни и те же пароли везде. И тут мы сохраняем пароль пользователя до более серъезного взлома.
    Ответ написан
    2 комментария
  • Как перенести таблицу пользователей с сохранением возможности авторизации?

    @deliro
    Да. Для этого в каждом password hash есть информация об алгоритмах, соли, количестве итераций

    Например: sha1$15000$mysalt$<результат хэша>, bcrypt$3$...

    В коде появляется список хэшеров, хэш сплитится по символу (например $) и по алгоритму подбирается хэшер. Он занимается дальнейшей обработкой. Плюс есть дефолтный хэшер, который используется для всех новых паролей.

    Если у тебя сейчас все хэши в одном алгоритме, то задача простая — добавить префикс из того самого sha1$15000$mysalt$

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

    DevMan
    @DevMan
    зависит от построения процесса отбора в конкретной конторе.
    одни отсылают всем, другие отсылают только интересным кандидатам.
    Ответ написан
    Комментировать
  • Существует ли тенденция на неадекватные требования на позиции Automation QA?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Для них тоже большая редкость - найти компанию с адекватным проектом и менеджментом ... и не клянчить повышения?

    Это всюду большая редкость. За 20+ лет работы ни разу не сталкивался с руководством, которое само бы предложило тебе повысить зарплату - всегда это приходится либо выгрызать либо просто увольняться и искать новое место с более другой.
    Ответ написан
    Комментировать
  • Существует ли тенденция на неадекватные требования на позиции Automation QA?

    1) Сложность проектов постепенно растет, так как системы становятся все более обширными, многоканальными, интерактивными и так далее.

    2) Сложные системы требуют более опытных и способных специалистов. Поэтому начальный уровень человека, который может войти в индустрацию повышается.

    3) Большинство владельцев бизнеса думают, что новичкам можно мало платить. Но тут проблема в том, что текущие новички, это мидлы года 4-5 тому назада. Отсюда недопонимание.

    4) Ну и если специалисту платят много денег, то его хотят драть в три шкуры. Ибо раз высокая зп, то давай и продуктивность выше.

    5) Всегда есть жопные проекты и жопные позицию, поэтому надо стремиться понять, где трахают, а где можно работать комфортно и занимать комфортные позиции.
    Ответ написан
    Комментировать
  • Существует ли тенденция на неадекватные требования на позиции Automation QA?

    opium
    @opium
    Просто люблю качественно работать
    В целом ситуация такая, в крупных компаниях все относительно на рынке хорошо, утрясаются все алгоритмы работы и все идёт как по накатанной.
    В мелкой народу меньше и времени на это меньше и все сильно подстроить под себя в этом большой плюс, то есть пришел полный ппц, настроил ci и уже счастье
    Ответ написан
    Комментировать
  • Существует ли тенденция на неадекватные требования на позиции Automation QA?

    inoise
    @inoise Куратор тега Карьера в IT
    Solution Architect, AWS Certified, Serverless
    Это везде проблема где бизнес не имеет компетенции и ищет сотрудников. Это нормально
    Ответ написан
    Комментировать
  • TOP linux - как понять?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    htop поставьте, он нагляднее
    Ответ написан
    2 комментария
  • Как вместо текста, сделать редирект в php? const ERROR = редирект?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    В этой строке — никак.
    Нужно найти место, где она используется и вставить редирект туда.
    Ответ написан
    Комментировать
  • Как сформировать списки с лимитом на вложения?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Если Вы используете MySQL 8.0 и старше, можно написать такой запрос:
    select *
    from (
      select
    	clients.*,
    	groups.title `group`, 
    	row_number() over (partition by clients.id order by clients.id) rn -- order may be different
      from clients
      join `groups` on groups.id = clients.group_id
    ) client_groups
    where rn < 10


    MySQL fiddle
    Ответ написан
    Комментировать
  • Как внутри докера установить php7.4-gd и разрешить его в настройках PHP?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    вместо
    RUN apt-get install -y php7.4-gd
    сделайте
    RUN apt-get install -y libpng-dev  &&  docker-php-ext-install gd
    Ответ написан
    1 комментарий
  • В чём смысл ContainerExceptionInterface в PSR-11?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    В том, чтобы фреймворки и библиотеки эти интерфейсы реализовывали в виде своих исключений, но при этом не нужно было на эта конкретные реализации завязываться. Словом, смысл такой же, как и у любого другого интерфейса.
    Ответ написан
    6 комментариев
  • Как избежать нежелательных преобразований типов данных при извлечении их из MySQL?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    для чисел с привязкой к mysqlnd
    https://www.php.net/manual/ru/mysqli.options.php
    MYSQLI_OPT_INT_AND_FLOAT_NATIVE
    Преобразовывает столбцы типов integer и float к числам PHP, а не строкам. Работает только с mysqlnd.


    Но как по мне, самое логичное это принудительное преобразование результатов к нужному типу.
    Можете посмотреть как это сделано в Doctrine DBAL, в частности раздел Mapping Matrix https://www.doctrine-project.org/projects/doctrine...
    Ответ написан
    Комментировать
  • Что значат три точки в public function hasRole(... $roles )?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Комментировать
  • Зачем вообще использовать брокеры очередей?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В первую очередь брокеры нужны для балансировки нагрузки и увеличения надежности и скорости работы системы в целом.

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

    В случае работы с сайтом у вас будет 1 воркер, который будет просто сканировать таблицы на поиск неуведомленных пользователей. Если у вас будет 2 воркера, надо делать систему блокировок и т.д. Т.е. мы упираемся в проблему масштабирования. Для решения задачи разной скорости уведомлений, вы построите систему приоритетов или будете делать разные таблицы с разными воркерами. Это все будет работать, но нагрузка на базу будет серьезной и она будет увеличиваться с ростом пользовательской базы. Опять вы упретесь в тормоза.
    Опять же есть письма, которые должны быть доставлены немедленно, вроде подтверждений аккаунта, смены пароля и т.д. Еще одна таблица? Дополнительный приоритет? Может так произойти, что вы некоторые пользователи вообще никогда не получат писем и уведомлений. Прийдется придумывать способ контроля.
    Я уж не говорю о куче кастомных воркеров под каждую ситуацию. И их будет с десяток, не меньше.

    Очереди решают, т.к. можно сделать их несколько и на для каждой настроить определенное количество абсолютно одинаковых воркеров. Пример с поллингом отвратителен и сейчас никто так не делает, а с очередями делают так.
    У вас может быть цепочка из нескольких воркеров, когда результат работы одного помещается в очередь.
    Например, когда надо сначала достать данные из нескольких разных медленных систем, отрендерить в шаблон, а потом отправить письмо. Сборка, рендеринг и отправка - три разные компонента, последние два из которых, можно активно переиспользовать для других целей изменяя лишь конфигурацию времени исполнения.
    При таком подходе проще развивать кодовую базу, исправлять ошибки, т.к. они изолированы в одном месте, а не разбросаны по всей системе. И да, косяк в "горячем" модуле вы заметите немедленно. А самое прикольное то, что ваш косяк, пользователи и не заметят, для них это будет выглядеть как простая задержка, а у вас будет время на то, чтобы исправить ошибку. Сообщения посидят в очереди и все.
    Но это еще не все, ваши воркеры могут быть написаны на разных языках программирования. Например пользователь может загружать фото на сайт на PHP, объекты распознаваться на Python, видео рендериться на Rust, а отправка писем может быть на Go. И такой подход может подойти для сложных систем с распределенными командами и различным уровнем компетенция в применяемых технологиях. Специалистов превосходно владеющих всеми приведенными технологиями просто единицы, и поверьте, они решают задачи совершенно другого уровня.
    Ответ написан
    Комментировать
  • Зачем вообще использовать брокеры очередей?

    Очередь это буфер, куда задачи попадают с разной скоростью, а из него сливаются равномерно, по мере готовности «рабочих» их принять.

    В вопросе описана так-себе реализация с поллингом очереди. Различие без-очереди и с-очередью — в направлении инициативы:
    • без очередей «рабочий» опрашивает базу снова и снова: «есть чё?». Это как из браузера ajax'ом пинговать сервер раз в секунду в поиске сообщений. Работает, но такое себе..
    • с очередью инициатор процесса – брокер. Это брокер передаёт очередную задачу на исполнение первому освободившемуся «рабочему».

    spoiler
    Про потерю данных при падении — че-т страшилка, далёкая от продакшена. Драйвером очереди может быть и Redis (со своей персистентностью) и MySQL какой-нибудь, и другие. Имхо костыльно пихать в очередь всего лишь id записи в БД, которую надо обработать – чтобы рабочий, взявший задачу, заново собирал данные. Это не кошерно и калорийно.

    Лучше класть в очередь самодостаточную задачу. Например, сериализовать модель. Чтобы рабочий, получивший задачу, уже не обращался к базе – а только наполнял темплейт письма данными из полученной модели и отправлял послание. И в БД проставлял статус «отправлено»
    Ответ написан
    Комментировать
  • Зачем вообще использовать брокеры очередей?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    а брокеры очередей в случае падения теряют данные.

    Это неверно.
    Брокеры бывают разные и настроены по разному.
    В общем случае, брокер - вещь гораздо более легковесная, чем база данных. Гораздо проще масштабируется и кластеризируется, чем база данных. Да и работает в основном гораздо быстрее.

    Но в вашем случае - отправлять уведомление пользователю, это не совсем задача для брокеров. Брокеры в основном нужны для общения микросервисов/программ друг с другом.
    Ответ написан
    1 комментарий
  • Такие ли условия работы на бирже Crossover?

    @Kostik_1993
    Web Developer
    Давным давно, когда еще был еще Junior я работал на проекте за 10$ час, отчеты в часах я давал еженедельно тимлиду (он сверял или нет я хз) и получал примерно 100к в месяц. Работа была не пыльная, график свободный, все нравилось. Потом проект загнулся и я попал в другой, где была ставка 15$, но было условие работать с программой hubstaff (аналогичная WorkSmart). В целом никто не докапывался, но тогда я понял что это такое. Во первых твой компьютер уже не твой, все что ты на нем делаешь может быть заскринено программой. Тут я не больше за какаой-то обман говорю что работаю не над тем или что-то подобное, а элементарно жена могла прислать что-то личное в месенджере и это уже было в общей папке скринов. Второй момент, отдых между задачами, куда-то отойти, постоянно тыкать кнопку вкл/выкл сложно и иногда ты об этом забываешь, а в это время программа пишет тебе нулевую активность. И третий самый противный момент такой работы это то, что время тянется ооооочеееееееньььььь долго, словно ты попал на другую планету. Просидев целую кучу времени и вымотавшись как хз кто ты думая что осталось еще не много и рабочий день закончен, но нет, таймер говорит что прошло всего часа 4 и работать тебе еще долго.

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

    Какие там условия лучше спросить у работников, а вот что они из себя представляют я описал выше
    Ответ написан
    1 комментарий
  • Зависает линукс намертво как исправить?

    hint000
    @hint000
    у админа три руки
    Ну это не Линукс зависает, а вы неправильно конфигурируете виртуальную машину.
    В сообщении вполне ясно сказано, что диск переполнен, нет места на диске.
    Ответ написан
    Комментировать
  • Что делать, если количество таблиц связей многие-ко-многим начинает превышать все разумные пределы?

    27cm
    @27cm Автор вопроса
    TODO: Написать статус
    Где можно почитать о практике использования такого подхода?

    Что такое полиморфные связи?
    Полиморфные связи
    Полиморфные связи для самых маленьких

    Какие есть альтернативы?

    Построение таблиц «Один-к-разным»
    Ответ написан
    Комментировать