Pull to refresh
31
0
Бучнев Павел @butschster

Senior PHP Developer

Send message

Спасибо за статью. Centrifugo действительно крутой инструмент и его главное отличие от reverb и ему подобных это то, что он не только может отправлять события клиенту, но и клиент может через него слать сообщения на сервер. И вот здесь он крут.


У них есть в доке раздел Proxy events to the backend где они описывают механизм отправки сообщений от клиента на сервер и не только. Я очень часто использую фичу, когда клиент только устанавливает соединение с Webscoket сервером, то я его сразу авторизую и подписываю на те каналы которые ему нужны и мне не нужно из JS управлять подписками.

Причем там есть проксирование по gRPC и мы можем вообще скрыть endpoint для обмена данными между Centrifugo и backend сервером и это прям мега фича.

Короче он нам в своё время настолько зашел, что у RoadRunner из коробки появился плагин для Centrifugo с двухсторонним взаимодействием по gRPC и PHP SDK для работы. И проводили стрим на тему создания чата с RoadRunner и Centrifugo

P.s. посмотрел composer пакет и там только про push и ничего про проксирование(

Ну если твой проект покупала другая компания, то тебе бояться нечего, твой код идеален и запашка в нем быть не может! Спи спокойно.

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

Помню в бородатые годы, кстати, на хабре было много постов на тему говнокода:

P.S. Кстати, пора бы обновить свой профиль на Хабре, у тебя там стоит вилка ЗП от 120к, по рассказам у тебя там должно быть намного больше!

Да да да, уже изучали этот профайлер. https://github.com/wikimedia/mediawiki-php-excimer В планах сделать интеграцию с ним. Спасибо!

Blackfire) Кстати есть в планах их коллектор примерить к Buggregator, если подойдет, то можно будет слать трейсы прям в багри с прода. А так если проблема на конкретном серваке, то клонируй сервак и на нем уже профилируй, если проблема именно с конкретным серверов. Но как по мне, так попахивает дебаг сервера, а не приложения, раз все работают норм, а один сервер не норм.

Это перевод. Для тех, кто в теме Temporal должно быть более-менее понятно. Для тех кто нет, я планирую провести стрим, где разберем весь код Workflow и поизучаем как оно работает.

Привет.
Проблема не в одном файле, а во всей системе. В современном мире важна скорость и качество разрабатываемого кода и сейчас ценятся те, кто умеет пользоваться инструментами. Уже давно существует такое кол-во фреймворков, которые проверены годами и их создатели, а также контрибьюторы потратили тысячи часов, чтобы сделать их удобными, избавить от дыр и создать вокруг них целую экосистему. Когда я собеседую людей, мне важно, чтобы разработчик знал патерны, мыслил тестами, умел работать с существующими инструментами.

Что касается твоего кода, то первый вопрос, зачем копировать к себе в «велосипед» куски чужого кода, если за это время можно было взять готовый фреймворк/микрофреймворк и на нем уже создать полноценный продукт? И тратить время на более важные вещи, а именно на свой рост.
Правильно ли я понимаю, что папка classes в CMS это скопированные классы из yii? Почему не затащил свой проект на базу Yii?

Я бегло изучил код, его кол-во и т.д. и как по мне, проще было взять чистый фреймворк и перенести кодовую базу в него, нежели пытаться файлики из yii внедорять в свой проект, на это есть одна простая причина — твой код необновляем. Вот представь, завтра выходит обновление ядра Yii, твои действия?

В общем я увидел исключительно небольшой рефакторинг кода и все, кодовая база небольших размеров. Глядя на твою CMS я не совсем понимаю в чем посыл твой? В том что ты написал код 2010 года и закинул туда пару файликов из Yii? Ну код ревью такой код не прошел бы.

P.s. В свое время я также занимался велосипедостроением (CMS разрабатывал). Начинал я это делать на фреймворке Kohana (Github) и он мне казался время мега крутым, но через год, он устарел и перестал развиваться и я принял решение переехать на новый фреймворк Laravel, который мне казался очень перспективным, тем самым.Куча модулей, сложный UI, я не представлял как перенести код с одного фреймворка на другой. Но я сделал это практически в одиночку (Github и Base Github), пришлось переделывать всё. Короче CMS умерла потому что я плохой маркетолог, хотя старался сделать ее на современных технологиях, оказывал поддержку, но не хватило сил сделать это в одиночку и привлечь для ее развития разработчиков, просто никому это не интересно. В России слишком маленька ЦА. Но главное, что я получил от использования фреймворков и интеграции с ними — это опыт работы с ними, изучение применяемых практик, ООП, паттерны проектирования и т.д.
Привет, Олег! Прочитал твою статью, очень впечатлила, т.к. ты сделал то, что никак не решусь сделать я по разным причинам, хотя есть понимание того, чему хочу учить, кого хочу и т.д.

Я решил не продолжать делать курсы в одиночку.

Предлагаю созвониться и обсудить это. Вполне возможно, что найдем точки соприкосновения.
Всегда приятно видеть ссылки на свои разработки в новостных дайджестах! Кстати, я сейчас занимаюсь разработкой нового пакета для Lumen, который позволит с минимальными временными затратами создавать микросервисы с использованием шины RabbitMQ и JMS\Serializer. Нужны помощники в доработке и тестировании пакета. Ссылка на репо github.com/butschster/LumenMicroservice
Да, именно так я в основном и делаю, гугл я не использую, привел как пример. Но в тех местах, которые, скажем так я посещал с помощью этих браузеров умеют детектировать через время такие браузеры и блокировать аккаунты, которыми браузеры прикрывались. Но вообще это отдельная история
Там сам гугл говорит об этом, а это значит, что он знает как детектировать значит смогут и другие.
На самом деле проблема намного глубже и не решается лишь подменой заголовков и user agent. Это легко проверить, достаточно попробовать пройти гугл авторизацию в headless режиме.
Не так давно я изучал этот вопрос и наткнулся на статью intoli.com/blog/not-possible-to-block-chrome-headless где показаны некоторые особенности браузера. Но я уверен, что даже этого будет недостаточно для прохождения гугл авторизации.
Сейчас этот код сложно будет тестировать.

Что бросилось в глаза:
  • класс InstaLite отвечает за работу с сессиями. По хорошему это должен быть отдельный класс, который содержал бы в себе только те методы, который отвечают за работу с ними.
  • класс Request отвечает и за Response. По хорошему выполнение запроса должно было бы возвращать объект Response, который в свою очередь имел бы необходимые методы для получение информации об ответе от сервера
  • методы all и id класса InstaLite можно вызвать до вызова метода searchUser, что приведет к неверному поведению. По хорошему класс InstaLite не должен содержать этих методов, а вызов метода searchUser должен возвращать новый объект, например FoundUsers, который должен содержать эти методы.


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

P.S.
Советую как можно скорее перейти к написанию тестов и тогда вы сами начнете дробить свой код на более мелкие части и выделять в отдельные классы. А также почитать про внедрение зависимостей.
Иногда глаз цепляется за код, который совершенно лишний и выдает глубину знаний фреймворка, например вот этот код:
protected function fields(): array
{
     return array_filter(
         array_map('trim', $this->request->all())
     );
}


Если мы посмотрим вот сюда github.com/laravel/laravel/blob/master/app/Http/Kernel.php#L20, то увидим, что Laravel уже изначально применяет функцию trim ко всем стринговым значениям для Request.

В остальном это самый примитивный вариант реализации фильтров.
Я сам люблю красивый и структурированный код, но иногда нужно все-таки исходить из задачи и применения. В данном случае я вижу, что это вспомогательная функция и, возможно, она не стоит того, чтобы выглядеть супер читабельной не в угоду производительности, главное чтобы тестами была покрыта.
Если исходить из поста про собеседование, то, как по мне, там важнее всего понимать и упомянуть про сложность алгоритма и показать интервьюеру своё мышление.
Ох, если бы только на Windows. У меня такая же проблема на Ubuntu 18… с двумя мониторами. HDMI + DisplayPort, самое обидное то, что при выходе из спящего режима DisplayPort монитор не всегда просыпается и приходится руками выключать и включать на кнопку.
Пара вопросов:

— Почему у вас какие то параметры именуются $comment, а какие то $DoctrineRepository? Почему разный стиль?
— Почему бы не использовать, хотя бы при создании репозиториев принцип инверсии зависимостей? Куда приятнее работать с интерфейсами, а не с реализацией, благо в Laravel это достаточно легко реализуется.

Вот кстати у меня вопрос, я как человек мало понимающий в DDD и в вашем коде,
class Comment implements CommentTypeFactoryInterface {
    private function addComments()
    private function editComments()
    private function deleteComment()
    private function retrieveComments()
}

Кто и откуда запускает эти методы?

В методе editComments() вызывает метод $this - > page - > addComments($comment);, но ведь DDD подразумевает, что мы общаемся на языке бизнеса, а получается, что редактирование комментария у нас приравнивается к добавлению?

Хотелось бы более детального разбора кода.

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


Что касается масла, то я даже не представляю куда смотреть, чтобы понять, будет авто жрать его или нет. Как, по твоему, диагностировать коробку передач перед покупкой или двигатель? Да, можно конечно провести компьютерную диагностику на предмет ошибок в различных блоках, и автор канала это показывает в тех авто, которые он считает удовлетворительными после внешнего осмотра.


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


И я не говорю, что описанные тобой проблемы не важы, важно все, но не все можно проверить самостоятельно.

1
23 ...

Information

Rating
Does not participate
Location
Батуми, Аджария, Грузия
Date of birth
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
From 500,000 ₽
PHP
Docker
PostgreSQL
Git
English
Software development