• Почему объекты созданные через класс не наблюдаются mobx?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Рекурсивная наблюдаемость объектов (выставляемая по умолчанию в makeAutoObservable и успешно примененная в bStore) не залетает в пользовательские классы. Считается, что класс (в твоем случае AStore) должен сам настроить внутри себя наблюдение.

    об этом написано в документации https://mobx.js.org/observable-state.html
    ctrl+F "primitives and class instances are never converted to observables"
    Ответ написан
    Комментировать
  • Что означает «код не как у сениора»; и как его подтянуть?

    HighTechLowLife
    @HighTechLowLife
    Если опустить паттерны / SOLID и прочую архитектуру и открыть любой рандомный php-файл, то сразу можно увидеть хороший код или шляпу. Обычно у меня такие критерии последнего:
    1. Отсутствие кодсайла PSR или другого. Убогое форматирование. Двойные-тройные пустые строки; Лишние пробелы; Или, наоборот, код слеплен без единой пустой строки, которая логически бы отделяла блоки.
    2. Отсутствие scrict-сравнения; Всегда стараюсь писать через ===, declare(strict_types=1), добавлять true в конец in_array и подобных;
    3. Отсутствие type-hint'ов; хотя бы в phpdoc; Отсутствие указания области видимости метода / поля / константы;
    4. Неадекватные названия переменных и методов, по которым непонятно, что это. Лишние переменные. Или отсутствие пемененной, где она была бы полезной, для улучшения понимания кода;
    5. Тупые и очевидные комментарии ради комментариев;
    6. Длинные портянки. Если метод, условно, больше 80 строк, то, мб, надо задуматься о декомпозиции;
    7. Куча параметров в сигнатуре функции
    8. Неиспользуемые переменные / константы / методы "на будущее".
    9. Закомментированный код;
    10. Хард код. Какие-нибудь api url прям в коде в переменной, вместо конфига или хотя бы константы.
    11. Забивание на работу с ошибками. unserialize вернул false? Да неее, такое точно не произойдёт


    Ну, это что на первый взгляд бросается. Потом видишь неоптимальный код. Какой-нибудь INSERT в бд по одной строке в цикле foreach.
    Ответ написан
    Комментировать
  • О каких IT специалистах говорят, когда речь идет о дефиците кадров?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    У вас неправильная оценка. Если убрать новичков останется максимум 10 миддлов
    Ответ написан
    Комментировать
  • Как реализовать такое нижнее подчеркивание?

    DanArst
    @DanArst Куратор тега HTML
    Гриффиндор в моде при любой погоде!
    Зачем отключать свойства? Это ведь эффект при hover-е. Так откройте devTools, выберите интересующий вас элемент и посмотрите на его стили, далее нажмите правой кнопкой мыши на него и в контекстном меню выберите Force state -> Hover и снова смотрите стили.
    На сайте из вашего вопроса сделано так:
    Ответ написан
    1 комментарий
  • Почему сайт может очень долго грузится?

    den_rad
    @den_rad
    PHP разработчик
    Для начала стоит разобраться, сайт медленно работает из-за передачи данных (медленный канал), большой нагрузки на PHP или нагрузки на базу данных ?
    Ускорить загрузку можно, если пустить сайт через Cloudflare, например.
    Посмотреть, сколько времени генерируется страница можно с помощью профилирования
    Ответ написан
    Комментировать
  • Почему PermissionError: [Errno 13] Permission denied на хостинге?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Немного странно спрашивать "в чем может быть проблема", если это написано прямо в заголовке вопроса.
    Ошибка Permission denied является совершенно стандартной, переводится как ошибка прав доступа к файлам/папкам.
    ".htaccess" (как и sqlite) здесь совершенно не при чем
    Пользователь, под которым выполняется веб-сервер, не имеет права на запись в папку app/static/images/goods/
    Надо разобраться, под каким пользователем создана папка и под каким пользователем выполняется веб-сервер. В самом тупом случае поставить папке права 777, но лучше всего конечно сделать так, чтобы веб-сервер выполнялся от имени пользователя
    Ответ написан
    5 комментариев
  • Как сделать комит в GITLABE без запуска runner?

    @d-stream
    Готовые решения - не подаю, но...
    Самое простое - в commit message поместить "волшебный" текст [skip ci] либо передать опцию ci.skip гиту
    Либо менять слегка схему сборки и там уже либо реагировать на условия, а в остальных случаях например не собирать (gitlab yml when/rules)
    Ответ написан
    3 комментария
  • Laravel как правильно обновить баланс при покупке?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    В таблице баланса ограничиваете возможность отрицательных значений
    create table user_balance (
    	user_id int,
      	balance decimal(9, 2) check (balance >=0)
    );


    create table user_balance_unsigned (
    	user_id int,
      	balance decimal(9, 2) unsigned
    );


    любая попытка списать больше чем баланс вызывает ошибку

    SQL online environment
    Ответ написан
    1 комментарий
  • Laravel как правильно обновить баланс при покупке?

    iMedved2009
    @iMedved2009
    Не люблю людей
    1. Лочить запись в таблице балансов до момента списания. Залочили, проверили, списали, разлочили. Другие процессы либо будут ждать - либо вылетят по таймауту.

    2. Использовать update с условием. update user_balance where user_id = ? and balance > нужного. У вас запрос не выполнится если кто то уже списал деньги. А вы по affected rows можете судить списалось или нет
    Ответ написан
  • Как обработать запрос в Laravel Octane в одном потоке?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Операция проверить есть запись и вставить - не атомарная. У вас одновременно может выполнится вагон проверок и начать вставку.

    1. Использовать локи. Залочили таблицу, проверили, вставили, убрали лок.

    2. Повесить unique на связку поле ['user_id', 'post_id'], и через catch ловить нужный exception.

    3. Повесить unique на связку поле ['user_id', 'post_id'], и добавить макро upsert - на вставку pivot.
    Ответ написан
    5 комментариев
  • Как встроен HTTP в HTTPS?

    Если HTTP - это тупо текст поверх TCP, то HTTPS - это текст, завёрнутый в TLS, который идёт поверх TCP.

    что значит "модификация"

    1. Хз что ты там читал, но мне вся выдача гугла говорит, что HTTPS - это расширение HTTP
    2. Если не вдаваться в этимологию, то "расширение" - это когда суть расширяемого объекта не меняется, но добавляется что-то ещё. В случае HTTPS - у нас остаётся вся семантика HTTP, но добавляется шифрование.

    По факту это всё-таки другой протокол, который не совместим с обычным Http
    Ответ написан
    Комментировать
  • Как лучше добавить на сайт текстовый логотип, как SVG изображение или ЗАГОЛОВОК?

    @archelon
    tldr: подключайте svg и не мучайтесь.

    а) Трудозатраты
    Подключить картинку быстрее и проще.
    б) Надежность
    Изображение будет гарантированно отображаться как надо на всех устройствах. Если где-то вдруг не загрузится шрифт, или не успеют прогрузиться стили, вы потеряете оформление.
    в) Индексация
    Теоретически может оказаться полезным то, что текст будет прочитан и учтен поисковиками, хотя обычно это не дает каких-то преимуществ.
    г) Оптимизация
    В разных случаях меньше будет весить картинка или оформленный текст.
    Если для текстового логотипа надо прилинковать пару нестандартных шрифтов, это значительно увеличит количество кБайтов. Если нет, текст будет немного меньше весить, но выигрыш будет несущественным.
    д) Особенности дизайна
    В некоторых случаях может быть нестандартный дизайн, где текстовый логотип — необходимость.
    е) Действительно простой логотип
    Ну и конечно, если логотип — это банально название компании / марки, набранное уже подключенным шрифтом, и никаких дополнительных итераций (интерлиньяж, трекинг и т.п.) не требуется, тогда, действительно, проще набрать текстом.
    Ответ написан
    Комментировать
  • Как сохранить личные данные на публичном сайте?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Просто добавить авторизацию, пусть даже базовую.
    Ответ написан
    1 комментарий
  • Как конвертировать HTML-текст в обычный?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. создать элемент
    2. в него положить исходный HTML как innerHTML
    3. забрать из него уже textContent

    const textFromHTML = html => {
      const el = document.createElement('div');
      el.innerHTML = html;
      return el.textContent;
    }
    
    textFromHTML('на уровне около $300') // "на уровне около $300"
    Ответ написан
    Комментировать
  • Почему PHP кэширует содержимое скрипта при запуске из sudo?

    @rPman
    linux запущен из wsl windows?
    что то похожее (точнее там была разница значений внутри linux контейнера из windows было странно разное)

    для linux это однозначно неправильное поведение, на дефолтном окружении такого поведения не возникает, вспоминай что такое делал с linux что оно так стало вести.

    p.s. консольный php работает без кеширования
    Ответ написан
    6 комментариев
  • Нужны ли интерфейсы?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Spring
    Седой и строгий
    Вам виднее, нужны ли они в вашем проекте. Обычно это зависит от сложности проекта и темпов его развития. В чëм-то мелком и мало изменчивом внедрение через интерфейсы - это карго-культ. В большом и сложном проекте, который постоянно изменяется - это жизненно необходимый подход, без которого работа сначала превращается в ад, а потом и вовсе становится невозможна.
    Ответ написан
    1 комментарий
  • Как использовать сессию для всех клиентов одновременно?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Единственно правильный ответ - никак.

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

    Если под "сессией" имелось в виду общее хранилище для всех пользователей, то оно называется "база данных". И в этом смысле "БД не предлагать" выглядит беспочвенным капризом. Как правильно заметил N в комментарии, такое заявление звучит как "Как кушать суп? Ложку не предлагать."
    Такие заявления надо всегда подробно обосновывать. И в этом случае вам либо действительно подскажут, как обойтись без БД, либо объяснят, что это просто блажь.

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

    @Drno
    Это не биржа. это просто фейковый сайт и развод.
    Можешь обратиться в правоохранительные органы разве что
    Ответ написан
    2 комментария
  • Как с помощью регулярного выражения выбрать то, что находится между символами?

    Aetae
    @Aetae
    Тлен
    Правильный ответ: нельзя (невозможно надёжно) использовать регулярные выражения для парсинга html. Используйте библиотеку для html-парсинга, имеющуюся для любого языка, какой бы вы не использовали.

    Ответ: /(?<=">).*?(?=<\/)/.
    Ответ написан
    2 комментария