Задать вопрос
  • Как оценить сложность проекта и найти грамотных исполнителей?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Если для написания тз у вас не хватает компетенций, то для начала сделайте юзерстори и/или майндмап. Распишите все возможные действия пользователя + желательно самые простые картинки как это +- выглядит и как работает. Во первых оцEните объем работ, во вторых откроете для себя кучу нюансов различного характера, в третьих с этим уже можно идти к более-менее адекватной команде за ПРИМЕРНЫМ ценником.

    Более простой путь - тыкнуть пальцем в готовое решение и сказать "хочу такое". Минус - скорее всего как при реализации так и при приеме вы можете упустить часть функционала (что впрочем может случиться и в первом варианте), так же, в любом случае административная часть чужого проекта вам будет недоступна и ее нужно будет описывать самому.

    Ну и третий путь, скажем так, совсем кривая дорожка - взять готовые решения, кои всегда существуют для популярных задач. Плюсы - дешево и быстро. Минус - скорее всего качество околоплинтусное.
    Ответ написан
    Комментировать
  • Как реализовать переход с Bootstrap 3 на Bootstrap 5?

    ThunderCat
    @ThunderCat Куратор тега HTML
    {PHP, MySql, HTML, JS, CSS} developer
    Варианты перехода с Bootstrap 3 на Bootstrap 5:
    1. Постепенная миграция (Hybrid approach)

    Подключить Bootstrap 5 с префиксом классов
    Переписывать компоненты по одному
    Использовать CSS-изоляцию для избежания конфликтов
    Плюсы: Сайт остается рабочим, можно мигрировать частями
    Минусы: Увеличенный размер CSS, сложность поддержки

    2. Использование Bootstrap Migration Tool

    Автоматические инструменты для замены классов
    Скрипты для массовой замены в файлах
    Плюсы: Быстрая автоматизация базовых изменений
    Минусы: Не покрывает все кейсы, нужна ручная доработка

    3. Создание CSS-моста (Polyfill)

    Написать CSS-правила для совместимости классов BS3
    Создать алиасы для старых классов
    Плюсы: Минимальные изменения в HTML
    Минусы: Не все компоненты можно эмулировать, устаревший подход

    4. Полная перепись с нуля

    Установить Bootstrap 5
    Переписать все компоненты и страницы
    Плюсы: Современный код, лучшая производительность
    Минусы: Много времени, высокий риск поломок

    5. Использование CSS-in-JS или препроцессоров

    Создать миксины для совместимости
    Использовать SCSS для переопределения
    Плюсы: Гибкость настройки
    Минусы: Нужны знания препроцессоров

    6. Bootstrap 4 как промежуточный этап

    Сначала мигрировать на BS4, потом на BS5
    Плюсы: Меньше кардинальных изменений за раз
    Минусы: Двойная работа

    7. Микросервисный подход

    Переписывать отдельные секции сайта на новом Bootstrap
    Постепенно заменять старые части
    Плюсы: Изолированные изменения
    Минусы: Сложность интеграции

    Для больших проектов: Постепенная миграция (#1)
    Для средних проектов: Bootstrap 4 как промежуточный этап (#6)
    Для небольших сайтов: Полная перепись (#4)
    При ограниченном времени: CSS-мост (#3)
    Ответ написан
    2 комментария
  • Кто должен устанавливать cookie, клиент или сервер?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    это делает сайт более уязвимым к XSS атакам.
    Нет, скорее это наносит больший ущерб в случае удачной атаки, к самой защите от атак это никак не относится.

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

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

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    1) Код должен дождаться загрузки всего документа, если вы собираетесь работать с его элементами. Используйте евенты загрузки документа.
    2)
    не работает эта часть кода
    Нормально описывайте что происходит, "не работает" это не описание проблемы, что пишет консоль, какие ошибки? Описывайте в вопросе.
    3) Соответственно читайте ошибки, думайте что могло пойти не так, вбивайте ошибку в поиск и читайте решения.

    В вашем случае скорее всего достаточно добавить евент загрузки DOM...
    И код скринами запрещен правилами сервиса.
    Ответ написан
  • Как сделать роутинг на чистом JS?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    По моему вы пытаетесь переизобрести реакт/вуе.
    Простой ответ - react router.
    Ответ написан
  • Как происходит получение id пользователя для дальнейших манипуляций?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как уже написали выше - вам нужен механизм идентификации, то есть привязки конкретного запроса к конкретному пользователю. Самые распространенные - сессии и токены, выполняющие примерно одну и ту же работу - сопоставление клиента по какому-то ключу к набору данных на бэкенде. Отличаются они только методом передачи ключа - в сессиях обычно используются куки, которые автоматически передаются браузером и таким образом не нужен дополнительный механизм передачи ключа между клиентом и сервером, а токены чаще используются для API или SPA, где ключ отправляют "руками".
    Ответ написан
  • Как frontend и backend соединяют в единый проект?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как мне их правильно соединить?
    Во первых - зачем? Смысл разноса api и приложения в том что бэк работает одинаково со всеми запросами (не особо важно кто и как их дергает, лишь бы права позволяли), а фронт не зависит от бэка в представлении. По этому фронт пишется как морда на каком-нибудь реакте, который от бэкенда получает данные по запросу. Нужно авторизоваться - стучишся в эндпоинт авторизации, отдаешь креденшелы, получаешь токен. Нужно список юзеров - берешь доку по апи, стучишся с нужным пэйлоадом на эндпоинт, получаешь жсон списка, из него рисуешь что хочешь...
    Во вторых -
    Или frontend и backend размещены разными программами?
    что-то мне подсказывает что наверное вы рановато по знаниям взялись за задачу...
    Ответ написан
    Комментировать
  • Почему не отображаются файлы в теге img, html, находящиеся вне папки static?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    пути к файлам пишут от корня сайта, а не от папки темплейта, соответственно если документ рут у вас в app_dir, то путь должен быть src="/static/img.png" и src="/templates/img.png"
    Ответ написан
    3 комментария
  • Почему кука обрезается на 330 символов?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Короче, есть 3 с половиной решения:
    1) Половина раз - сконвертировать полученную жсон строку в бэйс64 или урленкод, класть в куки. Это просто и решается декодом стрки на стороне сервера за 2 минуты. Половина два - разобраться что за символ ломает строку, тупо сравнив что лежит в куках и что дает стрингифай. Что делать - уже решать по ситуации, может конкретно какой-то параметр привести к нормальному формату и все.
    2) Покласть все нужное в локалстораж, при обращении к нужной странице передавать данные любым удобным способом, вплоть до гет параметра в урл.
    3) Если данные нужны для страницы на бэкенде, логичнее хранить их на бэкенде, в сессии, бд или любом другом хранилище на стороне сервера.
    Ответ написан
    2 комментария
  • Filament и мультиязычность кто подружил?

    ThunderCat
    @ThunderCat Автор вопроса, куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Забил на плагин от спати, поднял транслятор outerweb/filament-translatable-fields, все завелось, если кому интересно.
    Ответ написан
    Комментировать
  • Почему PHP считает int числа после математических операций как float?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так как в выражении одним из операндов присутствует деление, результатом которого будет число с десятичной частью, естественно все дальнейшие действия будут переводить операнды в совместимый формат - с плавающей запятой. Читать про неявные преобразования в языках со слабой типизацией.
    Ответ написан
    Комментировать
  • Чем frontend разработчик занят на реальных проектах?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    И заметила, что основная часть задач - инфраструктурная.
    Такой работы всегда много, но есть нюансы.
    Настройка тестов
    Да, это в любой разработке будет, не только во фронте
    CI/CD
    Сомнительно, но окэй, знать это очень желательно, но в крупных проектах этим занимается девопс, как минимум настраивает скрипты. В малых компаниях это раскидывается на разрабов, есть такая практика.
    OLAP CUBE, оптимизация запросов к БД.
    А это вообще чисто бэкендерские заморочки, конечно никто бить за понимание таких штук не будет, но в целом фронту это не особо важно, у него должно быть расписано апи/эндпоинты и чего туда пихать и что получать. Уж оптимизацией запросов чистый фронтендер точно не обязан заниматься.

    Вообще описанное больше похоже на позицию фуллстек. "В быту" фронт не особо занимается именно интерфейсами, чаще всего это уже сделал дизайнер, задача фронтера - сверстать и оживить, ну реакт, вуе, реквесты-отрисовка и вот это все...
    Ответ написан
    Комментировать
  • Почему в среде разработки Laravel работает медленно?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Извините, но
    поныл
    народ здесь как будто вообще никогда ни разработкой ни дебагом не занимался. Один сразу предлагает перейти на симфони (кроме того что это затратно по времени и требует скорее всего изучить еще один фреймворк, так и пользы будет ровно НОЛЬ, так как очевидно что проблема не в движке, а в реализации), причем налицо чистый незамутненный сомнением неаргументированный фанатизм, платят ему что ли за установку каждой симфонии?.. Другие тыкаются в ОС, как будто это волшебный пендель, на котором все сразу полетит... В общем случае докер действительно будет работать быстрее на линухе, но оспанели ОС вообще по барабану, отсюда вывод что проблема не в ОС.

    Первое - определить проблему. Как базовый вариант - ларавель дебагбар + телескоп. Смотреть что и как по времени отрабатывает, смотреть какие куски тормозят, делать точечные замеры исполнения. Обратить внимание на количество и качество запросов, вполне возможно что где-то натыкано левых или кривых запросов, еще и настаканных по 200 штук...
    Второе - 80% что тормозит не код, а бд, но тут это чисто статистическое предположение, так как что там у вас в базе никто не знает. Проверьте запросы, долговыполняющиеся прогнать руками через експлэйн, проверить наличие нужных индексов и отсутствие ненужных.
    Если критических косяков нет, то даже весьма средняя машинка потянет некрупный проект с небольшой базой.
    Ответ написан
    Комментировать
  • Как сделать блокировку тегов/атрибутов тегов на сайтах Android/iOS?

    ThunderCat
    @ThunderCat Куратор тега HTML
    {PHP, MySql, HTML, JS, CSS} developer
    FF + AdGuard?
    Алсо, что-то типа тампермонки/оранжмонки...
    Ответ написан
    Комментировать
  • Как можно предложить google идею для улучшения android?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Возможно через комюнити центр? По крайней мере можно спросить как связаться с кем-то по вопросам фидбэка.
    Ответ написан
    Комментировать
  • Как сделать список с которым можно будет работать в консоли?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    1) Указывайте язык, который используете, телепаты в отпуске. Ок, из кода понятно что питон, но в вопросе об этом ничего не написано.
    2) Так как структура данных у вас хранится в коде (что однозначно не айс), подойдут словари с соответствующей вложенностью - регион : области. Из него через .keys() и list() получаем регионы, а по регионам уже и области в виде списка получить можно. Алсо, я бы хранил словарь в отдельном файле как json, что сделает работу с кодом независимой от данных.
    3) Все еще не вижу причин издеваться над пользователем через консоль. Страничка с 2 полями и запрос на сервер, вроде в питоне даже свой какой-то вебсервер есть искаропки.
    Ответ написан
    Комментировать
  • Простой счётчик без БД (допустим на основе txt файла)?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    По сути ксть только 2 варианта:
    1) Смотреть логи сервера расположения.
    Из плюсов - простой надежный вариант, не требующий дополнительных телодвижений (ну почти, логи все же надо как-то обработать, но хотя бы с записью проблема отпадает).
    Из минусов - логи могут не вестись конкретно этим сервером, логи могут регулярно чиститься, может быть проблема с доступами к ним, алсо, если сервер заранее не настроен на сбор статистики, то поведение логов может завтра поменяться и приехали.

    2) Встроить систему мониторинга на js, которая будет отсылать данные на внешний сервис, где уже можно делать как нравится.
    Из плюсов - независимость от практически любых условий, единственное требование - доступ к страничке по хттпс. Как вариант - готовые сервисы учета тараффика и аналитики.
    Из минусов - нужен сервер с кастомными настройками и базовые знания жс и какого-нибудь серверсайд языка (пых, питон, та же нода...). В случае внешнего сервиса все проще, но необходим доступ к интернету на местах.
    Ответ написан
    Комментировать
  • Как в REST хранить состояние клиента?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Насколько известно, REST не хранит состояние клиента между запросам.
    Это не значит что он вообще не хранит состояние клиента, это значит что он хранит только состояние на момент синхронизации, а МЕЖУ запросами состояние клиента находится в неопределенном состоянии до момента следующей синхронизации. То есть это не принцип который надо соблюдать, а констатация факта. Кроме того, в вашем примере бэкенду/апи вообще должно быть фиолетово на состояние клиента.

    Клиент передаёт необходимые данные в первом запросе. Эти данные меняют состояние сущности (лабиринт) на сервере.
    Сущность лабиринт НИКАК не затрагивается, у вас может изменяться только принадлежащие вам сущности, в данном примере у вас будет меняться состояние робота.

    Если бы клиент располагал всеми данными,
    то он был бы бэкендом и апи было бы не нужно. Собственно апи - способ обмена запрашиваемыми данными.

    Последующие запрос-ответы связаны с предыдущими, не имеют смысла без выполнения предыдущих, поскольку сервер хранит изменяемую сущность (лабиринт).
    Не лабиринт.

    Как серию "запрос-ответ" логически объединить?
    Зависит. Так как вопрос у вас на пальцах и вообще без конкретики, то и ответ будет достаточно общим в рамках описанной системы.
    1) Вы не работаете с сущностью лабиринт, вы работаете с сущностью робот, которая имеет некоторое положение/координаты в лабиринте.
    2) Сущность робот имеет уникальный идентификатор - id, по которому вы однозначно можете определить какой конкретно робот вами будет задействован. Собственно при первом запросе апи должно вам в числе прочего вернуть id робота и его положение.
    3) Запрос к апи для получения позиции робота на момент следующего запроса примерно: GET someapi.tld/api/v1/robot/{id}, в результате назад вы получите объект робота с координатами. Что с ними делать зависит от вашего функционала, например можно задать новые целевые координаты.
    4) Если вам нужно чтобы роботы принадлежали конкретным пользователям, вводим ключи/авторизацию, через которую апи будет определять что робот 55 принадлежит Василию Пупкину, и только он может менять координаты данного робота. Читать соответствующие мануалы.
    Ответ написан
    Комментировать
  • Как в .htaccess перенаправлять запросы в index.php при отсутствии папки или файла?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    if(!$_GET["request"] || typeof $_GET["request"] !== 'string')
    typeof здесь не в тему, так как у вас ВСЕГДА приходит стринг, в гет запросе (как впрочем и в любом другом) нельзя указать тип.

    1. Есть ли лучшие идеи, чем мои?
    В принципе идея не нова, есть даже сервисы готовые под похожие задачи, типа cors-anywhere от heroku и еще куча по запросу cors proxy.

    Я понимаю, что можно напрямую делать запрос к '/?request=''" и не заморачиваться с .htaccess, но такой вариант не красив.
    Это вообще 2 разные задачи. .htaccess настраивается на единую точку входа как написал Сергей delphinpro, далее вы в коде все запросы прошедшие к индексу проверяете на $_SERVER['REQUEST_URI'] (никакой /?request вам не нужен), вытаскиваете из него урл картинки и уже например curl используете для получения ее с другого сайта. Картинку запросу отдать как текст, предварительно отослав соответствующие картинке заголовки.

    2. Как лучше всего обработать ошибку и сделать перенаправление при ненужном или неправильном запросе?
    проверять $_SERVER['REQUEST_URI'] на "правильность", например что запрашивается файл определенных заранее типов, ака вайтлист. В случае несовпадения можно тупо отправить 404.

    3. Как обеспечить безопасность субдомена?
    Безопасность от чего?

    if(!file_exists(folder)) { // проверка на существование папки / файла (так папки или файла?)
        CreateFolder(folder, req) //а если это файл, все равно создаем папку с таким именем?
        return //то есть вложенность больше 1 уровня папки создаваться не будут? 
    }
    Ответ написан