• Сложно ли выучить React-Native?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://facebook.github.io/react-native/docs/getti... - и вперед.

    p.s. Характеристики в духе "сложно" или "легко" не имеют смысла. Вам либо нужно либо нет.
    Ответ написан
  • Какую использовать СУБД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но не разобрался как связывать категории и изображения.


    У вас не должно быть связей в mongodb. Все связанные сущности должны лежать в пределах одного документа. Вот и весь секрет. Это налагает весьма строгие ограничения по тому как вы должны строить структуру базы. Профит - гибкость, масштабирование, удобненько... Но нужно понимать что делаешь ибо если появляются связи - вы проиграли (ну почти).

    В mysql напротив все данные желательно хранить в нормализованном виде (хотя бы 3-я нормальная форма).

    p.s. sim3x прав, можно пойти на компромис и использовать mysql 5.7 с поддержкой json или postgresql 9.4+. Все зависит от того зачем вам монга. Но подозреваю что у вас сейчас не те проблемы которые монга хорошо решает.
    Ответ написан
  • Как организовать следующую логику?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    я не пойму смысла тогда от этого MVC если это почти тот же flat-php


    Symfony request/response фреймворк. MVC - web так не работает. То что на бэкэнде называют MVC на самом деле завется mediating controller MVC или MVA.

    Ну и опять же, где тут flat php? Это по сути возможность делать "под запросы" и реюзать код. Что-то типа виджетов.

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

    Не зацикливайтесь на MVC, потому что люди часто проигрывают, думая что модель это доктриновские сущности и только. А есть еще сервисы - это тоже часть модели. И суть вся в разделении ответственности (контроллеры конвертят HTTP запросы в вызовы методов модели и конвертят состояние модели в HTTP ответы и только).
    Ответ написан
  • Есть ли жизнь без дискретного видеоадаптера?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Под ваши задачи не нужна дискретная видеокарта. Имеющиеся интегрированные видеочипы неплохо справляются и с 4K видео.

    Играться же без дискретки во что-то поновее уже не выйдет. Но для этого проще консоль купить.
    Ответ написан
  • 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 будет весьма проблематично.

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

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

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    phantomjs для этих целей и придуман. Для python смотрите selenium. других вариантов у вас нет.
    Ответ написан
  • Что почитать об архитектуре приложений и фреймворков на 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
    Ответ написан
  • Почему добавления пространства имен "провоцирует" warning?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    потому что нет такого класса больше. Его полное имя - "myproject\Foo"
    Ответ написан
  • Как заставить 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 различных тестовых сценариев для одого кусочка системы. В итоге этот маленький кусочек будет тестироваться больше минуты, и мы успеем заскучать. Для того что бы упростить - мы дробим этот кусочек еще и еще пока не находятся такие куски, которые мы можем проверить удобно и быстро. Например если вопрос в корректности валидации данных - мы можем тестировать только контроллер, а если вопрос в каких-то бизнес правилах отдельных - мы можем и их отдельно вынести и тестировать. Это будут интеграционные тесты.

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

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

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