• Как стать спикером по фронтенду?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Но у меня вопрос, как люди становятся этими самыми спикерами?


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

    Собственно никакой магии. Либо просто случайно кто-то попросит что-то в духе "слушай, может выступишь?" либо сам.

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

    Тем более по фронтэнду. Там сейчас ситуация такая что большинство не очень опытные разработчики. И что-то интересное им рассказать и полезное более чем легко.
    Ответ написан
  • Друзья, каким образом изменить значение свойства $b (прибавить единицу) у каждого объекта класса T, заданного в конструкторе класса G?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) var - не используйте это ключевое слово. Используйте public. А еще лучше - private.
    2) инкапсуляция, закон деметры. Не меняйте состояние объектов напрямую. Используйте сообщения (вызовы методов).
    3) вот эти свистоплязки с динамическим созданием имен переменных лишены всякого смысла
    4) имена классов, свойств, методов и вообще должны быть осмысленны. Вы должны быть в состоянии, ну не знаю, прочитать код вслух! и что бы всем вокруг все было понятно.

    class T{
        private $b;
        private $s;
    
        public function __construct() 
        {
             $this->b = mt_rand(0, 1000);
             $this->s = 'foo';
        }
    }
    
    class G
    {
        public function __construct(array $t) 
        {
              // ...
        }
    }
    
    $g = new G(array_map(function () {
        return new T();
    }, range(1, 4));
    Ответ написан
  • Чат на сокетах в связке с пхп?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Идеальный вариант - nodejs + socket.io + pub/sub на каком zeromq. Этот способ наиболее эффективне ибо адекватной реализации websocket сервера на PHP как бы нету.

    Во всяком случае вместо полумертвого ratchet лучше поковырять какой https://github.com/walkor/Workerman

    Еще есть более простой вариант - quickblox - BaaS решение и все такое. Подключили и юзайте. Там есть SDK для js.
    Ответ написан
  • DQL запрос в symfony (связь много ко многим)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А как получить список акций, которых нет у заданного пользователя?


    Перефразируя. Вам нужен список акций всех пользователей кроме конкретного, нет?

    SELECT s.stockname FROM Stocker\StockBundle\Entity\Userstock s
    WHERE s.user != :user


    где :user это id юзера.

    Вообще такая штука. Если вы хотите оперировать SQL и т.д. то оперируйте. Напишите свой native query и т.д. А еще лучше - откажитесь от доктрины. Она хороша тогда, когда вы погружаетесь в предметную область и больше тратите время не на SQL/базы данные а на грамотное выстраивание взаимоотношений ваших сущностей.

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

    p.s. StockBundle это плохая идея. По сути если у вас есть что-то типа CoreBundle (общий бандл) - то вы уже проиграли в плане разделения логики на "отдельные части". Границы проведены неверно.
    Ответ написан
  • MVC как правильно, объясните некоторые моменты?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    контроллер - прослойка между View (HTTP, а не шаблоны как думают многие разработчики), и Приложением (моделью). Потому то они и тонкие что они занимаются исключительно конвертацией представления данных модели в предаставление клиента (не обязательно человека, а например клиентом может выступать браузер или другая программа).

    Пример экшена контроллера из моего проекта:

    public function registerUserAction(RegisterUserRequest $request, RegisterUserHandler $handler)
    {
        $user = $handler($request);
    
        return $this->resource($user, UserTransformer::class)->withStatusCode(201);
    }


    В итоге `RegisterUserHandler`, в моем случае "модель" системы, или реалиация конкретного действия этой системы, ничегошеньки не знает об интерфейсе. А интерфейсу плевать как оно там что внутри делается.

    Вот и вся соль.

    Рекомендую вам пока отложить изучение MVC, поскольку к web оно имеет относительно никакого отношения, важна лишь идея разделения обязанностей, снижения связанности и т.д.

    Почитайте про GRASP и SOLID. В GRASP описана идея контроллера очень хорошо.
    Ответ написан
  • Базы данный какой тип поля выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    int(round(time.time() * 1000))

    Как-то это непохоже на милисекунды)

    https://www.postgresql.org/docs/9.1/static/datatyp...

    смотрите табличку и выбирайте.
    Ответ написан
  • Как правильно добавить метаданные к сущности Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вариант первый (тупой) - docs.doctrine-project.org/projects/doctrine-orm/en...

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    давайте думать. Нужно ли странице знать о своих тегах? Да, было бы прикольно но только что делать если теги нужно будет добавлять еще чему-нибудь? Или например кейсы когда какие-то теги надо создать а какие-то просто подключить.

    Так вот, убираем связь тегов из Page и оставляем однонаправленную ассоциацию на страницы у тегов. Теги нам делает какой-нибудь сервис (Tagger) с методами аля assignTags($page, $tags) и getTagsOf($page)

    Да, это суть сложнее зато можно спокойно реюзать в будущем, это проще поддерживать и вообще кошерно.
    Ответ написан
  • Почему PHP не видит класс через namespace?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Просто так все не происходит, особенно если у вас два класса из разных пространст имен лежат рядом.

    Гуглить про автозагрузку классов. Функции spl_autoload_register и в принципе почитайте про composer-вский автозагрузчик.
    Ответ написан
  • Какие преимущества и недостатки у sqlLite и webSql?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    WebSQL по сути строится на базе sqlite. Отдельные плагины вроде этого нужны для совместимости между платформами. В частности поддержка windows девайсов.
    Ответ написан
  • Проект со сложной логикой на Symfony – как проектировать? Примеры?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как их организуете (их тогда будут сотни)?


    Раскидываю по неймспейсам. Скажем все действия относящиеся к юзерам находятся в папке Users.

    Только вы учитывайте что CQRS это прикольно но особо не нужно. К примеру это сразу подразумевает что вы используете UUID вместо автоинкрементов и прочей чуши. Можете сделать хотя бы как Дядя Боб предлагает в своей Clean Architecture. Просто сервис на каждое действие.

    Есть ли смысл выносить каждую доменную модель в модуль/микросервис


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

    Раньше для дополнительных действий мне достаточно было использовать что-то вроде beforeUpdate/afterCreate модели.


    ну а сейчас вы будете эти вещи в сервисы пихать. Причем возможно не в один сервис. Вообще старайтесь не делать "хуков" и не будет с ними проблем. Есть к примеру DomainEvents такая штука, ну и можно все эти "дополнительные действия" в хэндлерах команд делать.

    Как не превратить кидание/получение событий типа PostBeforeEdit/PostBeforeEditHandler в "callback hell"?


    Просто забудьте об этих ивентах.

    ACL. Где храните указанную логику?


    Есть в симфони security vouters, а дальше все зависит от того что вы делаете.

    Как вы версионируете подобные проекты? А если нужна "N-1" рабочая версия на продакшене?


    git + docker теги в мастере. Ветки нужно плодить только тогда, когда у вас система деплоится кастомерам и нужно поддерживать сразу кучу версий. Называется это gitflow.

    На какие проекты (точнее, на код) можете посоветовать посмотреть для лучшего понимания? Ссылки на репозитории?

    На гитхабе катострофически мало примеров хороших приложений на симфони. Да и не только на симфони - в принципе найти в открытом доступе сложный проект - это нереально. NDA и все такое. Такие системы обычно очень дорогие и закрытые со всех сторон.

    p.s. почитайте книжки:

    - Эрик Эванс - Предметно ориентированное проектирование
    - Крэйг Ларман - Применение UML 2.0

    p.p.s. Все ваши загоны не имеют никакого смысла если вы не будете пользоваться практиками вроде Test-Driven-Development, ну или хотя бы покрывать систему интеграционными тестами. Без этого вы не сможете делать частный мелкий рефакторинг, а без этого ваша система быстро превратится в легаси.
    Ответ написан
  • Как организовать фабрику?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Может ну его? Реально? Попробуйте прочитать этот код кому-нибудь, он же не читается. Понятия не имею почему вы решили назвать репозиторий для продукта CatalogProductRepository. Или зачем вам фабрика. Ну и еще - зачем вы инстанцируете все руками. И что это за true.

    Оба варианта как по мне изобилуют излишней сложностью, неочевидны и т.д. и т.п.

    Я предлагаю вам вооружиться DependencyInjection. Реализация оного есть в любом уважающем себя фреймворке. И избавьтесь от непонятных и неявных констант.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ответ как бы напрашивается - не удалять а прятать для конкретных юзеров.
    Ответ написан
  • Построение приложения frontend, что выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Возьмите Angular 1.5. Он значительно проще зоопарка из React, на нем так же можно делать все компонентами (не ну можно и как в Angular 1.0 клепать жирные контроллеры но это ничего кроме боли не приносит), полно учебных материалов (опять же из недостатков тут - адекватность материалов, большинство ориентировано на подходы, которые были адекватны в 12-ом году) и при этом переход на angular2 будет потом не таким болезненным.

    Что до typescript - он не очень сильно отличается от javascript (если мы говорим про ES2017 stage1 какой а не ES5.1).

    В целом angular2 имеет смысл использовать для реально больших приложений. Для маленьких будет довольно приличный оверхэд, да и наличие маленьких самодостаточных библиотек для построения приложений на сегодняшний день спасает.
    Ответ написан
  • Построить архитектуру классов в Ruby программе?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    перестаньте мыслить классами и все станет куда проще. На основе вашего списка выделите объекты, которые будут фигурировать в игре. Это будет:

    - Клетка поля. У нее есть прямая связь с каждой из соседей и она знает есть на ней мина или нет. Так же для упрощения мы можем запихнуть в нее состояние мины (взорволась, обезврежена, необнаружена).
    - Управляющая логика тоже должна где-то находиться. Назовем эту логику - контроллер. При указании координат клетки на поле, которую мы хотим нажать, мы должны отправлять этой клетке сообщение. Эта клетка уже в случае чего попросит соседние и так пойдет цепная реакция. В итоге все обязанности будут просто отслеживаться.
    - Логика отображения. То есть что-то что берет текущее состояние игрового поля и будет заниматься его отображением на экран.
    Ответ написан
  • Разница в Hash::make() и bcrypt() Laravel?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    главное для хэширования паролей использовать password_hash с дефолтными аргументами (если в точности не знаешь что для чего).

    А в ларавель любят вставлять "хелперы" абы было.
    Ответ написан
  • Внедрение WEB API в проект MVC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Имеется проект MVC


    Если у вас имеется проект MVC то у вас не должно быть никаких проблем. Просто добавляем еще пачку контроллеров которые будут формировать View и просить модель что-то сделать. Модель в этом плане это не "запись в базе" а именно какая-то логика которая должна эти CRUD операции произвести.

    Другое дело что MVC у ВАС может означать "ну я там в контроллеры логику запихнул и у меня просто шаблонизатор есть еще..."
    Ответ написан