Задать вопрос
  • Почему phpstorm не видит классы битрикс при подключенном composer?

    @russeljo Автор вопроса
    Всё оказалось довольно просто. Нужно папку bitrix/modules пометить как Sources Root
    Ответ написан
    Комментировать
  • Как правильно использовать S3 хранилища, и на сколько моя идея верна?

    3vi1_0n3
    @3vi1_0n3
    Могу частично ответить по поводу путей. Многие понимают S3 как файловое хранилище, тогда как это объектное хранилище по сути, ключ-значение. Ключ - это то, что выглядит как путь, но на самом деле это не путь. И так совпало, что значение это обычно контейнер с содержимым, который представлен как файл. Поэтому путь и есть ID, и при этом значение нельзя поменять, его можно либо взять, либо положить. Делать какие-то дополнительные ID по этой причине обычно не надо, потому что ключ (за счет представления как путь) всегда является уникальным.
    Ответ написан
    Комментировать
  • Видео недоступно Этот контент недоступен. при открытии роликов youtube c VPN?

    @superbereza
    О, такая же тема в комбинации корпоративный аккаунт + VLESS VPN на AWS
    Ответ написан
    Комментировать
  • Сидер не видит фабрику, хотя она есть. В чём может быть проблема?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Я просто не понимаю откуда берётся Providers в пути автозагрузки
    модель расположена в нестандартном месте
    App\Providers\Models
    от этой модели вызывается метод factory который относится к трейту HasFactory, там вызывается куда передается неймспейс твоей модели и подставляется к шаблону для неймспейса фабрики

    Соответственно есть 2 пути решения:
    1) перенести модель по пути App\Models (переносишь файл, обновляешь неймспейс)
    2) объяснить laravel где искать класс:

    В GameFactory
    class GameFactory extends Factory
    {
        protected $model = \App\Providers\Models\Game::class;
    ...


    В app/Providers/AppServiceProvider.php
    public function boot(): void {
         // ...  
        Factory::guessFactoryNamesUsing(function(string $modelName) {
             return 'Database\\Factories\\' . class_basename($modelName) . 'Factory';
        });
    }
    Ответ написан
    2 комментария
  • При помощи какого ПО можно создать компактную gif анимацию съемки экрана?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    672dac093a554364213597.gif
    Например эта gif сделан Cyotek Gif Animator, но для этих целей пойдет по моему вообще что угодно, умеющее создавать гифки из последовательности картинок
    В документации, причем как вы пишете "в текстовом документе", по-моему, важнее показать важные моменты, чем демонстрировать передвижение мышки из точки А в точку Б
    Ответ написан
    1 комментарий
  • Что это за формат видео?

    @aab137
    Для определения формата видео можно воспользоваться утилитой ffmpeg
    ffmpeg -i <ваша ссылка с m3u8>
    Будут выведены метаданные видео, включая формат, кодек и т.д.
    С помощью этой же утилиты можно и скачивать видео, а не мучиться, склеивая чанки
    ffmpeg -i <ваша ссылка с m3u8> -vcodec copy -acodec copy output.mp4
    Ответ написан
  • Что выбрать для разработки мобильного приложения?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    1. PWA - это недоприложения. Не нужно это если речь не об узком круге пользователей.

    2. В твоём случае я бы наверное остановился на React Native, но есть и вариант с no/low code конструкторами типа Flutter Flow или AppMaster.

    Каким образом можно запустить симулятор IOS?

    Есть сервисы почасовой (а то и поминутной) аренды.
    Ответ написан
    Комментировать
  • Что выбрать для разработки мобильного приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Сейчас пытаюсь на виртуалке macOS поднять. Есть какие-то хорошие советы по этому поводу?

    Только старые версии ось-х и только на интелловском процессоре. На АМД тоже можно, но только на одном ядре, медленно и многими днями секаса чтобы просто поставить и оно хотя бы работало. Либо арендовать мак. При общей стоимости разработки ПО - копейки.
    Ответ написан
    Комментировать
  • Как сохранить очередность выполнения заданий в очереди?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Надо начать читать документацию и не изобретать велосипедов с БД и прочим.
    Ответ написан
    5 комментариев
  • Как разместить laravel в подпапке?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    мне кажется тебе нужно не на уровне nginx это делать, а на уровне роутов ларавель. в ларавель есть роуты api, для этих маршрутов все идет черед префикс /api. нужно по аналогии реализовать /laravel (ну а все остальные варианты доступа убрать)

    Например вот такой провайдер (ну или можно в стандартном провайдере, но я бы там закоментил просто стандартный вариант, а кастом в новый провайдер унес)
    <?php
    
    namespace App\Providers;
    
    use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
    use Illuminate\Support\Facades\Route;
    
    class MyRouteServiceProvider extends ServiceProvider
    {
        /**
         * The path to your application's "home" route.
         *
         * Typically, users are redirected here after authentication.
         *
         * @var string
         */
        public const HOME = '/laravel/home';
    
        public function boot(): void
        {
            $this->routes(function () {
                Route::middleware('laravel')
                    ->prefix('laravel')
                    ->group(base_path('routes/laravel.php'));
            });
        }
    }


    и подключить его в config/app.php
    'providers' => ServiceProvider::defaultProviders()->merge([
            /*
             * Application Service Providers...
             */
    
            App\Providers\MyRouteServiceProvider::class,
        ])->toArray(),
    Ответ написан
    2 комментария
  • Как самому загрузить свое приложение на свой смартфон на Android?

    @pfg21
    ex-турист
    канешна. куча.
    закидываешь на смартфон - устанавливаешь. в последних андроидах у приложения должно разрешение устанавливать приложения из сторонних источников.
    гуглплей это репозиторий приложений, причем не единственный. ставишь другой репозиторий.
    еще есть Android Debug Dridge - интерфейс управления андроидом с компухтера.
    изучай литературу, а не ролики в ютубе смотри....
    Ответ написан
    4 комментария
  • Как решить проблемы c регистрацией посредников (Middleware) в Laravel 11 версии?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Я развернул новый проект лары и скопировал туда твой код, все работает

    1. Проверь что путь файла CheckAdminMiddleware.php соответствует неймспейсу
    App\Http\Middleware

    2. Попробуй сбросить кэш
    php artisan cache:clear
    composer dump-autoload

    3. Если запускаешь проект в докере то убедись что изменения с локали ушли в контейнер

    UPD
    Не сразу обратил внимание что у меня не 11 лара, установилась Laravel 10

    В ларавель 11 больше нет App\Http\Kernel::class (ну наверное его можно притащить туда и какими-то костылями заставить работать, но речь не об этом)

    Все конфигурации теперь в bootstrap/app.php
    Добавь в bootstrap/app.php
    ->withMiddleware(function (Middleware $middleware) {
    ...
            $middleware->alias([
                'admin' => App\Http\Middleware\CheckAdminMiddleware::class
            ]);
        })


    https://laravel.com/docs/11.x/releases#structure
    Ответ написан
    5 комментариев
  • Как скачать содержимое сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Либо делать реверс-инжиниринг, разбираться, что там в JS и WASM накручено, либо просто сделать скриншоты и отправить в распознавалку.
    Второе, IMHO, на пару порядков быстрее, даже с учётом того, что скриншоты надо делать с увеличением.
    Ответ написан
    1 комментарий
  • Как организовать оптимальную безопасность для своего онлайн мультиплеера на Android?

    Steel_Balls
    @Steel_Balls
    0KLRiyDQv9C40LTQvtGALiDQmNC00Lgg0L3QsNGF0YPQuQ==
    Ты всё правильно рассуждаешь.
    Исходить из принципа: все клиенты - мошенники.
    0% доверия клиенту.
    Не хранить у клиента никакой информации.
    Клиент - это только рендеринг данных.
    Вся логика - на сервере.

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

    Защита от подмены данных делается простым старым дедовским способом - подписью.
    На сервере и на клиенте есть одинаковый временный ключ для подписи - signKey - длинная строка.
    Клиент отправляет тебе POST-запрос со всеми данными: тип монеты, количество монет, ID юзера,...+ sign=HASH(тип_монеты+количество+userId+...+signKey)
    HASH - это хэш-функция. Лучше использовать Bcrypt вместо слабого MD5.
    Во-первых, всё делается через HTTPS.
    Во-вторых, все операции - через сессии или аутентификацию по JWT.
    На сервере ты делашь следующее:
    - проверяешь соответствие переданных данных ожидаемым: userId (из JWT), тип монеты и прочее. От клиента ты ожидаешь МИНИМУМ изменяемых данных (количество фишек, например)
    - проверяешь все поля на типы данных и ОЧЕНЬ ВАЖНО! - на длину передаваемых значений. Не допускается в строковом поле передавать больше, скажем, 20 символов. Это очень сильно ограничивает брутфорс для поиска коллизии хэша. Количество фишек должно быть целым положительным числом в определённых допустимых пределах (от 0 до 1000, напримр. Чем меньше диапазон, тем лучше)
    - делаешь хэш по переданным значениям и сравниваешь его с переданным хэшем от клиента. Если не совпадают - юзер подменил количество монет.
    На сервере у тебя должна быть защита от брутфорса: от одного userId, IP-адреса должно приходить не более 1-3 запросов в секунду. Если больше - банить на некоторое время, например, на 1 минуту.

    Это то, что касается систем, где данные передаются ОТ пользователя серверу.

    В твоём же случае - это просто игра.
    И здесь поступают проще.
    Всю логику делают на сервере. Юзер кликнул на монету - передаём серверу инфу: click(userId, x,y)
    И вот тут включается логика сервера: он смотрит что за юзер кликнул, куда кликнул, как часто, разрешено ли ему это делать... Если всё в порядке, то сервер отправляет клиенту - Ок, вот тебе заработанные 10 монет. Клиент отрисовывает монетки, юзер радуется.
    В этом случае полностью исключается подмена юзером количество монет, потому что всё решает сервер. Клиент - это просто терминал для отображения данных и отправки кликов на сервер.
    Ответ написан
    1 комментарий
  • Как изменить размер шрифта phpstorm во время работы?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Как масштаб в браузере – колесом мыши с зажатым контролом

    66daef7d1ed6a518008944.png
    Ответ написан
    Комментировать
  • Как убрать "Property does not exist on type" в рекурсивном интерфейсе?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    На каждом уровне проверять, что значение не string и не number. Иначе никак, ты сам задал такой тип, и ts не даст тебе совершить ошибку.

    Если у тебя только 2 уровня, то не надо рекурсии:
    interface CSS {
        [k: string]: {
            [k: string]: string | number 
        }
    }


    Если ты хочешь сузить тип при создании констатны, можно сделать так:
    const css = {
        default: {
            color: '#676767',
            border: '1px solid',
            border_color: '#C4C4C4',
            border_radius: '110px',
    
            padding: '16px 21px',
        }
    } satisfies CSS;
    Ответ написан
    Комментировать
  • Какой тег html является ни чем?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    нет такого
    Ответ написан
    Комментировать
  • Как типизировать пропсы в компоненте React?

    Alexandroppolus
    @Alexandroppolus
    кодир
    В данной постановке задачи - никак.

    [key: string]: string | boolean; предполагает, что у тебя значения всех пропсов, кроме пропсов-симболов, должны быть в рамках string | boolean. Ну а массив строк не вписывается.

    Здесь для key нужен тип "все строки, кроме 'items' ", но TS на данный момент такое не может.

    Можно для названий всех доп. пропсов задать какой-то шаблон. Например, вот так они все должны начинаться на символ подчеркивания:
    type CompanyInfoSectionProps = {
        title: string;
        to: string;
        items: string[];
        [key: `_${string}`]: string | boolean;
    };


    соответственно, все пропсы, названия которых не соответствуют шаблону, не ограничены в типе значений.
    Ответ написан
    Комментировать
  • Почему не работают алиасы?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    paths в tsconfig - это чисто справочная информация для подсветки, добавленная из расчёта, что вы уже используете какой-то сборщик который такие пути умеет.
    Сам по себе он влияет точно и исключительно на подсветку, нужны сторонние сборщики и\или модули.
    Это by design и wont fix.

    Предполагаемое разработчиками решение: взять какой-ниь vite или webpack и настроить там руками точно такие же алиасы.
    Популярный костыль, который сделает это за тебя для любых вариантов, в том числе и ts-node: tsconfig-paths
    Ответ написан
    Комментировать
  • Как кастомизировать вывод панели phpStrom?

    ПКМ по свободному месту в этой панели -> Appearance -> Breadcrumbs -> Top.

    P.S. А, нет - похоже, это какая-то другая панель. Скорее всего, в этой панели настройки точно так же по ПКМ настройки открываются.
    Ну, пусть будет ответ для истории, может, кому-то другому поможет.
    Ответ написан
    1 комментарий