Задать вопрос
Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (6)

Наибольший вклад в теги

Все теги (51)

Лучшие ответы пользователя

Все ответы (70)
  • Что такое enterprise разработка на самом деле?

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

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

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

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

    По-этому, стоит рассматривать не энтерпрайз/не энтерпрайз, а конкретные компании с конкретными требованиями и циклами разработки.
    Ответ написан
    1 комментарий
  • Как должен вести себя нормальный PM?

    @miksir
    IT
    Начните пользоваться трекером, хотя бы. Все задачи - через трекер. Задачи должны декомпозироваться на мелкие, до 8-16 часов, хотя бы. Приоритетом могут управлять менеджеры, хоть 10 - пусть сами дерутся. Принципиально не меняете задачу, не закончив ее (ну, за исключением хотфиксов). Но учитывайте , что тут больше к вам требований, чем к ПМ-ам - правильно декомпозировать проект, оценить задачу и выдержать время, и да, это тоже занимает время.
    А найти хорошего ПМ-а еще сложнее, чем хорошего программиста.
    Ответ написан
    Комментировать
  • Nginx + php7-fpm High load?

    @miksir
    IT
    5000 запросов в 1 секунду на PHP скрипт? Давайте начнем с PHP, может, а не с nginx. Считаете время ответа одного запроса T, считаете количество воркеров PHP N = 5000*T. Далее запускаете это число воркеров, делаете одновременные запросы на все воркеры и путем увеличения числа ядер процессора добиваетесь времени ответа сервера такого же, какой был на одном воркере. Ну, это без учета того, что если используется СУБД - ее время ответа тоже нужно будет исправлять на заданной конкурентности. Не хватает ядер, добавляем сервера.
    Ответ написан
    4 комментария
  • Безопасность банковских карт?

    @miksir
    IT
    1) На некоторых интернет магазинах не требуется никакого подтверждения смс кодом или еще как-то.

    1) Так называемое 3ds (подверждение смс) - способ защиты мерчанта от фрода. В случае вашего несогласия с платежом (опротестование через банк) при отключенном 3ds - убыток несет мерчант. Если мерчант поддерживает 3ds - ответственность перекладыватся на владельца карты. Т.е. если у вас увели данные карты и купили через 3дс - у вас хороший шанс опротестовать и получить деньги назад (хоть это и займет много времени). Если 3дс был (у вас увели телефон или посадили вирус или как-то узнали код) - вернуть ничего не получится. Почему не все мерчанты поддерживают 3дс? Ну, например почитайте https://habrahabr.ru/company/badoo/blog/234677/ - там есть цифры, как 3дс уменьшало продажи.

    Вопрос: что можно сделать с картой, имея лишь ее номер и зачем, если это небезопасно, банки выбивают номер на самом видном месте?

    2) Сейчас почти ничего, мест, где можно провести операцию только по номеру карты без какой-то дополнительной верификации - почти не осталось. Я бы не стал светить номер карты везде в интернете, но и скрывать номер от друзей/начальника и т.п. смысла нет. А вот CVV код (на обратной стороне) стоит спрятать (лучше всего переписать и затереть нафиг). Опять же, если уведут номер карты + cvv - скорее всего такие платежи можно будет опротестовать, но нафига вам лишний гимор.

    общем все это выглядит очень небезопасно и я стараюсь не хранить большие суммы на карте.

    Угроз много, опротестование занимает время, банки не особо охотно это делают и т.п. Так что держать сумму, которую не сильно обидно потерять - самое оптимальное. И подкидывать туда деньги с другого счета через интернет-банк по мере необходимости.
    Ответ написан
    Комментировать
  • DDD Agregate, Entity, Repository понятным языком?

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

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

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