Задать вопрос
  • Как правильно строить крупный проект?

    @vism
    Называется, услышал звон, да не знаю где он.

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

    2. CategoryQuery - это вобще дичь дикая.
    Ты опять создаёшь дубликат, потому что услышал о репозиториях, и даже интерфейс. Вот я угараю с людей, кто везде пихает интерфейсы. Интерфейсы нужны там, где они нужны. Где будет 2+ наследователей интерфейса.
    Откуда у тебя тут наследники, если ты завязан на элокуент?
    А ноги от индусов репозитаристов. Не нужен репозитарий, Query и интерфейсы при работе в элокуент. Он сам в себе это всё уже содержит и все повторяющиеся вещи обёрнуты уже. find, first, firstOrNew и т.д.
    Так что используй элокуент и не переусложняй проект напрасно. Не надо делать сложно, делай просто.

    3. CategoryAction.
    Опять интерфейс...
    Вот это Экшн по сути у тебя сервис. Тут ты имеено перенёс бизнес логику создания и редактирования и возвращаешь ответ данного метода. Вот удали свой CategoryAction и перенеси методы в сервис.
    Ответ написан
    30 комментариев
  • Как обходить защиту от записи экрана на сайте?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Проще некуда :) Запустить браузер в виртуалке, а запись экрана запустить на хостовой машине - виртуалка хрен что прочухает. Я так ролик с одной игры записывал.
    Ответ написан
    2 комментария
  • Стоит ли покупать компьютер с aliexpress?

    @spaceatmoon
    Сборка мусор. Не покупайте никогда ничего "из простого на время" если нет денег. Так вы хотя бы сэкономите. Про серверные процессы вообще забудьте, у них другая категория задач.

    Рекомендую следующую сборку которой вам хватит на 3 года и от которой у вас не будет гореть.
    1. Заменяем hdd на ssd. По деньгам одно и тоже, но профит в 500%.
    SSD 500GB за 3.7к рублей
    2. Лучше DDR4.
    3.5к за 8ГБ
    2.6к за 8ГБ чуть хуже, но вы не заметите
    Итого за 6к вы возьмете 16GB. Этого хватит ещё на долго.
    3. Материнку любую в пределах 6к берёте, но не самую галимую.
    4. Процессор берите со встроенным графическим процессором. Профит будет такой же как и от GTX 1060 3GB (да, она плоха).
    Рекомендую AMD Ryzen 3 PRO 3200G или типа того, можешь пошарить. Intel не бери, у них малый ресурс по задачам, любая задача превращается в 100% утилизацию процессора, а это проблемы с охлаждением. Итого 14к на процессор. На нём никогда не экономь. Ведь к примеру видеокарта несмотря на свою стоимость в 90% случаев тупо простаивает, а стоит она больше всех.

    Считаем - 6 + 6 + 6 + 14 = 32 тысячи рублей. При этом сборка будет современна, радовать глаз и есть возможность её усовершенствовать, а хлам с алика ты выбросишь после полугода.
    Ответ написан
  • На каджую очередь отдельный воркер или в одном воркере несколько очередей?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Один на все. Через Horizon. Там можно балансировать процессы по очередям.

    horizon
    Ответ написан
    Комментировать
  • Почему не может работать класс и методами??

    @Dark_Dante
    Потому что у тебя в объявлении конструктора ___ - три подчеркивания, а должно быть два, __construct а не ___construct
    Ответ написан
    Комментировать
  • Как сделать чтобы по ide:// открывался PHPStorm в Windows?

    @sl0
    Под винду нужен PhpStormProtocol
    Ответ написан
    Комментировать
  • Как настроить cors в larave + node.js?

    @Andrei258 Автор вопроса
    Исправил таким образом

    var socket = io('http://myapp:6001', { transports : ['websocket'] });
    Ответ написан
    Комментировать
  • Где и как применять классы?

    @Rerurk
    Классы это просто удобная обёртка для создания какого либо view или объекта, к примеру есть у вас куча Product , для них нужна куча view. Это просто удобно и структурировано. Но для написания классов лучше использывать typescript.Правильно выше сказали что в js это сахар.
    Ответ написан
    Комментировать
  • Технический нейминг серверов. По какому принципу называть сервера?

    saboteur_kiev
    @saboteur_kiev Куратор тега Сетевое администрирование
    software engineer
    Зависит от твоего проекта и от количества машин.
    Если у тебя пара десятков машин - да как хочешь называй.
    Если пара сотен - какой-то конвеншн подойдет.
    Если тысячи - конкретный конвешн, скорее всего учитывающий инвентаризационные требования или локацию.

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

    Если у сервера нет конкретного назначения, используетс просто геолокация и бренд.

    ibm-ny-0519-01 - IBM, New York DC, 2019/Mar, 01
    hp-sf2-0619-01 - HP San-Francisco DC2, 2019/Jun, 01

    P.S.
    Но я понял главную твою проблему. Ты почему-то привязываешься к имени хоста, и забываешь что на хост можно добавить DNS алиас, и не один.

    Поэтому хостнейм машины - должен нести на себе инвентаризационные данные.
    А если на машине постоянно крутится какое-то конкретное приложение, добавляешь DNS алиас типа myapp.mycompany.intranet.com
    Если появляется еще одна "идея", то добавляется еще один DNS алиас myanotherapp.mycompany.intranet.com
    Если приложение выросло или требует других ресурсов - оно уезжает на другой хост вместе со своим алиасом, и все довольны.
    Ответ написан
    8 комментариев
  • Кто-нибудь знает как вывести php artisan route:list с нормальным форматированием?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Переписать команду. Можно исходник дернуть из девятой ларки и сделать из него свою команду.

    Создаем команду

    php artisan make:command RouteListCommand

    Копируем в созданный файл содержимое отсюда https://github.com/laravel/framework/blob/9.x/src/...

    Меняем неймспейс на App\Console\Commands
    Комментируем строку с вызовом пока несуществующего метода https://github.com/laravel/framework/blob/9.x/src/...

    - $rootControllerNamespace = $this->laravel[UrlGenerator::class]->getRootControllerNamespace()
    -            ?? ($this->laravel->getNamespace().'Http\\Controllers');
    + $rootControllerNamespace = ($this->laravel->getNamespace().'Http\\Controllers');


    И получаем листинг роутов как в девятке.

    spoiler
    61ff5f82e7614202157205.png

    Это я в восьмом ларавел пробовал.
    Ответ написан
    7 комментариев
  • Нужно ли разделять локальный scope на два в зависимости от количества значений в аргументе?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Не надо ничего разделять. Нужно оставить один метод множественного выбора.
    Ответ написан
    Комментировать
  • Возможно ли циклом передавать параметры?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Вынести все параметры в отдельный объект:

    [
      {
        name: 'componentName1',
        props: {
          propName1: ...,
          propName2: ...,
        },
      },
      {
        name: 'componentName2',
        props: {
          propName69: ...,
          propName187: ...,
          propName666: ...,
        },
      },
      ...
    ]

    <component
      v-for="n in componentsData"
      v-bind="n.props"
      :is="n.name"
    />
    Ответ написан
    1 комментарий
  • Как правильно поставить тип параметру?

    miraage
    @miraage
    Старый прогер
    interface TodoItem {
        id: number
        subtitle: string
        important: boolean
        done: boolean
    }
    
    const generalToggle = (arr: TodoItem[], id: number, propertyName: keyof TodoItem) => {
            const idx = arr.findIndex((item) => item.id === id);
            const oldItem = arr[idx];
            const value = !oldItem[propertyName];
    
            const item = {...arr[idx], [propertyName]: value};
            return [
                ...arr.slice(0, idx),
                item,
                ...arr.slice(idx + 1)
            ];
        };


    А еще лучше, храните TODO объектом по ключам (для мутаций) и отдельно список IDs (для рендера списка), чтобы O(n) не гонять на каждое изменение.
    Ответ написан
    9 комментариев
  • Нужно ли везде использовать TypeScript? или это хайп?

    Xuxicheta
    @Xuxicheta
    инженер
    Нужно ли везде использовать TypeScript?

    ну видимо нет.

    или это хайп?

    нет

    Есть ли смысл использовать Typescript в пет проектах?

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

    типа создал мини игру 15 строчках кода на TypeScript?

    как хотите, ради 15 строчек мне было бы лень настраивать конфиг, но я бы точно писал всегда на ts если бы оно поддерживалось по дефолту.

    Или он только в крупных проектах нужен? и вообще все прям без него будто не могут писать судя по отзывам или это какойто хайп или реклама Microsoft

    еще раз. ts - удобнее и надежней.
    Ответ написан
    2 комментария
  • Как типизировать такой объект данных?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    Нет, обобщенные типы можно использовать не только в функциях
    type SomeData<Data = any> = {
        data: Data[];
    }
    const a: SomeData<number> = {data: [1,2,3]};
    Ответ написан
    Комментировать
  • Как типизировать класс javascript на typescript?

    Alexandroppolus
    @Alexandroppolus
    кодир
    сделать phrase абстрактным полем/свойством и переопределять в потомках. Потомок сам может выбрать - сделать поле или свойство.

    interface IAnimal {
        name: string;
        say: () => string;
    }
    abstract class Animal implements IAnimal {
        name: string;
    
        constructor(name: string) {
            this.name = name;
        }
    
        say() {
            return `${this.name} says ${this.phrase}`;
        }
    
        protected abstract phrase: string;
    }
    
    class Cat extends Animal {
        protected get phrase() { return 'm'; }
    }
    
    const c = new Cat('q');
    console.log(c.say());
    Ответ написан
    Комментировать
  • Безопасно ли удалить pull request?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Удалить Pull Request невозможно, разве только закрыть его, да и не нужно ничего удалять для доработки задачи! Просто вернитесь в свою тематическую ветку. Добавьте новые коммиты с исправлениями и отправьте их на гитхаб. Pull Request обновится автоматически.

    Даже если вы закрыли пиар, но продолжили работать в той же ветке, то последующий пуш просто заново откроет этот же пиар.

    Аналогично если на Code Review будут замечания, то вы их просто исправляете локально в той же тематической ветке и пушите. Доработки сразу попадут в Pull Request.
    Ответ написан
    Комментировать
  • Можно ли установить компьютер на застекленном балконе?

    saboteur_kiev
    @saboteur_kiev Куратор тега Железо
    software engineer
    Если не выключать вообше, то будет норм. Если выключать, то может случиться проблема с конденсатом.
    Ответ написан
    Комментировать
  • Можно ли установить компьютер на застекленном балконе?

    solotony
    @solotony
    покоряю пик Балмера
    температура внутри корпуса будет градусов на 10 выше

    у меня пара серверов стояла в слабо отапливаемом складе (там температура уходила в "-" стабильно") - лет 5 проработали (профилактику пылесос + замену кулеров я делал 2 раза за это время. Ни один из 10 hdd за это время не помер
    Ответ написан
    Комментировать