• Допустимо ли в PSR-4 использовать два пространства имен верхнего уровня, и если да, то как их назвать?

    @miksir
    IT
    Во-первых, у вас удар по семантике уже нанесен смертельный когда вы начали делать неймспейсы Classes, Libs и Includes. Семантика - это назначение класса, но никак не его тип. Т.е. Controlles, Models, Services, Events и т.п. Но это лирика.

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

    Что до psr-4, он позволяет любую левую часть неймспейса (любого размера) мапить на любую директорию. Т.е. вы може свой \Heian\MyCoolProject\ отмапить в ./src/ и тогда \Heian\MyCoolProject\Libs будет ./src/Libs. Можете \Heian\MyCoolProject\Libs\ отмапить в ./mylib/ и т.д. Причем, таких мапов может быть сколько угодно, хоть все варианты неймпсейсов пропишите в мапинг.

    Хотя, конечно, обычно делают что-то вроде \MyVendor\Project\ в ./src/Project/ или просто \MyVendor\ в ./src/
    Ответ написан
    Комментировать
  • Будет ли быстро работать bitmap index?

    @miksir
    IT
    Нет, bitmap индекс - это другое, отношение к битовым операциям не имеет
    https://wiki.postgresql.org/wiki/Bitmap_Indexes
    Если у вас ограниченное число таких условий, можно построить индексы по выражению (например, индекс по выражению column & 0b0101111).
    Ответ написан
    Комментировать
  • По каким причинам приватные свойства родителей имеют больший приоритет, нежели публичные свойства потомков?

    @miksir
    IT
    Потому что иначе по факту мы бы получили переопределение приватного свойства, что противоречит смыслу. По-этому, выбранная логика волне очевидна и не дает подводных камней.
    Ответ написан
    2 комментария
  • Wildcard поддомен в Nginx возвращает No input file specified. Что не так?

    @miksir
    IT
    Вы используете нумерованные выделения, но они сбрасываются после каждого регекспа. Т.е. в `location ~ \.php$` уже нет того $1, что вы ожидаете.
    Для выхода из положения присвойте $1 какой-то переменной `set $servername $1`, а самое лучшее - использовать именованные выделения
    `server_name ~^(?<servername>.+)\.example\.com$;`
    и далее использовать $servername в любом месте конфига сервера.

    Стоит прочитать nginx.org/ru/docs/http/ngx_http_core_module.html#s... и nginx.org/ru/docs/http/server_names.html
    Там расписано в том числе порядок обработки имен серверов.
    Ответ написан
  • Возможно ли кэширование nginx страниц с авторизацией по заголовкам?

    @miksir
    IT
    Все заголовки переводятся в переменные $http_...
    $http_имя
    произвольное поле заголовка запроса; последняя часть имени переменной соответствует имени поля, приведённому к нижнему регистру, с заменой символов тире на символы подчёркивания


    Т.е. достаточно подмешать к proxy_cache_key переменную $http_authorization
    Например:
    proxy_cache_key $scheme$proxy_host$request_uri$http_authorization;
    Ответ написан
    Комментировать
  • Что такое enterprise разработка на самом деле?

    @miksir
    IT
    Enterprise разработка - это разработка, направленная на решение проблем бизнеса. В отличии от разработки для решения проблем конечных пользователей.

    На самом деле нет каких-то зафиксированных принципиальных характеристик, которые присущи только EA. По-этому, в разговорной речи понятие "энтерпрайз" может значить весьма разные вещи. С одной стороны энтерпрайз - не про увлечение модой с переписыванием всего, как только появится новый тренд. Ибо это _дорого_, так как цена ошибки дорога. С другой стороны - совсем не обязательно, что это 20-летние технологии. Конкретный бизнес сам для себя выбирает модели развития и обновления стека технологий. С одной стороны - это сложность ПО, бизнес-логики. С другой - сложность понятие весьма относительное.

    Но если все же пытаться выделить какие-то характерные черты, я бы назвал несколько:
    * устойчивость к трендам (использование их, когда они пройдут стадию моды и перейдут к стадии заинтересованности крупными игроками, ибо никому не нужны технологии, которые через год умрут и их поддержка будет дорожать каждый день).
    * сложная и непостоянная бизнес-логика, давление на нее из множества источников
    * результат сложной переменчивой бизнес-логики в совокупности с длительным использованием продукта приводит к целям снижения стоимости поддержки за счет стоимости первоначальной разработки, производительности и потребляемых ресурсов. ООП, SOLID, Unit Test/TDD, DDD - все эти популярные буквы - последствия "энтерпрайза", когда мы готовы серьезно подходить к написанию кода для облегчения его последующего изменения.
    * слабо заметный вклад конкретного программиста, проистекает из сложности ПО

    Требования к программисту... ну я бы сказал, усидчивость, вдумчивость, исполнительность... хм, а что, в каких-то других областях другие требования к программистам? Хотя, конечно, в противоположность, можно назвать способ разработки "быстро-быстро и в продакшн". Но, к слову, такие ситуации могут и в энтерпрайзе возникнуть.

    По-этому, стоит рассматривать не энтерпрайз/не энтерпрайз, а конкретные компании с конкретными требованиями и циклами разработки.
    Ответ написан
    1 комментарий
  • Стоит ли использовать uuid или есть что-то еще?

    @miksir
    IT
    >Как без особого вреда для базы можно генерировать id для объекта за ранее ?

    SELECT nextval('name_of_sequence');
    Ответ написан
    Комментировать
  • Как сделать более весомее колонки в PostreSQL при поиске?

    @miksir
    IT
    Вы, надеюсь, про FTS в PostgreSQL? Тогда, скорее всего ответ содержится тут https://www.postgresql.org/docs/9.5/static/textsea...

    Создание индекса
    UPDATE  table SET ftsindex = 
    setweight(to_tsvector(coalesce(subject,'')), 'A') ||
    setweight(to_tsvector(coalesce(message,'')), 'D');


    При создания индекса разным полям можно назначить условный вес, от A до D.
    При запросе, условному весу можно указать реальный

    SELECT id, ts_rank_cd({1.0, 1.0, 1.0, 3.0}, ftsindex, query) AS rank
    FROM table, to_tsquery('this is a test') query
    WHERE query @@ ftsindex
    ORDER BY rank DESC
    LIMIT 10;
    Ответ написан
    6 комментариев
  • Как ограничить вместимость папки на сервере?

    @miksir
    IT
    После каждой скачки в sh скрипте проверять размер папки (du -s) и если превышение - завершать работу. Если файлы мелкие, то погрешность из-за многопоточности будет не очень большая.
    Ответ написан
  • Как правильно сделать редирект с поддомена в каталог с помощью Nginx?

    @miksir
    IT
    server {
        listen 80;
        server_name api.domain.dev;
    
        location / {
            proxy_set_header Host domain.dev;
            proxy_pass http://keeper_app/api/;
        }
    }
    Ответ написан
    4 комментария
  • DDD Agregate, Entity, Repository понятным языком?

    @miksir
    IT
    Entity - сущность бизнеса. То, что еще называют "моделью", хотя этот термин так засрали, что лучше и не вспоминать про него. С чем работает наша проблемная область? С Клиентом, с менеджером, с заказов, с товаром - это и будут сущности. Важный момент - у сущности есть уникальный идентификатор.

    Репозиторий - это коллекция сущностей, паттерн по управлению сущностями. Из репозитория мы их получаем, в репозиторий отправляем. Конкретная реализация репозитория на persistence уровне уже занимается сохранением и поиском сущностей в базах данных.

    С аггрегатом и просто и сложно. Когда мы проектируем нашу предментую область, мы можем выделить такие сущности, которые не должны использоваться в отрыве от какой-то другой. Например, есть сущности "конкурс" и "фото на конкурс". Последняя не может существовать без конкурса, не может использоваться без него. При этом, именно "конкурс" мы будем спрашивать - сколько фото пришло. Удаляя конкурс - нужно удалить все фото этого конкурса. В таких случаях, мы определяем сводные (aggregate) границы и выделяем главную сущность (aggregate root или сводный корень). Ссылаться "извне", т.е. из других сущностей, не входящий в аггрегат мы можем только на сводный корень. Запрашивать из репозитория можем только сводный корень. И т.п., там много ограничений. Основная идея тут - инкапсулировать взаимодействие связанных сущностей внутри сводных границ, упростив таким образом глобальные взаимодействия.
    Ответ написан
    4 комментария
  • Что делать первым? Дизайн и интерфейсы или серверную разработку? (backend/API)?

    @miksir
    IT
    Зависит от обстоятельств. И от того, что приоритетнее - затраты или сроки.

    Если у нас есть подробное ТЗ на функционал, по которому работает как бекенд, так и дизайнеры, то разработка может идти одновременно с дизайном. Или есть интеграционные задачи с системами заказчика, по которым можно работать без дизайна вообще - разработке ждать дизайн не нужно.

    Или, если UI команда занимается только разрисовкой стандартных шаблонов - то почти всю разработку можно закончить и без макетов. Но, если есть этап целеориентированного проектирования, т.е. на старте нет понимания того, какой функционал будет реализован, то стоит подождать прототипов. Хотя даже в этом случае - базовые модели данных редко меняются.

    С опытом управления разработкой приходит понимание, что именно может сильно поменяться после отриcовки UI, а что нет. И это "нет" можно запустить в разработку. Ну а ошибки такого понимания рефакторятся - в большинстве случаев это будет все-равно быстрее, хотя и затратнее.

    С мобильным приложением как-то так же. Мы знаем базовые модели данных, можем делать АПИ. Но по мере отрисовки экранов приложения - АПИ может меняться, дополняться.
    Ответ написан
    Комментировать
  • Как быстро сайт будет доступен по доменному имени?

    @miksir
    IT
    Меняли NS у регистратора домена? Несколько часов (в срднем от часа до 8 часов, там фиксированное расписание). По информации с ру-центра:
    Изменения вступят в силу после обновления информации в зоне верхнего уровня. Зона RU обновляется 4 раза в сутки: в 02:00, 10:00, 14:00, 19:00 (по московскому времени). Зоны SU и РФ обновляются каждый нечетный час. Обновления зон занимают от нескольких минут до получаса.

    И после того, как NS-ы появятся, еще нужно время на протухание кеша DNS серверов. Ели у вас свой ресолвер (DNS сервер, который вы используете на своей рабочей машине для ресолва доменов), то просто сбросить на нем кеш.
    Ответ написан
    1 комментарий
  • Как настроить несколько доменов для одного сайта на nginx?

    @miksir
    IT
    Самый правильный вартант - все же решить на уровне движка и правки базы.

    Эту задачу можно решить nginx-ом с помощью модуля замены данных в теле nginx.org/ru/docs/http/ngx_http_sub_module.html
    В примере там, даже, что-то такое, что вам нужно - замена фиксированной строки на $host - имя домена в запросе.

    Но я бы использовал это решение как временнное, и запланировал бы изменение базы ибо это гораздо более прозрачно для дальнейшей разработки и поддержки конфигурации.
    Ответ написан
    Комментировать
  • Реально сделать проект по схеме, где фронтенд работает на Node.JS, а бэкенд на php?

    @miksir
    IT
    Как уже сказали, нода - это тоже бекенд. Используются вместе путем разделения запросов к ноде и пхп по урлу или имени сервера.

    Например, по урлу. Запросы вида /api/что-то/ идут на пхп, все остальные - на ноду. Т.е. запрос клиента приходит на nginx, тот перенаправляет его на ноду, она отрабатывает логику и делает запрос в nginx на /api/что-то/, который, используя правила location - перенаправлет его в php.

    По домену - аналогично. Просто в nginx будет для разных типов запросов разные server блоки со своими site_name (и, возможно, своими listen, если мы хотим разнести эти точки входа по разным портам или ip адресам). Если запрос на www.domain.com - запрос на ноду. Если запрос на localhost - запрос в php. Соответсвенно, нода делает запросы на localhost (тоже через nginx).

    Теоретически, нода может работать напрямую с PHP без промежуточного nginx, по протоколу FastCGI, но такая схема почти не используется. И из-за того, что работать из ноды с http проще, и из-за гораздо большей гибкости управления конфигурацией, тогда как дополнительные накладные расходы из-да nginx между нодой и пхп - весьма малы относительно общего времени обработки запроса.
    Ответ написан
    3 комментария
  • Как защитить (подтвердить) уникальность макета?

    @miksir
    IT
    Авторство закрепляется автоматически, никаких дополнительных телодвижений делать не обязательно.

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

    @miksir
    IT
    Если уточнить ответ devman, у вас php не может найти RedBeanPHP\OODBBean на момент старта сессии. Автолоад или include файла с этим классом (если он вообще есть) следует сделать до старта сессии.
    Ответ написан
    Комментировать
  • Как правильно сделать выборку товаров по 100 параметрам (EAV)?

    @miksir
    IT
    Раз вам нужно убирать неподходящее в disable, то на реляционной базе, да еще с EAV - это будет ад, как по коду, так и по производительности.

    Самое очевидное решение тут брать подходящие для этих задач решения, например, elasticsearch. Вот, например, статья про такой вариант https://blog.madewithlove.be/post/faceted-search-u...
    Ответ написан
    Комментировать
  • На чем написан "Мой Круг"?

    @miksir
    IT
    PHP5
    Postgresql

    > Как разобраться что работает на сервере?
    Заглянуть в сервер. Или искать информацию по разработчикам проекта в интернете.
    Например, https://moikrug.ru/dmitry
    Ответ написан
    Комментировать