• PSR-7 что должен реализовывать метод?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Checks if a header exists by the given case-insensitive name.


    Проверяет наличие заголовка по имени без учета регистра.

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


    Видимо нет)
    Ответ написан
    Комментировать
  • Как подключить Firebase 3 к Angular 2?

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    На вашем уровне бэкэнд вам не нужен. Вместо него достаточно либо делать приложеньки используя возможности браузера либо использовать какие-нибудь google firebase например или похожие штуки.
    Ответ написан
    Комментировать
  • Высоконагруженные системы, каковы принципы разработки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    давайте так, есть два вида задач:

    - CPU bound - различные алгоритмы, математика, кодирование/декодирование/шифрование... словом все что нагружает процессор.
    - I/O bound - собственно когда у нас идет множество операций с вводом/выводом, где-то 90% задач связанных с WEB и серверной разработкой.

    Для CPU bound стоит использовать языки вроде Си, Rust, Dlang, Go и т.д. Словом языки которые компилируются в эффективный машинный код.

    Для I/O bound - Go, NodeJS, Erlang, Java.... да в принципе не важно какой язык, главное что бы использовались неблокируемые вызовы и отсутствовали блокировки.

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

    Какие языки лучше использовать для этого? Какие не использовать?

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

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

    И на таких объемах даже если бы мы взял Си, если наш алгоритм имеет сложность O(N^2) то как бы ничего тут особо не поделать. И так и так медленно будет. А вот если мы возьмем какие-либо алгоритмы имеющие сложность O(NLogN) то уже возможно что алгоритм этот можно хоть на php/python/ruby имплементить. Так например у меня этот алгоритм реализован на Java и не самым эффективным образом. Справляется.

    Еще влияет скорость разработки (всякие ruby/python/node в этом плане хороши), стоимость поддержки (Си поддерживать сильно дороже чем Go например, хотя всегда можно написать все настолько плохо что проще выкинуть чем поддерживать), стоимость разработчиков.... Скажем найти дешевых сильных разработчиков на Go или Rust будет весьма проблематично.

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

    Собственно главное правило высоконагруженных систем - нагрузочное тестирование а потом уже оптимизации
    Ответ написан
    Комментировать
  • Подкиньте несколько примеров веб приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Из того что стоит посмотреть:

    https://github.com/martinmicunda/employee-scheduling-ui
    Ответ написан
    Комментировать
  • Как лучше писать if условия?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    if (!(foo == bar && foo >= 1)) return false;

    подход называется "ранний выход", и призван он улучшить читабельность.
    Ответ написан
    2 комментария
  • Существует ли браузер с Python?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    phantomjs для этих целей и придуман. Для python смотрите selenium. других вариантов у вас нет.
    Ответ написан
    Комментировать
  • Как разобраться в данном коде и понять его алгоритм?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ответ написан
    Комментировать
  • Для каких задач используется OpenJDK, а для каких Oracle JDK в чем принципиальное различия?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    OpenJDK имеет лицензию GNU GPL.
    Ответ написан
    Комментировать
  • Что почитать об архитектуре приложений и фреймворков на php?

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

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

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

    но совершенно не имею представления о правильной архитектуре приложений на php


    "Правильно" не бывает, все зависит от задачи. "Правильная" архитектура является:

    - понятной - то есть можно быстро разобраться. Это как читабельность кода (читать совершенный код Макконела) так и в принципе декомпозиция системы, разделение ответственности и т.д. (микросервисы, гексагональная архитектура). Тут можно посоветовать почитать Эрика Эванса.
    - удобной в изменениях (продумать все нереально, а сталобыть проще сделать так что бы адаптироваться под изменения в требованиях можно было эффективнее).
    - Тестируемой - то есть вы можете проверить работоспособность системы на различных уровнях. Тут стоит смотреть в сторону TDD или практик с той же идеей (сначала формулируем как работает и как мы это проверим а потом уже делаем).

    Вот и все. Далее уже есть принципы SOLID (читать Роберта Мартина), GRASP (Крэйг Ларман), GoF (лучше тут почитать head first design patterns или даже начать с Мэта Зандстры, у него помимо паттернов еще про процессы мельком рассказано).

    Ну и смысла в этом всем нет если вы еще до конца не осознали что есть инкапсуляция и полиморфизм. Многие могут рассказать что значат эти термины, но на практике эти знания они не могут применить (чаще всего страдает инкапсуляция)

    или написании чего-то своего с нуля на чистом php


    Такое решение может принимать только разработчик у которого уже есть за плечами хотя бы пяток лет опыта работы с различными (не одним) фреймворком и языками. В противном случае вы только будете заниматься бесполезным велосипедостроительством.

    идеально было бы вообще подробно расписанное сравнение внутреннего устройства нескольких фреймворков


    Берете Symfony или Zend и вперед. Все остальные фреймворки "проще". То есть скрывают больше от разработчика. После них уже можно брать что угодно.

    p.s. еще прочитайте тут: www.phptherightway.com
    Ответ написан
    12 комментариев
  • Почему добавления пространства имен "провоцирует" warning?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    потому что нет такого класса больше. Его полное имя - "myproject\Foo"
    Ответ написан
    2 комментария
  • Как заставить ng-repeat работать с конца массива, сохранив его порядок?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Есть специфический случай, когда нужно, чтобы ng-repeat работал с конца, а не сначала.


    Сделайте в контроллере revert массива. Не решайте подобное на уровне шаблонов. Ну либо напишите фильтр.
    Ответ написан
    Комментировать
  • На чем проще программировать под windows?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    C# .NET для windows максимально эффективны. Если же вам нужна кросплатформенная разработка - уже можно думать.

    С другой стороны есть куча других вариантов, вроде html5 + js.
    Ответ написан
    Комментировать
  • Что нужно уметь делать в Photoshop для front-end developer-а?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что нужно уметь делать в Photoshop фронтендщику?


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

    Мое личное мнение - лучше изучить sketch, из опыта могу сказать что в контексте web разработки он подходит намного лучше. Особенно для разработчиков.
    Ответ написан
  • Зачем тестировать код?

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


    вы должны проверять корректность работы системы. Всего-то. Причем с оглядкой не только на "сейчас" (тут мы и руками можем проверить быстро) но еще с оглядкой на будущее. Если вы планируете этот код выкинуть - тестировать его нет смысла. Вы на автоматизацию тестирования убьете больше времени чем проверите руками.

    С другой стороны, если это лишь вершина айсберга, то имеет смысл написать простенький автотестик, который проверяет корректность работы. Так, если мы будем вносить какие-то изменения, например будем добавлять комменты, мы будем уверены на 90% что ничего не сломали. Почему не на 100%? потому что невозможно покрыть все тестовые сценарии да и это не выгодно. Проверяем мы обычно самые вероятные сценарии.

    Далее уже все зависит от сложности тестирования. По хорошему наши тесты должны быть маленькие и, главное, ничего не знать о деталях реализации. Скажем вы хотите проверить что система корректно добавляет новости. Самый простой способ это проверить - создать новость и проверить что не вернулись ошибки. Для этого можно составить HTTP запрос и получить HTTP ответ. Максимально просто.

    Но такой тест отрабатывает относительно долго. Представьте себе что вы пишите что-то посложнее. И у вас уже 100 различных тестовых сценариев для одого кусочка системы. В итоге этот маленький кусочек будет тестироваться больше минуты, и мы успеем заскучать. Для того что бы упростить - мы дробим этот кусочек еще и еще пока не находятся такие куски, которые мы можем проверить удобно и быстро. Например если вопрос в корректности валидации данных - мы можем тестировать только контроллер, а если вопрос в каких-то бизнес правилах отдельных - мы можем и их отдельно вынести и тестировать. Это будут интеграционные тесты.

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

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

    По сути это самое сложное в тестировании. Писать тестируемый и поддерживаемый код, а так же останавливать себя от тестирования "лишних" частей системы или слишком углубляться в тестирование там где этого не нужно.
    Ответ написан
    1 комментарий
  • Как лучше запрограммировать наследование в Си?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вместо наследования имеет смысл применить макросы, ибо "наследование типов" для вашей задачи насколько я понял не нужно.
    Ответ написан
    5 комментариев
  • Как сделать авторизацию с помощью jwt со стороны клиента на vue.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    С учётом новой версии этой библиотеки.


    казалось бы, причем тут http если основная задача vue - UI.

    В целом мы можем уменьшить задачу до vue-resource. Так же JWT мы можем заменить на любую token-based аутентификацию. Да хоть на http basic. А примеров оного должно быть полно.
    Ответ написан
    Комментировать
  • Правильно ли я делаю веб-сокет сервер?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    меня смущает, что приходиться писать гораздо больше кода.


    zeromq и оттуда pub/sub

    А так вы создали single point of failure, или god object если хотите. Вам стоило организовывать общение между сервисами а не единую шину данных.
    Ответ написан
  • Какой есть аналог Resque от Rails в PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Смысл в том, чтобы делать отложенные job-ы без помощи cron-а, т.е. замена cron-а чем-то более удобным...


    beanstalkd

    по поводу resque можете попробовать вот это: https://github.com/mjphaynes/php-resque - он посвежее.
    Ответ написан
    4 комментария