Задать вопрос
  • GitLab Как сделать автоматическую проверку кода при push или merge request с уведомлением разработчика о результате и получением от него обр. связи?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Да, возможно. Поднимаете отдельный CI/CD сервер, создаете задачу с нужным вам функционалом и на этом сервере её запускаете. Отчёт можно любым приложением/скриптом отправить/залить куда и как угодно. Например, можно сразу в коммит или в запрос запостить сообщение через API: https://docs.gitlab.com/api/commits/#post-comment-...
    А при появлении сообщения в коммите/запросе гитлаб автоматом оповещает всех причастных, кто подписан. Просто настройте нужные вам оповещения — можно ботом в чат их слать в ТМ, на почту или ещё куда угодно.
    Так же гитлаб поддерживает стандартные форматы отчётов тестов из коробки, что позволяет сразу в интерфейсе гитлаба увидеть все результаты тестов. Возможно в вашем случае это подойдёт, возможно нет.
    Отдельный сервер нужен для того, чтобы не создавать проблемы и тормоза на основном сервере, где запущен гитлаб. А если запускаете на том же — убедитесь в установке ограничений производительности для задач. Иначе, когда у вас будет запускаться по сотне или даже тысяче задач в день — будет не очень комфортно работать с гитлабом.

    2. Это не имеет смысла. Пуш — это по факту просто загрузка коммита на сервер. Есть PR — он легко блокируется через подтверждение со стороны определённых пользователей или групп пользователей, а так же в случае если задача завершилась с ошибкой. Это всё настраивается в настройках. Вам следует просто правильно организовать рабочий процесс. Используйте стандартный Github Flow. PR для того и придуманы, чтобы в PR принимать или отклонять изменения. Не, так-то если очень хочется, то можно откатывать одиночные коммиты, но правильнее это делать через PR.

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

    4. Да, это стандартное поведение всех задач. Задача, обычно, запускается в контейнере и пока контейнер работает — статус задачи не меняется. Либо это отдельный скрипт на сервере, завершение которого гитлаб будет ждать. Задачу даже можно разбить на несколько стадий и по мере их завершения менять статус самой задачи, а результат можно даже в реальном времени в самом гитлабе в задаче наблюдать.
    Ответ написан
    Комментировать
  • Где можно хранить данные пользователя для синхронизации?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Firebase?
    Ответ написан
    Комментировать
  • Как лучше реализовать тесты на проекте с symfony и nextjs?

    opium
    @opium
    Просто люблю качественно работать
    у меня на похожем стеке (symfony + react, но суть та же) просто отдельный docker-compose.test.yml где бэк стартует с APP_ENV=test, а фронту кидаешь нужные env через .env.test. поднимаешь рядом на других портах и cypress бьёт туда. не пытайся переключать env у запущенного стека — проще поднять второй рядом
    Ответ написан
    Комментировать
  • Как быстро загружать файлы с телефона на компьютер?

    @Refguser
    Решения для бизнеса: корп.сайты, ИМ, боты и пр.
    Сотрудник генерирует QR код и даёт его клиенту. Код является ссылкой и у клиента открывается страница в браузере.

    Зачем в этой схеме QR?
    И что, лишние деньги на зарплату сотруднику?

    особенность в том, что каждому клиенту нужно создавать отдельную папку на сервере и уникальную ссылку. У клиента должен быть доступ только в свою папку.

    Это элементарная задача формы загрузки и никакие "решения" не нужны. (в см - это будет как "катюша" для отстрела мух)
    Ответ написан
    6 комментариев
  • Актуален ли yii2 в 2025?

    SamDark
    @SamDark
    Yii2 core team
    Актуален. Поддерживается. Нужно искать разработчика не на фреймворке, а просто нормального разработчика. Разобраться с фреймворком нормальный разработчик сможет довольно быстро.

    Сейчас в общем не очень хорошо с рынком труда, сам фреймворк тут не особо влияет.
    Ответ написан
    4 комментария
  • Почему INSERT присваивает только один символ вместо полного значения?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну, наверное, потому, что тип поля CHAR(1) - то есть более одного символа в поле тупо не помещается.
    Ответ написан
    Комментировать
  • Реклама в моем телеграм канале без разрешения?

    @maksam07
    С пробуждением
    https://ads.telegram.org/
    Ответ написан
    Комментировать
  • Я и есть тот самый джун с 3мя годами опыта?

    @a113ssa Автор вопроса
    Заметка от автора вопроса: Если кому интересно, чем все закончилось - то уже почти полгода работаю как Senior Python Developer (outsource)
    Ответ написан
    Комментировать
  • Как исправить код, чтобы shellcheck не ругался на одинарные кавычки?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Правильный способ - не насиловать sed/awk/etc, а по-нормальному шаблонизировать весь скрипт, чтобы комментарии не валялись вместе с переменными вперемешку с переносами строки.
    Ответ написан
    3 комментария
  • С чего начать изучение материала по направлению "Информационная безопасность"?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Есть :)

    Законодательство РФ. Особенно то, что касается авторских прав, персональных данных и преступлений в сфере ИТ (взломов и т.д.)
    Ответ написан
    2 комментария
  • Зачем for {select} оборачивать в еще один select с time.Ticker?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Вопрос - а зачем тут вообще нужен Ticker?

    Может быть против "дребезга контактов") На случай если ввиду каких либо причин сигналы m.triggerReload начнут сыпаться как из ведра (с оглушительной частотой)
    Ответ написан
    Комментировать
  • Какие книги по операционным системам для изучения?

    Lord_of_Rings
    @Lord_of_Rings
    Northern Strider
    увидел много хейта что она слишком абстрактная и поверхностная
    А вам бы сразу, не разобравшись, в потроха ОС лезть? Лучше Таненбаума в данном случае нет
    Ответ написан
    Комментировать
  • Что есть похожего на fail2ban, но с центральной базой забаненных?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Тяжело наверное, когда во всех поисковиках забанили, да?

    https://docs.iredmail.org/fail2ban.sql.html
    Ответ написан
    Комментировать
  • Как подключить одно рабочее место в сеть?

    @p4_pirate Автор вопроса
    Dumb Sysadmin
    ВСЕМ СПАСИБО, кто ответил. Решил следующим образом на Виндовом контроллере домена сделал запрет по MAC для конкретного оборудования и разрешения для всего остального зарезервированного. После этого поднял DHCP на роутере с выделением 5 IP адресов (10.1.10.101-105) и добавил их в ограничения IP и с контроллера домена перестала прилетать раздача на целевое железо, а стали прилетать с роутера с необходимым IP. При этом внутренние ресурсы работают как надо, т.к. он находится в одной подсети
    Ответ написан
    Комментировать
  • Какую IDE выбрать для разработки приложений под Linux?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Несколько лет писал его под Windows (C# в MS Visual Studio) ... На что посоветуете перейти? Надежд на перенос кодовой базы не питаю, смирился с тем, что придется писать с нуля.
    а в чем проблема?
    https://code.visualstudio.com/docs/setup/linux
    Нормально ли писать на C# на Linux Manjaro?
    Ответ написан
    Комментировать
  • Взлом пароля черз БД, хэш-пароля?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Создаете юзера с известным паролем. Потом полученный хэш тупо вписываете нужному юзеру. Были времена, пароль рута некоего сервера mysql так ломал...
    Ответ написан
    Комментировать
  • Как вывести крайние диалоги пользователей?

    kawabanga
    @kawabanga
    В общем ключе вот так -
    SELECT * FROM
    (SELECT max(id) as maxId, from_id 
    GROUP BY from_id
    WHERE from_id in (1,2,3)
    ORDER BY maxId desc
    ) as t1
    INNER JOIN messages m on t1.maxId = m.id


    ЧатГПТ Laravel далее код сгенерировал, выглядит корректно. Заметьте, что первую часть запроса в любом случае выполнять через Query Builder, но можно вывести ее в получение конкретных id последних сообщений. И дальше двумя, можно отдельными запросами уже через модель - получить данные по сообщениям и пользователям. Они будут работать по первичным ключам и срабатывать моментально.
    А можно просто добавить жадную загрузку по связи Users на втором запросе, что в целом облегчит вам задачу и не нужно будет связывать далее сообщение и его автора.
    // Подзапрос для получения maxId и from_id
    $subQuery = (new Query())
        ->select(['maxId' => 'MAX(id)', 'from_id'])
        ->from('messages')
        ->where(['from_id' => [1, 2, 3]])
        ->groupBy('from_id')
        ->orderBy(['maxId' => SORT_DESC]);
    
    // Основной запрос с INNER JOIN
    $query = (new Query())
        ->select('*')
        ->from(['t1' => $subQuery])
        ->innerJoin('messages m', 't1.maxId = m.id');
    
    // Выполнение запроса
    $results = $query->all();
    Ответ написан
    Комментировать
  • Есть эмулятор андроид с выбором модели телефона?

    @mnnoee
    Занимался я подобным, скажу сразу, вы сгорите от этого дела. В моем случае был интерес портировать miui 10 в виртуалку, пришлось ядро искать, разметку делать свою, конфиги менять
    Это был qemu с кастомным edk2 с грубом
    Ядро было андроидовское майнлан
    Раздел вендора был дополнен драйверами из виртуалки aarch64 официального эмулятора андроид

    Запустилось ли в итоге? Да
    Работало ли стабильно? Нет
    Ответ написан
    Комментировать
  • Обьясните в чём суть инкапсуляции?

    Инкапсуляция защищает не от хакеров, а от неправильного использования объектов.
    Как пример - у тебя может быть класс "Заказ" и у него может быть какой-то статус (оплачен/ждёт оплаты/отменён итд).
    При этом у тебя могут быть правила типа: уже оплаченный заказ не может стать вдруг неоплаченным, а отменённый заказ нельзя взять обратно в работу.
    Тогда логично будет сделать поле статуса приватным (не доступным для изменения извне напрямую), а менять его только через методы, где будет происходить вся валидация.
    (В некоторых языках такие правила принято описывать на уровне типов, чтобы даже валидаций никаких было делать не нужно)

    Приватные поля объекта - это его состояние.
    Методы объекта - это способы его использования.

    Если у тебя в объекте появляется поле x и методы getX / setX (или авто геттеры/сеттеры в C#), то значит, что у тебя и нет явных причин делать это поле приватным, кроме соблюдения общепринятых соглашений.
    Ответ написан
    15 комментариев