Задать вопрос
  • Может ли физ лицо создавать интернет-проекты?

    @aleks-th
    Почему нет, можете конечно, никто не запрещает.
    Делайте спокойно.
    ---
    Даже деньги собирать можете как физлицо, если например самозанятым зарегистрируетесь.
    ----
    Единственный момент - независимо ото того юрлицо вы или физлицо - действующие законы необходимо формально соблюдать, и все.
    Но если ничего незаконного там нет, то нафик вы никому не нужны, делайте что хотите.
    ---
    Соглашения формальные лучше все таки написать, договор оферты, отказ от ответственности и т.д.
    Они нужны вам, а не вашим пользователям, на всякий случай чтобы защитить себя от возможных претензий от всяких мудаков.
    Нормальные люди их все равно не читают.
    Да и вероятность получить какую-то претензию в небольшом проекте исчезающе мала.
    Ответ написан
    1 комментарий
  • Может ли физ лицо создавать интернет-проекты?

    Griboks
    @Griboks
    Может создавать любые проекты. По факту, всем на вас наплевать, пока вы не начнёте скрывать налоги или конкуренты на вас не донесут.
    Ответ написан
    Комментировать
  • Почему ошибка git в WebStorm?

    Тут же явно сказано, что ошибка либо в ключах, либо в том, что репозитория нет.

    1. Проверь, что твой ssh-ключ прописан в гитхабе, и что для работы с гх используется именно тот.
    https://qna.habr.com/q/964989#answer_1913237
    2. Проверь, что репозиторий действительно существует и его имя ты указал правильно. Посмотри в .git/config
    Ответ написан
    3 комментария
  • Phpstorm: для чего существует возможность исключения (exclude) папок?

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

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    На домене прописывается правило субдоменов с паттерном вайлдкард, в конфиге вебсервера все субдомены прозрачно направляются на основной, в коде уже выделяете имя субдомена и относительно него уже выполняете нужные манипуляции с кодом и данными(нечто похожее на личный кабинет и страничку данных пользователя).
    Ответ написан
    2 комментария
  • Можно ли заменить on на true после валидации Laravel?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Почему не можете?

    <input type="checkbox" name="check" value="1">

    $request->validate([
      'check' => 'sometimes|bool',
    ]);


    Если нужно и false передавать, то добавить скрытое поле с тем же именем перед чекбоксом:

    <input type="hidden" name="check" value="0">
    <input type="checkbox" name="check" value="1">


    =========

    Кроме того, можно использовать FormRequest
    Чекбокс передается, если он отмечен, значит можно проверить присутствует ли он в данных и обновить их перед валидацией
    protected function prepareForValidation()
        {
            $this->merge([
                'check' => $this->has('check')
            ]);
        }
    Ответ написан
    Комментировать
  • Как скрыть пароль в php-коде?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Пароль нужно выносить из кода в отдельный файл конфигурации. Dotenv, например.
    Такой файл добавляется в .gitignore, не коммитится в общую кодовую базу и каждый разработчик будет наполнять его своими (или общими) данными. Ваш личный пароль не попадёт в чужие руки.
    Ответ написан
    31 комментарий
  • Почему Laravel не использует pivot таблицу?

    vfreelancer
    @vfreelancer
    php
    pivot таблица по умолчанию названия в ед. числе должны быть: protected $table = 'genre_movie'; иначе надо указывать явно
    Ответ написан
    3 комментария
  • Что выбрать Vegas Pro или Davinci resolve?

    Jairman
    @Jairman
    Тот самый
    Думаю для лёгкого монтажа это обе не самые простые программы и тяжёлые по размеру и производительности, поэтому, возможно, стоит ещё поискать аналоги.
    Давинчи бесплатный, это большой плюс, чтобы не пиратить (пиратить кринж). Плюс давинчи более современный и профессиональный, но весит больше и требовательнее. Но по простоте могу сказать, что для меня они были +- одинаковые, любая информация есть в сети интернет.
    Ответ написан
    2 комментария
  • Почему модель на сайте отличается от модели в блендере?

    @McBernar
    Модификаторы — это же математика в Блендере. Gltf об этом ничего не знает.
    Примените все моды, чтобы вся геометрия была реальной, а не параметрической.
    Ответ написан
    1 комментарий
  • Laravel Eloquent, where с несколькими вариациями значения столбца?

    iMedved2009
    @iMedved2009
    Не люблю людей
    потому что вы получаете запрос вида where status = 'active' or uid=2 or uid=6; и получаете все варианты.

    1. Использовать whereIn
    ->where('status',  '=' , 'active')
    ->whereIn('uid',  [2,6])
    ->get();


    2. Использовать обертку что бы получить запрос вида where status = 'active' and (uid=2 or uid=6)
    ->where('status',  '=' , 'active')
    ->where(function($builder){
      $builder->where('uid',  '=', '2')
          ->orWhere('uid',  '=', '6');
    })
    ->get();
    Ответ написан
    Комментировать
  • В чем можно хранить около триллиона значений key=>value?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Давайте прикинем объем который понадобится. Что такое триллион?
    Это 12 нулей. Или 1 000 000 000 000 элементов. Какая у нас data-row?
    8 + 64 символов типа ASCII (байт подходит чтоб покрыть все символы).
    Итого 72 байта на строку. Там можно еще поужимать биты в байтах но только
    сложность повышает а большой пользы для дела не дает. Пускай будет ASCII == 1 байт.

    Вобщем такой расчет

    72000000000000 байтов на весь сегмент данных когда таблица загружена.
    Или 65 терабайт. А сколько магнитных блинов надо прикупить? Возьмем популярный магнитный
    Western Digital Purple 10TB 7200rpm 256MB WD102PURZ 3.5" SATA III при цене 290$
    Порядка 7 штук надо. Вобщем готовте котлету денег 290$ * 7 = 2030$

    По поводу DBMS. Да key-value здесь подходит. Можно начинать с LevelDb или RocksDb но у них
    расход дисковой памяти на 1 строчку может быть больше чем я посчитал. Я ведь считал эконом-эконом
    вариант в виде бинарного типизированного файла где все записи строго по 72 байта. Сколько именно
    захватит РоксДб или ЛевлДб - чорт его знает. Вряд-ли документация об этом что-то говорит.
    Но берите 1% датасета. Загружайте
    и аппроксимируйте сколько выйдет после полной прогрузкуи. Это - надежный способ оценки.
    Ответ написан
    12 комментариев
  • Как в пхпшторме убрать навязчивые подчеркивания мнимых ошибок?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Заменить на $request['content']

    Вообще мне не понятно, для чего сделан объектный доступ к переменным запроса. Возможно это используется внутри, или наследие прошлого. Но использовать его в приложении - так себе идея. Есть методы get(), input(), реализован ArrayAccess.
    Ответ написан
    1 комментарий
  • Есть ли смысл в spa laravel все делать через JS?

    @Kostik_1993
    Web Developer
    Есть ли смысл в spa laravel,все делать через JS?

    Имеет смысл делать то что имеет смысл для конкретного проекта, а не стека
    Ответ написан
    Комментировать
  • Почему PHPStorm советует static для fn функций?

    miraage
    @miraage
    Старый прогер
    Не кодил на PHP 100 лет, точного ответа не подскажу. Однако идея, что статическая лямбда будет видеть меньше переменных -> проще для GC = уже кажется, как небольшая победа.

    https://www.designcise.com/web/tutorial/what-are-s...
    https://www.php.net/manual/en/functions.anonymous....
    Ответ написан
    1 комментарий
  • Должен ли программист выполнять роль девопса на сервере заказчика?

    @vitaly_il1
    DevOps Consulting
    По-моему, ответ простой - что было записано в договоре, то и обязан.
    Т.е. если речь шла о коде - то только код. Если договаривались о "запустить на сервере" - то надо ставить на сервер. Но вот о том, что для вебсервера используют Мак, я еще не слышал :-)
    Ответ написан
    11 комментариев
  • Как запустить миддлвар один раз?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Запускаться он будет каждый раз.
    Но ему не нужно каждый раз выполнять определение страны.

    if (страна_не_определена) {
      Определяем страну
    }
    
    return $next($request);
    Ответ написан
  • Почему VUE не подключает компонент внутри другого компоненте?

    yarkov
    @yarkov Куратор тега Vue.js
    Помог ответ? Отметь решением.
    Имена разные дайте им для начала
    Ответ написан
    Комментировать
  • Как типизировать в ts?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Вопрос конечно в духе "я его того, а он мне нихрна, чаво это он". Где конкретика блин? Что именно за ошибка? Любая ошибка TS - это "ошибка типов", он для этого и существует. Что у тебя в route?

    Но окей, предположим, что route у тебя - это текущий роут vue-рутера, тогда ошибка у тебя скорее всего выглядит как-то так:
    TS7053: Element implicitly has an 'any' type because expression of type 'RouteRecordName' can't be used to index type '{ first: string; second: string; }'.   No index signature with a parameter of type 'string' was found on type '{ first: string; second: string; }'.

    Собственно прочитав текст ошибки можно уже догадаться, в чём проблема: у (неявно выведенного за отсутствием явного объявления) типа объекта pages есть ключи типа 'first' | 'second' | ..., но нет index signature типа string, т.е. не указано, что ключом может быть любая строка, а не только конкретные'first' | 'second' | ....
    route.name же после проверки на пустоту имеет тип string | symbol. Ты не можешь у объекта с чётко ограниченным набором ключей брать значение по произвольному строковому/символьному.

    Прямое решение в лоб:
    Задать тип pages позволяющий рандомные ключи, например
    const pages: Record<PropertyKey, string> = {
      first: 'Первая',
      second: 'Вторая',
      ...
    }

    Всё сразу заработает, но это не спасёт тебя от ошибок(например опечаток).


    Не менее прямой вариант
    (но с другой стороны):
    Кастануть нужный тип руками: ... = pages[route.name as keyof typeof pages]
    Ведь мы уверены, что name в route всегда будет одним из ключей pages. Уверены же?..

    Энтерпрайз решение(ничем не лучше предыдущих, зато выглядит солидно):
    Твой файл routes.ts:
    export enum ERoutes {
      FIRST = 'first',
      SECOND = 'second'
    }
    
    const routes = [
      {
         name: ERoutes.FIRST,
         ...
      },
      {
         name: ERoutes.SECOND,
         ...
      },
      ...
    ]

    В коде:
    const pages: Record<ERoutes, string> = {
      [ERoutes.FIRST]: 'Первая',
      [ERoutes.SECOND]: 'Вторая',
      ...
    }
    
    ... = pages[route.name as ERoutes]


    Надмозговое решение("как батька"):
    Твой файл routes.ts:
    const routes = [
      {
         name: 'first',
         ...
      },
      {
         name: 'second',
         ...
      },
      ...
    ] as const satisfies ReadonlyArray<ReadonlyRouteRecordRaw>;
    
    type ReadonlyRouteRecordRaw = Omit<RouteRecordRaw, 'children'> & {
      children?: ReadonlyArray<ReadonlyRouteRecordRaw>;
    };
    
    type ExtractNames<Route> = Route extends { name: infer Name } ? Name : never;
    type FlattenChildren<Route> = Route extends { children: ReadonlyArray<infer Children> }
      ? FlattenChildren<Children> | Route
      : Route;
    
    // с помощью магии ts вытаскиваем в тип RouteNames все заданные у нас имена маршрутов
    export type RouteNames = ExtractNames<FlattenChildren<typeof routes[number]>>;
    
    // с помощью магии же прокидывем их прямо в декларацию vue-router
    declare module 'vue-router' {
      export interface RouteLocationNormalizedLoaded {
        name: RouteNames | null | undefined;
      }
    }

    satisfies
    satisfies - новая фича ts 4.9, в предыдущих версиях того же можно добиться сделав обёртку вида:
    const narrowRoutesTypeWrapper = <T extends ReadonlyArray<ReadonlyRouteRecordRaw>>(routes: T) => routes;
    const routes = narrowRoutesTypeWrapper([ ... ] as const);

    И твой код заработает вообще без изменений (если в pages есть все нужные ключи).)
    Однако для удобства можно написать так:
    const pages: Record<RouteNames, string> = {
      first: 'Первая',
      second: 'Вторая',
      ...
    }
    Ответ написан
    Комментировать