Задать вопрос
  • Пользовательское соглашение для ПО. Что писать?

    hint000
    @hint000
    у админа три руки
    Хорошая статья, из которой процитирую несколько фраз:
    https://habr.com/ru/company/itsoft/blog/525054/
    ...Дублирование того, что уже и так прописано в законе.
    ...Ничтожные пункты, которые противоречат законам.

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

    ...Каждый пункт нужно формулировать простым понятным языком, если слово можно выкинуть без потери смысла, то нужно выкинуть. Если из пункта непонятно зачем он нужен, то нужно либо переписывать либо удалять. За каждым пунктом должно стоять конкретное осмысленное действие, условие, требование.
    Ответ написан
    1 комментарий
  • Приложение масштаба предприятия на Symfony?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    По моему имху такого плана приложение писать стоит на ларавеле, фронт vue, react, angular. Если же конечно не перейти на другой язык на бэке
    Ответ написан
    7 комментариев
  • Приложение масштаба предприятия на Symfony?

    @caballero
    Программист
    гемор создания ERP это сложность реализации самой ERP
    какой там язык вопрос десятый

    использование такого сложного фреймворка как synfony только осложняет дело

    использование javascript фреймворков нафиг не нужных а в таких приложениях это дополнительных гемор

    ну написал некто на хабре что он так сделал и что? мало ли кто как делает
    Ответ написан
    8 комментариев
  • Как лучше структурировать элементы массива?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Вместо кучи компонентов с if, используй один <component :is="conponent" v-bind="allprops"/>.
    Ответ написан
    5 комментариев
  • Npm, Webpack, NodeJs с чего начать?

    @deliro
    Фронт развился в какую-то неправильную сторону, это правда
    Вкатиться на фронт очень сложно, это тоже правда. Причём, необоснованно сложно.

    Я бы выделил два пути, как можно въехать во всё это:
    1. Создать приложение на Vue или React по туториалам, затем разобраться, как и зачем оно всё
    2. Разобраться как и зачем оно всё (aka Vanilla JS), потом заняться реактами

    Имхо, вариант №2 предпочтителен и более прост, потому что на варианте №1 есть огромный шанс застрять, никогда не разобравшись, как оно работает а при любых нешаблонных ошибках поднимать лапки.

    Что здесь нужно понимать:
    1. Есть разные версии ES (ecmascript), они все обратносовместимые. Программист может писать на любой версии, какая ему нравится. Обычно берут последнюю стабильную

    2. Для проекта обычно есть две версии ES: та, на которой пишут программисты и та, которая исполняется в браузере или в ноде (об этом позже). Например, программист пишет на ES8, а код транслируется на ES5. Это позволяет использовать последние предсмертные хрипы писки моды JS при этом запуская всё на древнейшем говне вроде IE11. Перегонкой кода из JS/TS одной версии в JS другой версии занимается транспилятор: babel / esbuild / swc

    3. Новые версии JS содержат расширения стандартной библиотеки, которых нет в старых браузерах (например Array.from, Object.entries и т.п.). Эти дырки затыкают полифиллы, они же shims. Самая популярная дырозатыкательная машинка — corejs

    4. Весь код очевидно не пишется в одном файле и может быть написан на TypeScript (он же TS), JSX/TSX (реактовый синтаксис). Всё это нужно собрать в один или несколько файлов, то есть скомпоновать. Этим занимается bundler: часть webpack / esbuild / spark / etc.

    5. Этот же парень отвечает за то, чтобы та тысяча библиотек, что лежит в node_modules, попала в итоговый условный main.js, но не целиком, а только то, что используется. Последнее называется tree shaking (типа навозную кучу node_modules потрясли как дерево, что упало — то не нужно)

    6. (то самое "позже) Код может исполняться не только в браузере пользователя, но и на сервере без браузера вообще. Это нужно для SSR aka Server Side Rendering. SSR — это такой глобальный вонючий костыль для SEO. Дело в том, что стандартные SPA приложения содержат один DOM элемент, куда цепляется всё остальное приложение вроде реакта или вью, которое уже содержит всю вёрстку прямо в JS. Но не все поисковики согласны с таким подходом и некоторые (не будем показывать пальцем на яндекс) не умеют выполнять JS и индексируют только тот самый единственный DOM элемент, который существует на этапе отдачи страницы в браузер. Это уже потом к нему JS движком дорисовывается весь остальной сайт. Соответственно, сайт индексируется от слова "никак", а некоторым это важно. Например, когда SPA — это не админка. Для этого есть два выхода: страницы, важные для SEO, рендерить чем-то не-реактовым или сделать SSR — делать за яндекс работу на сервере (на ноде), представляя в уме, что у нас есть DOM и браузер (на самом деле нет), на выходе получать начальное состояние HTML, отдавать его клиенту (браузеру или поисковому роботу), а JS'ом её т.н. "гидрировать", иными словами — оживлять.

    7. webpack отвечает за всё вот это сверху в том или ином виде. Это такой кухонный комбайн, в который вкидываешь кучу хлама в одном виде, а получаешь другую кучу хлама в другом виде.

    Начать советую с parceljs, который сильно проще в освоении, чем webpack. И на написании кода максимально без библиотек.
    Ответ написан
    1 комментарий
  • Два домена для локальной разработки?

    akelsey
    @akelsey
    nginx будет работать с headers приходящими от браузера, и без разницы где он, в докере, на хосте. Варианта три:
    1. купить mylocasite.com и настроить dns
    2. настроить локальный днс сервер (например тоже в докере) и там прописать эту доменную зону
    3. добавить адреса в hosts машинки на которой будет запускаться браузер для отладки и локальной разработки.
    Ответ написан
    4 комментария
  • Как исправить ошибку Target class [...] does not exist?

    @kandrash
    Кратко о себе
    Сейчас принято писать
    Route::get('/show', [TestController::class, 'show']);

    И самая зачуханая IDE подскажет, что такого класса нет, пиши неймспейс полностью
    Ответ написан
    Комментировать
  • Как правильно передавать заказчику код?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Я несмотря что делаю все под ключ, обычно создаю readme.txt install.txt все это в папке проекта.
    Дополнительно в сложных проектах добавляется install.docx userguide.docx
    И да бэкапьте переписку и мессенджеры, там много моментов есть те которые упускаются.
    Только одно замечание обговаривайте документацию и ее качество, и дальнейшую поддержку, это важно
    Ответ написан
    Комментировать
  • Как в Laravel вызвать метод модели?

    @jazzus
    Удалить Initial. Удалить InitialResource. Ибо это не ресурс. Передавать данные через json response. Внутри которого CategoryResource. Для правильного запроса квери билдер метод where. Если хочется вызывать методом из модели делай scope. Без get в модели. Передавать, как написано в документации
    CategoryResource::collection($categories);
    Ответ написан
    7 комментариев
  • Как в Laravel вызвать метод модели?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Ну если вы все запрашиваете Category::all(), то вам все и выплевываются.
    Запрашивайте только активные

    'mainMenu'   => CategoryResource::collection(Category::where('enabled', true)->get()),


    https://laravel.com/docs/8.x/eloquent#building-queries
    Ответ написан
    2 комментария
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    Как правило, обычные ошибки не обрабатывают в таком обработчике, а конвертируют в ErrorException.

    function error_handler(
        $error_code,
        $error_message,
        $error_file_name,
        $error_line
        // $error_context - не объявляйте этот аргумент. Он не существует.
      ){
    
        throw new ErrorException($error_message, 0, $error_code, $error_file_name, $error_line);
    
      }
    
      set_error_handler('error_handler', -1);

    Ну а дальше ловите исключения как обычно.

    // some code...
    
    $host_db = '127.0.0.1';
    $login_db = 'root';
    $password_db = '';
    $database_db = 'some_db';
    
    $DB = new PDO('mysql:host=' . $host_db . ';dbname=' . $database_db, $login_db, $password_db);
    $DB -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $DB -> beginTransaction();
    
        // some code...
    
        $DB -> commit();
    } catch (\Throwable $e) {
        $DB->rollback();
    }
    // some code...
    Ответ написан
    6 комментариев
  • Как правильно написать свой обработчик ошибок php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перед тем как писать обработчик, надо сначала понять, а зачем он нужен.
    Потому что вот эта вот функция - она совершенно бессмысленная.
    Вся "обработка", которой она занимается - это добавляет бессмысленные фразы типа "Error_message" к тому что РНР выведет и так.

    Обработчик ошибок не должен заниматься удалением файлов. Обработчик вступает в дело, когда ничего исправить уже нельзя, и всё что остаётся - это показать пользователю страницу с извинениями и корректным НТТР кодом. Пример можно взять здесь: https://phpdelusions.net/articles/error_reporting

    А вот обрабатывать ошибки надо с помощью оператора try catch
    Если надо откатить транзакцию, то всю её целиком надо поместить внутрь try catch, в котором ловить ВСЕ ошибки, то есть \Throwable и после этого скорее всего добавить throw с тем же исключением, поскольку вряд ли при ошибке БД имеет смысл продолжать работу скрипта. Но зависит от обстоятельств.

    Если надо удалить файлы, то опять же, заключить в try catch загрузку файлов, то тут просто заключить в try catch, всё почистить и написать какое-нибудь сообщение пользователю.
    Ответ написан
    2 комментария
  • Какие еще проекты сделать junior на php помимо дефолтных?

    nefone
    @nefone
    Junior PHP разработчик
    Junior разработчиком после выполнения пары проектов в отвратительном качестве не стать.

    в моей голове junior - это тот, кто пишет круды и что-то там допиливает в проектах

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


    Я могу сделать какой-нибудь обычный crud с sql, но, видимо этого не достаточно.

    У Вас не обычный CRUD, а тот который никогда делать не надо. Следует узнать о шаблозаторах Twig и Smarty. Попробовать сделать свою простую шаблонизацию на PHP, что бы отделять верстку о логики.

    Также у меня есть пару книг популярных по этому языку и там тоже нечего взять полезного.

    Я думаю, если бы Вы прочитали PHP 7 Котерова, может быть не задавали бы такого вопроса. Можете начать с PHP 7, и обязательно выполнять задания, которые там даны в конце каждой главы. Если хочется быстрее понять PHP можете пройти интенсив. (бонус, что будет опытный наставник и работа с системой контроля версий).

    После того, как будет понимание о языке PHP и его возможностях, следует посмотреть на работу с SQL, создать несколько баз данных руками, попробовать JOIN из нескольких таблиц, написать простой CRUD каталог по архитектуре MVС, что бы понять, как реализуется роутинг.

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

    Изучать тему Linux и как работать в консоли, настройка LAMP и LEMP окружения.

    Желательно посмотреть на Docker и Vagrant, запустить их у себя на машине и установить внутри какой нибудь обычный WordPress.

    Попробовать работу с PHP фреймворками, сделать несколько простых проектов.

    Изучать лучшие практики работы PHP правильный путь

    P.S. и постоянно учиться чему то новому...
    Ответ написан
  • Как ускорить скорость загрузки сайта, метрика и движовосайт тянут вниз?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Отложить загрузку на 5 секунд - выход, но грубоватый (имхо конечно). Я делаю по-другому - оборачиваю код в скролл-ивент + задержка в 1 секунду. То есть, сайт загрузился быстро, и как только пользователь начал скроллить хоть чуть-чуть - секундный таймаут и загрузка дополнительных ресурсов. Гугл доволен, пользователи вообще не замечают задержки:

    var fired = false;
    
    window.addEventListener('scroll', () => {
        if (fired === false) {
            fired = true;
            
            setTimeout(() => {
                // Здесь все эти тормознутые трекеры, чаты и прочая ересь,
                // без которой жить не может отдел маркетинга, и которые
                // дико бесят разработчиков, когда тот же маркетинг приходит
                // с вопросом "почему сайт медленно грузится, нам гугл сказал"
            }, 1000)
        }
    });
    Ответ написан
    29 комментариев
  • ООП: Правильно ли архитектурно так делать?

    profesor08
    @profesor08 Куратор тега PHP
    Вот это order_fields поле должно быть объектом. В целом, если хочется удобства, целостности данных и надежности, то неплохо бы вместо ассоциативных массивов использовать обычные объекты, самые простые с обозначенными типами для полей, да хоть с паблик полями, или сделать их readonly.
    Ответ написан
    5 комментариев
  • ООП: Правильно ли архитектурно так делать?

    Vamp
    @Vamp
    Возможно, это нормально, так и должно быть ? или как архитектурно правильно решать подобное?

    Это нормально. Безликие массивы становятся осмысленными сущностями. Такой код становится проще понимать и поддерживать.

    Используемый вами подход называется data transfer object (DTO). Широко распространенная практика. DTO отлично сочетается с иммутабельностью, которая присутствует в ваших классах.

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

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

    Называется ORM. Находится в ответственности ORM слоя/фреймворка.
    Ответ написан
    4 комментария
  • Какой будет ответ var_dump(0 == "wow"); ??

    @Vitsliputsli
    Нет, не так.
    В 7 версии: т.к. сравниваем число и строку, то преобразовываем строку в число (int)"wow" = 0, и сравниваем результат: 0 и 0 - true.
    В 8 версии: т.к. сравниваем число и строку, то проверяем содержит ли строка число, в данном случае - нет, не содержит (что-то вроде is_numeric("wow")), а раз не содержит - false.

    Отсюда вывод, не стоит использовать подобные конструкции. Всегда пользуйтесь сравнением с учетом типов, если нужно, то приводите к нужному типу вручную. Такая конструкция возможна только в самом крайнем случае.
    Ответ написан
    2 комментария
  • Как убрать лаги при просмотре 4К 60fps видео снятого на Go - pro 9?

    @rPman
    4k и 8k при 60fps это экстремальные параметры видео, для этого требуется аппаратная поддержка и специфический софт. Очень мало плееров способны это проиграть на универсальном железе (pc gpu).

    Windows media player это худший плеер на свете, как по функционалу и юзабилити так и по производительности. Я думал на него забили все более чем полностью.

    только один KM-player вытягивает нормально
    ну тогда какие проблемы?
    при установленном k-light codec pack должен установиться еще и media player classic, неужели в нем тоже лагает? всем всегда на windows рекомендую только его это лучший плеер.

    Еще (на linux) наилучшие результаты я получал от ffmpeg (точнее его утилиты ffplay) смотрел 8к видео и больше с разными fps на достаточно слабой машине.

    p.s. самый функциональный и эффективный плеер поставляется с браузером, только в нем я запускал проигрывание 8к (я уже не помню сколько там было пикселов точно, огромное) в режиме повтора, и только html video делает это без паузы
    Ответ написан
    3 комментария
  • Как убрать лаги при просмотре 4К 60fps видео снятого на Go - pro 9?

    @Drno
    Никто не пользуется встроенным проигрывателем в винде.
    Попробуйте vlc плеер
    Ну и смотрите Вы с диска пк, не с карты же?
    Ответ написан
    1 комментарий
  • Кто-то уже окунался в разработку с Nuxt 3?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Вы соберёте все проблемы и завалите все дедлайны. :)

    С таким же вопросом сталкиваюсь, смотрел - он прям очень, очень сырой, я был крайне разочарован.
    Нельзя это тащить в продакшен, оно падает на каждый чих, причём почти всегда без внятной возможности понять, что пошло не так.

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

    Да и вообще есть ощущение, что они слишком фанатично пытаются всё упростить и обвешать магией, ушли куда-то не туда.
    Всякий сахарок - это прикольно, но должно быть опционально и навешиваться поверх уже готовой, работающей системы, а там половина issue - это борьба с теми проблемами, которые они сами себе придумали в погоне за "хотим, чтобы тут одну строчку написать - и дальше оно всё само".
    Но альтернатив не видно, поэтому пока Nuxt 2, возможно Nuxt Bridge, но и то смотреть надо.

    Другой вопрос - а зачем вам SSR для CRM? Для морды можно и пререндер сделать, а всё что за авторизацией - кому вообще интересно, есть там серверный рендеринг или нет?
    Ответ написан
    4 комментария