Задать вопрос
  • Реально ли работать в одном IT-проекте (продуктовом) больше 5-ти лет и не деградировать профессионально?

    Jacen11
    @Jacen11
    Мой вопрос: реально ли развиваться в течение 5-ти лет и больше в одном продуктовом проекте и не деградировать?
    конечно возможно, почему бы и нет? Вот только человек со сменой работ будет прогрессировать быстрее и ему проще будет с этим
    Ответ написан
    3 комментария
  • Чем отличаются видеокарты с одним чипом разных вендоров?

    Различие в системе охлаждения и схеме питания.
    Ещё различия могут быть в физических размерах.
    Иногда ещё память может различаться (производитель памяти: hynix / samsung)
    Ещё вендоры могут разгон из коробки свой сделать.

    NVIDIA GeForce RTX 3060

    Скорее всего, речь о Founders Edition, которые нвидия продаёт на старте.
    Никаких преимуществ перед другими вендорами нет.
    Ответ написан
    Комментировать
  • Создания уникального чата: sql, node, socket.io?

    @alexalexes
    Есть роль А И B. Только роль A может начать чат с ролью B

    Роли у пользователей заданы на уровне учетной записи и не меняются от чата к чату или определяются в момент создания чата?
    То есть при создании чата будут определена роль администратора (создателя) которая будет более привилегирована, чем тот, кому он пишет?
    Чат может содержать только 2х лиц

    Вы очень оптимистичны, выставляя такое ограничение. В следующей итерации разработки вам захочется сделать функционал группового чата. Тогда наличие колонок user_id, second_user_id вам встанет боком.
    В таблицу chat лучше добавить такие колонки:
    id - идент. чата
    date_create - дата создания
    id_user_creator - кто создал чат
    title - название чата (в этой итерации разработки можно не вставлять)
    Для участников чата лучше предусмотреть таблицу chat_participant:
    id - идент. участника
    id_chat - идент. чата из таблицы chat
    id_role - роль в чате (если она определяется в момент создания, для группового чата)
    id_user - пользователь чата
    id_last_read_message - идент. последнего прочитанного сообщения (самый простой вариант, как отмечать что прочитано, и потом определять, есть ли новые сообщения)
    date_include - дата вступления в чат (для группового чата)
    date_exclude - дата исключения из чата (для группового чата)
    Для сообщений чата - таблица chat_message:
    id - id сообщения
    id_partic/id_user - автор сообщения (можно реализовать как по ключу от таблицы участника, так и по таблице пользователей)
    date_create - дата создания сообщения
    date_update - дата обновления сообщения (для продвинутого функционала редактирования сообщений)
    date_delete - дата удаления сообщения (для продвинутого функционала редактирования сообщений)
    text_message - текст сообщения
    Если совсем хотите быть продвинуты в функционале редактирования сообщений, то вы захотите хранить историю изменения сообщений в таблице chat_message_history:
    id - идент. истории
    id_next - указатель на следующую запись истории
    id_message - идент. сообщения
    date_change - дата изменения сообщения
    id_user/id_partic - кто изменил
    text_message - состояние текста сообщения
    Ответ написан
    Комментировать
  • Можно ли отследить завершение всех синхронных post запросов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если запросы вызываются синхронно, то цикл закончится только после завершения всех запросов, ничего дополнительно отслеживать не надо.
    Но, вроде, во всех современных браузерах синхронные запросы запрещены и надо использовать Promise.all.
    Ответ написан
    2 комментария
  • Как найти технического редактора?

    pragmatik
    @pragmatik Куратор тега Хабр
    Имхо, разумнее всего разместить заказ на редактирование статьи https://freelance.habr.com/tasks
    Ответ написан
    Комментировать
  • Чем проверить безопасность сайта?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Заказать комплексный аудит безопасности.
    Ответ написан
  • Как сделать, чтобы письма не попадали в спам?

    @Romjkez
    1) Используйте библиотеки для отправки emai'ов
    2) Также можно отладить заспамленность отправляемого письма с помощью сервиса https://mailtrap.io/
    Там есть раздел, показывающий, что в вашем письме влияет на вероятность попадания в "Спам"
    614daedd4794a412787499.png
    Ответ написан
    Комментировать
  • Laravel очереди на другом сервере?

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    Так джоб может использовать всё что угодно чтобы выполниться, как вы хотите чтобы это работало без кода? Если нужен сервис какой-нибудь, модель из базы достать, в базу сохранить и т.д.

    Чтобы поднять очереди на другом сервере надо настроить общий редис и общую базу, тогда джобы будут балансироваться между серверами.

    Но деплоить надо полноценно приложение на оба сервера.

    Можно конечно сделать отдельные консюмеры на отдельном сервере чтобы там чисто один скрипт лежал, но это и будет работать вне ларавела полностью. Т.е. не сможете использовать сервисы, eloquent, модели и всё остальное из ларавела. В чем смысл.

    Пора изучить деплой на несколько серверов. А точнее в принципе деплой автоматический поднять, а сколько там серверов надо развернуть ему пофиг.
    Ответ написан
    Комментировать
  • Как организовать парсер с помощью очередей в Laravel Horizon?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Во-первых, ты путаешь понятие «очередь» и «задание в очереди».

    Во-вторых, надо не изобретать какие-то костыли на кроне, а начать читать документацию. Там и про разделение на разные очереди, и про ограничение одновременно исполняемого количества заданий, и про интервалы между выполнением заданий, и много про что ещё.

    Если кратко: создаёшь 20 очередей, каждой по одному воркеру с параметром --sleep=1.
    Ответ написан
    5 комментариев
  • Как получить название ключа массива?

    kawabanga
    @kawabanga
    RTFFFFFM
    https://www.php.net/manual/ru/control-structures.f...

    foreach($data['questions'] as $key=>$value)
    Ответ написан
    Комментировать
  • Каковы шансы сломать ноутбук при добавлении в него новых комплектующих?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Для нуба - большие.

    Ноут - это как большая мобила - крайне точная и крайне плотная компоновка.

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

    vabka
    @vabka Куратор тега Веб-разработка
    открываешь страницу, и через f12 в devtools всё видно.
    Вкладка Network
    Ответ написан
    5 комментариев
  • Как перенести все данные с системного SSD на другой SSD?

    Slayer_nn
    @Slayer_nn Куратор тега Windows
    Гугол, памаги!
    Не, ну реально. Первая ссылка
    https://remontka.pro/perenesti-windows-na-drugoi-disk/

    Я использую aomei, т.к он бесплатен
    Ответ написан
  • Каковы шансы сломать ноутбук при добавлении в него новых комплектующих?

    gbg
    @gbg Куратор тега Железо
    Любые ответы на любые вопросы
    САМЫЙ ВАЖНЫЙ ДИСКЛЕЙМЕР
    Или почему нужна куча инструментов и оснастки, а не стол с газеткой и батина отвертка

    Ноутбук вы купили за XXX баксов. На заводе его собирали при помощи подходящей к винтам биты, механическим винтовертом с правильным моментом затяжки. При этом, ноутбук находился на антистатическом мате, а каждый винт был обработан фиксатором резьбы.

    Если в результате вмешательства винты будут побиты плохим инструментом, часть будет утеряна сразу, а часть - когда вывернутся (без фиксатора резьбы), ноутбук уже будет корчом (и не будет стоить свои XXX баксов).

    САМЫЙ ВАЖНЫЙ ДИСКЛЕЙМЕР КОНЧИЛСЯ

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

    В частности, вы не будете чувствовать руками, когда усилия можно прилагать, а когда не следует, когда винт затянулся, а когда резьба уже пошла срываться. Когда пластик можно тянуть, а когда он уже вот прямо сейчас собирается поломаться.

    Мануальные навыки можно получить только на практике, никакой учебник или ютюб не передаст вам ощущения "вот так вот не надо, надо вот так!" (тикток тоже не поможет).

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

    3) Немаловажно иметь инструмент и оснастку. Антистатический мат для работы гораздо лучше стола, накрытого газеткой, отвертка должна быть не взятая у деда еще советская, а именно с тем типом шлица, который вам нужно отвинчивать (иначе слизанный крепеж гарантирован). Винты в ноутбуке, как правило, сидят на фиксаторе резьбы, который тоже надо купить и использовать - иначе через время они вывернутся, выпадут и утеряются (или весело коротнут что-то внутри)

    Таким образом, чтобы сделать эту операцию качественно, надо иметь:

    • пластиковые шпатели или заточенную кредитку для вскрытия корпуса. Нет, не надо брать у подручного балалаечника медиатор - он предназначен для игры на балалайке, - у него слишком маленькая площадь, за него будет тяжело ухватиться.
    • фиксатор резьбы
    • кассета с ячейками, куда вы будете складывать снятый крепеж. Не в кучку на столе, не в перевернутую крышку - а в кассету. Чтобы потом, просматривая видеосъемку того, как вы разбирали, вы ловко брали нужные винтики и сажали их на место. Иначе можно засадить более длинный винтик вместо штатного и тупо продырявить материнку, накопитель, память, или просто корпус.
    • подходящие отвертки, причем желательно не из магазина "все по 35р.". Отвертка, слизанная об винт - это шедевер!
    • одежда не должна быть из синтетики, а то будет весело
    • Нужны знания и навыки о том, как все перечисленное выше правильно и безопасно применять на практике
    Ответ написан
    3 комментария
  • Почему let x не попадает в window?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Мужик, ну ты хотя бы документацию прочитай, прежде чем вопрос задавать!!!

    Вот с MDN цитата

    На верхнем уровне скриптов и функций let, в отличии от var, не создаёт свойства на глобальном объекте.


    ДОКУМЕНТАЦИЯ!!! – наше всё.
    Ответ написан
    13 комментариев
  • Laravel middlaware auth:api возвращает HTML, почему?

    Нужно в postman вместо

    Content-Type : application/json
    поставить
    Accept : application/json

    Content-Type - указывает какой тип контента отправит клиент
    Accept - указывает какой тип контента ожидает от сервера

    Поэтому laravel воспринимает клиента как браузер и отдает html а не json
    Ответ написан
    Комментировать
  • Почему может тормозить Samsung 980 PRO?

    @Wexter
    Так написано же что он подключен по 3.0 x2, вместо 4.0 х4. Поэтому и скорость низкая
    614875a62a9cb853215420.png
    Ответ написан
    7 комментариев
  • Как прописать в договоре на создание сайта, что таким подобным проектом мы заниматься не будем?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Все договоры должны составлять профессиональные юристы. Одно неверное слово, которое можно трактовать двояко - и ваш бизнес под вопросом закрытия, суды и штрафы
    Ответ написан
    Комментировать
  • Как защитить контент от парсинга с помощью Nginx?

    @rPman
    Основная защита от парсинга - только при доступе к данным по авторизации и установка лимитов на данные (объем, доступный пользователю либо за какой то период времени, например сутки/месяц).

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

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

    Можно поставить 'палки в колеса', сделав этот процесс сложнее (и дороже), в основном это запутывание/шифрование данных, доступных напрямую (по api) с бакэнда и обфускация кода, его преобразования в видимый пользователю контент, чтобы классические (дешевые) инструменты не работали. Как всегда стоимость защиты (затрат на разработку) должна быть сравнима затрат граберов на получение данных (обычно им проще).
    К сожалению вместе с контент-грабером, в заблуждение будут введены роботы поисковых систем, ведь их основная работа - грабить контент.
    spoiler
    * api не должен быть простым и интуитивно понятным, идентификаторы могут вообще не быть постоянными (их можно преобразовывать на бакэнде на основе данных в сессии)
    * код javascipt, например получения ссылки на объект должен быть нетривиальным, т.е. чтобы получить следующую ссылку на требуемый граберу объект, потребовалось бы использовать сам браузер (а не простенький скрипт парсер html)
    * верстка может быть непостоянной, изменяющиеся, простые гуляющие наименования классов и идентификаторов уже могут создать кучу проблем (я такое встречал), а уж постоянное изменение структуры должно совсем запудрить голову даже опытным граберам (не встречал)
    * шрифт может не являться правильным (видимые символы могут не соответствовать их кодам), при этом генерируемый каждый раз новый под конкретную сессию пользователя. Простая подстановка, сильно усложнит (но не сделает невозможной) получение данных через буфер или document.innerText в консоли браузера, оставив граберу только вариант распознавание экрана скринридером (а не тривиальная верстка потребует от пользователя сложную настройку и автоматизацию и эти инструменты)
    * типовые javascript методы браузера должны быть замещены на 'неправильно работающие', чтобы граберу пришлось использовать внешние скрипты а не простой инжект javascript (обычно это сильно упрощает).
    Ответ написан
    3 комментария