• В чем сходства и отличия паттерна Builder от остальных порождающих паттернов?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Builder:
    query =  (new QueryBulder())
        .select(...)
        .with(...)
        .from(...)
        .all()
        .build();

    Сложное апи создания какого-то объекта

    AbstractFactory:
    Просто создаем фабрику и просто вызываем ее метод создания

    worker = (AbstractFooFactory factory, Params params) => factory.create(params);
    
    worker(new FooMemoryFactory(), new Params())
    Ответ написан
    1 комментарий
  • Как реализовать разделение профиля на две сущности?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Лучше User и Profile разделить: один про пароли, емейлы и токены, другой про профиль внутри вашей системы.
    Сам профиль можно раздробить на более мелкие штуки, можно в рамках одного...

    Вообще лучше изначально разделять, есть некоторое правило: объединять всегда проще, чем потом раздроблять...
    Посмотрите на данные и кейсы, насколько они похожи для мастера и клиента, и сделайте вывод что лучше
    Ответ написан
    Комментировать
  • Как получить доступ к локальному Django серверу из вне?

    Maksclub
    @Maksclub Куратор тега Веб-разработка
    maksfedorov.ru
    Если временно нужно доступ дать:

    ngrok.io

    Ставите (и регаетесь) по иснтрукции, выполянете ngrok --log=stdout http 8081
    вместо 8081 ваш порт (80 или 443 или иной) -> в консоле будет ссылка на ваш сайт, который доступен извне, но работает в локалке. Если свой домен — платно
    Ответ написан
    Комментировать
  • Как автоматически обновлять продакшн из папки dist при новом пуше?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Делаете сборку фронтенда в CI/CD:
    - прогоняете тесты,
    - собираете дистрибьютив,
    - деплоите его на свой хостинг с новым релизом

    Деплой в зависимости от того, какое решение используете. Если у вас свой сервер — создаете папку с релизом, переключаете на эту папку symlink на папку, на которую смотрит nginx и новый бандл будет отдаваться уже после успешного релиза
    Ответ написан
    Комментировать
  • Как правильно писать функции, классы, свойства, конструкторы?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Для управления сложностью наш мозг работает с абстракциями — в единый момент мы работает не сразу со всей кухней каждой штуки, а только с ее нужными характеристиками...

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

    В программе есть входная точка, в ней описывается вызов приложения и конфигурация его запуска, само приложение и нюансы запуска могут быть (скорее всегда) сложны, чтобы их держать тут же по месту — потому они выносятся в самостоятельные смысловые единицы со своими названиями и уже со своими внутренними деталями.
    Ответ написан
    1 комментарий
  • Из-за чего возникает ошибка does not allow GET в маршрутизации?

    Maksclub
    @Maksclub
    maksfedorov.ru
    запрос на роут не матчится с теми, что вы указали

    сравните
    /users_friends/:id/count
    /users_friends/:id/:friend_id
    /users_friends/2fr325976/id

    наделали много роутов, перепутали их порядок и природу :)
    Ответ написан
  • Как организовать роутинг с docker?

    Maksclub
    @Maksclub
    maksfedorov.ru
    У вас роутинг для фронтенда не в контейнер же идет, вы можете index.html и js скрипты разместить прямо с nginx
    И все запросы, которые не для бекенда направлять на index.html

    Итого: login/logout/api проксируете, остальным отдаете index.html

    А вообще лучше домены разделить
    Ответ написан
    Комментировать
  • Есть ли плагин для автоматизации выгрузки проекта на github?

    Maksclub
    @Maksclub
    maksfedorov.ru
    у гитхаба есть АПИ, можете через него создавать репо, выгружать файлы и все это
    Ответ написан
    Комментировать
  • Я что-то не так понимаю в декларации типа Event для DOM?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Интерфейс не содержит нужных полей, нужно указать тип примерно так
    (event.target as EventTarget). tagName
    Ответ написан
    Комментировать
  • Как добавить body к http request'u в java?

    Maksclub
    @Maksclub
    maksfedorov.ru
    HttpRequest request = HttpRequest.newBuilder()
      .uri(new URI("https://postman-echo.com/post"))
      .headers("Content-Type", "text/plain;charset=UTF-8")
      .POST(HttpRequest.BodyPublishers.ofString("Sample request body"))
      .build();
    Ответ написан
    Комментировать
  • Какие есть хорошие курсы по веб-дизайну?

    Maksclub
    @Maksclub Куратор тега Веб-разработка
    maksfedorov.ru
    Яндекс.Практикум, есть друзья там, кто обучается — очень крутой подход с преподами, курсовыми, экзаменами и всем этим...
    Учат работать с юзкейсами, тестирвоание гипотез, интервью заказчиков и, конечно, техника и навыки...

    Школа Дизайнеров от Бюро Горбунова — очень крутые ребята, их хантят на выпуске топовые компании
    вот дипломы https://bureau.ru/school/projects/
    Тут не только техника дизайна, но и глубокая работа редакторов по работе со смыслом для пользователя. Работа с текстом (под патронажем Максима Ильяхова (автор "Пиши сокращай")
    Ответ написан
    Комментировать
  • CQRS/ES (или это EventDriven вообще) - Кто поможет разобраться с терминами?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    CQRS — разделяем чтение и запись, в идеале и стораджи (в одно пишем результат команд на write сценарии), с др читаем проекции, готовые данные

    Между этими сценариями работают какие-то воркеры, которые готовят чтение...

    Зачем это делают: разделение ответственности, о котором в названии паттерна указано, оптимизация чтения
    Очевидно, что для чтения можно оптимизировать хранилище — например NoSQL с готовыми данными

    Тк чтение и запись разделены — нет смысла на записи делать изменение стейта по классике, когда мутируем состояние в сторадже и можно просто хранить поток событий, проматывая которые мы получим стейт бизнес-сущностей (они на чтении уже не участвуют и нет потребности в "готовом" измененном стейте)... Это очень удобно,

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

    На эти события вешаем те самые воркеры, которые инициируют подготовку данных для чтения (или нет)
    Ответ написан
  • Почему данные доходят до nginx, но не доходят до Laravel?

    Maksclub
    @Maksclub
    maksfedorov.ru
    я не знаток нюансов, но вижу, что все запросы у вас уходят на $scheme://car.mydomain.ru/gprs
    пути .php не имеют смысла, тк никто /foo.php не запрашивает, на всех сайтах запросы вида /foo/bar без расширения

    лучше опишите изначальную функциональную задачу, а не уточнения по выбранному вами решению :)
    Ответ написан
  • Есть ли программа "Гимнастика для глаз и шеи на рабочем месте"?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Можно поставить помидоро или что-то такое на компьютере, чтобы уведомлял "пора встать из-за компьютера и сделать гимнастику"

    Делая гимнастику сидя не очень хорошо, все равно вы будете ее делать, значит не будете работать: полезно сделать отжимания, присяды и планку, чтобы размять спину... странно это делать сидя там же :)
    Базовые упражнения и разминка стоя/лежа лучше вашей задумки и не смогут быть перебиты вашими аргументами.
    Еще для человека базовое движение ходьба — тк в тазу много сосудов крупных
    Ответ написан
  • Обработка всех url nginx?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Как сделать так что бы nginx перенаправлял все запросы на angular приложение, и ангуляр сам решал что показывать?

    Так и сделать — все запросы кроме файлов направить на index.html
    location / {
            try_files $uri $uri/ /index.html =404;
        }


    Но надо честь, что это и бекендовые запросы отправит на index.html
    ЧТобы исключить часть путей, например /api/... то сделайте так:
    location ~ ^/(api|metrics) {
            proxy_set_header X-Real-IP $remote_addr;
            # http://backend — это докерный хост бекенда, у вас может быть что-то другое, например проксирвоание на php-fpm или ip
            proxy_pass http://backend:8001;
        }
    
        location / {
            try_files $uri $uri/ /index.html =404;
        }
    Ответ написан
    Комментировать
  • Реализации протоколов интернет - где, как, кем?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Реализации хранятся в стандартных библиотеках языков и в системных утилитах, типа curl

    Когда вы на каком-нибудь языке используете системную библиотеку, которая реалзует например http, то каждая умеет делать запрос согласно протоколу — указывать метод, адрес, keep-aliveб тело и прочие штуки; умеет делать сам запрос (отправяет пакеты) и умеет получать ответ

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

    Maksclub
    @Maksclub
    maksfedorov.ru
    Сложность задания в вычислении нужного маршрута...

    Саму карту с адресами "откуда" и "куда" (+ промежуточные точки) + карты готовые — сделать не сложно
    Форму с услугами тоже не сложно — пару мес разработки

    Если достаточно откуда/куда + промежуточные точки, а маршрут считать как-то (не знаю, есть ли в АПИ карт построение маршрута для большегрузов/просто авто)

    UPD: маршруты в АПИ карт
    https://yandex.ru/dev/maps/jsbox/2.1/route_panel_c...

    UPD2: есть такие возможности Матрица расстояний
    https://yandex.ru/dev/maps/mapsapi/#logistic
    Так что за 2-3 мес можно написать вменяемый сервис
    Ответ написан
  • Spring Security. Как дать возможность юзеру изменять только свои объекты?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Вы можете сделать свой Voter для определения, может ли юзер изменять конкуретную сущность

    @Override
    public int vote(Authentication authentication, MethodInvocation methodInvocation, Collection<ConfigAttribute> attributes) {
      for (ConfigAttribute configAttribute : attributes) {
        if (supports(configAttribute)) {
          User principal = (User) authentication.getPrincipal();
          Spreadsheet domainObjectInstance = (Spreadsheet) getDomainObjectInstance(methodInvocation);
          return hasSpreadsheetAccess(principal, domainObjectInstance) ? ACCESS_GRANTED : ACCESS_DENIED;
        }
      }
      return ACCESS_ABSTAIN;

    Тут в voter логика доступа к объекту Spreadsheet у объекта User
    Метод hasSpreadsheetAccess видимо определяет, может ли конкретный юзер доступ к конкретному Spreadsheet, например проверка spreadsheet.GetUser().GetID() == user.GetID()

    остается только данный voter повесить на метод контроллера или сервиса через аннотацию @Secured и зарегать этот voter в конфиге

    Источник: https://blog.jdriven.com/2019/10/spring-security-c...
    Ответ написан
    1 комментарий
  • Как сделать редирект на другой сайт методом post?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Нажимаете кнопку "Сделать заказ" — идет запрос на ваш сервер с созданием заказа (пользователь, номер заказа, сумма, товары заказа, статус "ждет оплаты" и вот это все). На сервере создаете заказ и редиректите на кассу...

    Пользователь оплачивает, и вам либо редирект, либо вебхук прилетит, что заказ оплачен (меняете статус заказа, уведомляете юзера по почте), при входе в кабинет юзер увидит новый статус заказа, если полачен, если перейдет раньше, чем оплатил — статус будет "ждет оплаты")

    Обычно страница ссозданием заказа и оплатить делают не в одном флоу, а раздельном... типа "Создать заказ", там доофрмляет именем/способом оплаты, если не заполнял еще — заполняет свои данные и кнопка "Купить/Оплатить". отдельное флоу, тк спосообов оплаты на вашем сайте может больше, чем одна ЮКасса
    Ответ написан
    Комментировать