• Какими наводящими вопросами деликатно определить, процветает ли в компании микроменеджмент либо нет?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Прямо спрашиваешь, кто будет давать мне задачи и кто будет контролировать.
    Есть ли почасовой контроль какими-либо инструментами.

    Ваш вопрос про "какая оплата" - ВООБЩЕ не про это.
    Может быть даже, что в компании может быть несколько проектов/команд и на какой-то одном проекте сидит "эффективный" менеджер, который увлекается микроменеджментом.
    Ответ написан
    Комментировать
  • Как в каждый ответ в API добавить данные при выполнении определенных условий?

    @daniel_wesson
    Я бы действительно сделал через middleware типо AttachConfigToResponse
    public function handle(Request $request, Closure $next): Response
    {
        $response = $next($request);
    
        $json = $response->getData();
        $json['config'] = ...;
    
        $response->setData($json);
    
        return $response;
    }
    Ответ написан
    1 комментарий
  • Почему вторая функция выполняется раньше если стоит await?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Скорее всего, внутри changeType ты запускаешь какую-то асинхронную действию, но не ждёшь окончания оной. Без кода непонятно.
    Ответ написан
    2 комментария
  • Laravel. Как тестировать кэширование?

    Если кэшируются не сырые данные из базы, а данные сформированные для ответа - можно добавить кастомный заголовок информирующий о работающем кешировании. Какой-нибудь Age к примеру.

    Это в том числе позволит писать функциональные тесты без необходимости мокать кэш, и при этом понимать работает ли он.
    Ответ написан
    Комментировать
  • Как максимально быстро добавить огромное количество записей в БД без дублей?

    Frostealth
    @Frostealth
    Backend Developer
    Как вариант: отфильтровать `$numbers` на стороне PHP и вставить пачкой.

    // избавляемся от возможных дубликатов
    $numbers = collect($numbers)->unique();
    // pluck('num') вернет нам список значений атрибута num, а не список моделей
    $existingNumbers = Model::query()->whereIn('num', $numbers->toArray())->pluck('num');
    // с помощью diff получаем элементы, которых нет в $existingNumbers
    $newNumbers = $existingNumbers->diff($numbers)->mapWithKeys(function ($value, $key) {
        // ['one', 'two'] => [['num' => 'one'], ['num' => 'two']]
        return [$key => ['num' => $value]];
    });
    
    Model::query()->getConnection()->transaction(function () use ($newNumbers) {
        Model::query()->insert($newNumbers->toArray()); 
    });


    При очень больших данных в БД нужно вытаскивать из БД чанками (пачками определенного размера, например по 500 000), а не сразу все.
    // избавляемся от возможных дубликатов
    $newNumbers = collect($numbers)->unique();
    Model::query()->toBase()->whereIn('num', $numbers->toArray())
          ->chunk(500000, function ($existingNumbers) use (&$newNumbers) {
               // с помощью diff получаем элементы, которых нет в $existingNumbers
              $newNumbers = $newNumbers->diff($existingNumbers);
          });
    
    // ['one', 'two'] => [['num' => 'one'], ['num' => 'two']]
    $newNumbers = $newNumbers->mapWithKeys(function ($value, $key) {
        return [$key => ['num' => $value]];
    });
    
    Model::query()->getConnection()->transaction(function () use ($newNumbers) {
        Model::query()->insert($newNumbers->toArray()); 
    });


    Также можно воспользоваться ON CONFLICT, если СУБД поддерживает подобное. Например, у SQLite - ON CONFLICT DO, у MySQL - INSERT IGNORE. Это позволит избавиться от выгрузки данных из БД, что уменьшит потребление памяти приложением и сократит количество запросов.
    Laravel имеет для этого метод Query::insertOrIgnore(), который будет глушить все ошибки от некоторых БД, но для некоторых не поддерживается. Поддерживаемые БД: MySQL, SQLite, PostreSQL.
    Необходимо, чтобы на атрибут `num` в БД стоял constraint unique, иначе БД просто вставит дубликат.
    $numbers = collect($numbers)->unique()->mapWithKeys(function ($value, $key) {
        return [$key => ['num' => $value]];
    });
    
    Model::query()->getConnection()->transaction(function () use ($numbers) {
        Model::query()->insertOrIgnore($numbers->toArray());
    });


    Индексы и explain изучить не помешает. Размер чанка подобрать по возможностям железа.
    Индекс на num значительно ускорит выборку, но скорость вставки снизится.
    Так же отказ от ORM (Eloquent), объектов и использование голого SQL с PDO ускорит работу.
    На большие данные и нагрузки нужно мощное железо. Может потребоваться масштабирование и т.д.
    Ответ написан
    Комментировать
  • По какой причине выдает ошибка в TypeScript?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    А так?
    searhcField: keyof Post
    Ответ написан
    2 комментария
  • Какие порекомендуете сайты с набором элементов UI?

    scoffs
    @scoffs
    Frontend | C# | Student
    Я бы советовал посмотреть в сторону более современных UI библиотек, например, MUI или Tailwindcss
    Ответ написан
    Комментировать
  • Как получить второй id из url?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Просто добавьте все параметры которые есть в роуте.
    Используйте биндинг, что бы сразу в параметре получить объект.

    public function productPage(Category $category, Product $product){
        // $currentProduct = Product::find($product); это уже не нужно
        // В переменной $product уже будет объект
        return view('product', compact('product'));
    }
    Ответ написан
    Комментировать
  • Какой вариант организации домашней виртуализации выбрать?

    @rPman
    Зачем? очень важный вопрос, зачем платить ресурсами (память, процессор, накладные расходы дает даже паравиртуализация lxc) да еще и устраивать многоуровневые системы для хранения данных?

    Все активно забывают, что доступ к файлам по сети в домашних конфигурациях (это 1гбит) - медленно, больше сотни мегабайт в секунду не получится, плюс заметный оверхед на протоколы (самба дает заметный, особенно это видно когда с мелкими файлами работаешь), плюс нагрузка на процессор NAS (например iscsi выше нагружает чем простой nbd).

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

    Как это ни странно, самая удобная система виртуализации для домашнего пользователя (нет кластера и его фишек) - это VirtualBox

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

    Fragster
    @Fragster
    помогло? отметь решением!
    Оптимальнее всего сделать это либо средствами firewall, если это выделенный сервер, либо с помощью настроек веб сервера, если это сервер с несколькими приложениями. Можно, конечно, и middleware с проверкой ip написать, но только если этот список ip хранится в базе данных.
    Ответ написан
    Комментировать
  • Почему все называют TypeScript компилируемым языком программирования?

    vabka
    @vabka
    Токсичный шарпист
    1. Если душнить, то никто не называет TypeScript компилируемым языком.
    Вот например что написано на официальном сайте на самом верху:

    TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.


    2. У typescript есть компилятор tsc - его называют компилятором, потому что он по определению им является.

    Но стоп, компиляция - это процесс перевода "человеческого" кода в машинный код.

    Нет. Даже если брать определение из википедии, то будет:

    In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language).

    Никакой речи о "машинном коде" нет, как видишь)

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

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

    2. В англоязычном интернете transpiler наоборот являются подмножеством compiler.
    Compiler - такая программа, которая преобразует код с одного языка на другой, причём из одного файла может получиться N файлов.
    А tanspiler - это такая программа, которая берёт исходный код на одном языке, и преобразует его в исходный код на другом языке, причём 1 файл преобразуется ровно в 1 файл.

    Получается, что tsc - это транслятор/транспайлер, а причислять их к компиляторам или нет - это дискуссионный вопрос.
    Ответ написан
    2 комментария
  • Какие преимущества использования pinia/vuex в Vue3?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Автор Pinia вот в этом issue отвечал на вопрос, с тех пор ничего не изменилось :)
    Ответ написан
    Комментировать
  • Как правильно просить повышения зарплаты?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Вообще, вполне можно прямо вот так всё и рассказать начальству, как вы здесь написали.
    1. На настоящий момент я закрываю почти все таски на .Net
    2. Приставленный к моему проекту PM уже почти не участвует в моём проекте, я справляюсь сам.
    3. С момента трудоустройства вопрос о повышении зарплаты не поднимался, кажется пришло время, обычно зарплата пересматривается два раза в год.

    Удобный момент любой, вот прямо завтра идите к начальнику и говорите.
    Если захотите предварительно получить реальный оффер со стороны, он придаст вам уверенности, и даст последний аргумент, на случай если начальство не захочет повышать зарплату, а так, можете о нем даже не упоминать.
    Ответ написан
    2 комментария
  • Как на Laravel + Vue на страницах реализовать проверку авторизации?

    @sikorsi
    Посмотрите в сторону Sunctum - https://laravel.com/docs/10.x/sanctum
    Ответ написан
    Комментировать
  • Как сделать BILLManager бесплатно?

    Sanes
    @Sanes
    Или плати или сам пиши биллинг. Ты же бизнесом занимаешься.
    Ответ написан
    Комментировать
  • Тег < p > и < span >. Есть разница?

    LenovoId
    @LenovoId
    svg, css,js
    Ну если к примеру мы захотим выделить текст каким то цветом .. ни весь а к примеру какие то отдельные слова . это просто удобнее сделать не блочным тегом а именно строчным, к примеру как: https://codepen.io/topicstarter/pen/oNazwQX и нам для этого не надо писать кучу css что бы сделать параграф внутри параграфа инлайновым ... Вообще тег<p> это обычный параграф и не более того который без css работает как div в отличии от span который по сути тот же div только строчный но оба 'несут за под капотом' строки,текст
    Ответ написан
    Комментировать
  • Отправка email уведомления Ларавель с реального сервера?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Настройте на своём сервере SMTP и укажите его параметры в ларавел.
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.timeweb.ru
    MAIL_PORT=2525
    MAIL_USERNAME=info@*****.com
    MAIL_PASSWORD=*****
    MAIL_ENCRYPTION=null
    MAIL_FROM_ADDRESS=info@****.com
    MAIL_FROM_NAME="MySite"
    Ответ написан
    1 комментарий
  • Где посмотреть весть список действий для шлюза?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Есть простой вариант:
    dump(array_keys(\Illuminate\Support\Facades\Gate::abilities()));


    Вариант посложнее: найти в своём коде вызовы Gate::define(), а потом в документации используемых библиотек посмотреть определяют ли они какие-нибудь гейты.
    Ответ написан
    2 комментария
  • Почему гифка на экспорте из Premiere весит в 90 раз больше?

    GavriKos
    @GavriKos
    Ну сравнивайте чем они отличаются. Разрешение, количество кадров, цветовая палитра.
    Ответ написан
  • Как правильно организовать отправку уведомлений по разным каналам на выбор пользователя в Laravel?

    Fragster
    @Fragster
    помогло? отметь решением!
    ну так в https://laravel.com/docs/master/notifications#spec... аргумент - это твой пользователь же. Там и определяй из его настроек то, куда слать.
    Ответ написан
    1 комментарий