• Как ускорить разработку проекта?

    Для этих задач повсеместно используют DoctrineORM, но об производительности своего приложения мы можете забыть раз и навсегда.
    Ответ написан
    Комментировать
  • Как передать аргументы в неизвестную функцию?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вызвать функцию, название которой находится в переменной, можно несколькими способами:
    // Когда аргументы и их количество известно заранее
    // Такой вариант мне кажется самым читабельным
    // Оборачивать в фигурные скобки не обязательно
    // Я это делаю всегда для того, чтобы было видно, что вызов динамический
    $this->obj->{$function}($arg1, $arg2)

    или
    // Подходит как раз для описанного случая
    // Аргументы могут быть любыми и передаются в виде массива
    call_user_func_array([$this->obj, $function], [$arg1, $arg2]);
    Ответ написан
    Комментировать
  • Как узнать куда ушел юзер с сайта?

    wanhelsing
    @wanhelsing
    отслеживать нажатия кнопок, но ведь они не будут отслеживаться на адресной строке

    Ну почему же, поставьте ему троян через какую-нибудь уязвимость в браузере, тогда будет отслеживаться
    Ответ написан
    Комментировать
  • Что выбрать для переделки сайта bitrix или djangocms?

    zxmd
    @zxmd
    Все что угодно но не битрикс. Очевидно же.
    Ответ написан
    Комментировать
  • Как правильно организовать структуру приложения?

    Во-первых, зачем использовать в Zend Framework 2 Doctrine ORM 2? Вся идея и фишка самого ZF2 в том, что это чистый PHP. Именно поэтому он лучше всех показывает себя в производительности. Наверное ещё и шаблонизатор какой то используете, например twig...
    Во-вторых, если вы и вздумали использовать ORM, тогда используйте framework Symfony 2, там она очень хорошо интегрирована, и предоставляются всевозможные решение той или иной задачи.
    В-третьих, насчёт организации, действительно сущность должна хранить защищённые/приватные свойства, и методы доступа к ним. Все операции над получением данных, вы можете поместить в директорию Repository, и поместить методы в класс EntityRepository (вместо Entity вставьте наименование вашей сущности), так это делается в SF2. На самом деле вы вольны в выборе организации, и вы можете делать так, как того пожелаете. Например можете поместить всё это дело либо в Model, или в Service. Разумеется можно просто это дело запихнуть в Controller, но так делать не следует.
    Выбор за вами...
    Ответ написан
    4 комментария
  • Клиент много задает вопросов, как быть?

    opium
    @opium
    Просто люблю качественно работать
    Отвечать на них.
    Ответ написан
    Комментировать
  • Где найти единомышленников в OpenSource проект?

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

    Скажем я вот на 90% уверен что даже не смотря на "mongodb" у вас там "еще одна CMS" в которой ничего особо интересного нет. Выложите посмотреть или хотя бы какие-то особенности раскройте. Пока это все так...
    Ответ написан
    4 комментария
  • Где грани между быдлокодом, промежуточной стадией и профессиональным программированием?

    donkaban
    @donkaban
    Умею рисовать тени
    Я вам щас дам четкое определение говнокода. Если хотите.
    Говнокод - это изобретение плохой реализации там, где есть хорошие всем известные образцы. Использование собственного кода вместо стандартной библиотеки. Изобретение заново сортировки пузырьком. Собственной интепретации "что такое MVC". NIH синдром и отсутствие базовых знаний.
    Ответ написан
    Комментировать
  • Какую выбрать конфигурацию сервера пр заказе на Reg.ru (дистрибутив, дисковая система и пр.)?

    GavriKos
    @GavriKos
    Спросите у того, кто будет вам это добро настраивать.
    Ответ написан
    Комментировать
  • Какую выбрать конфигурацию сервера пр заказе на Reg.ru (дистрибутив, дисковая система и пр.)?

    посмотрите в сторону других хостеров
    Ответ написан
    Комментировать
  • Выбор фреймворка Symfony2/Laravel/etc?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    учи симфони 2, это самая крутая вещь которая вообще есть в пхп
    Ответ написан
    Комментировать
  • Что представляет собой тестирование ?

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

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

    Сразу хочу отметить что юнит тесты это хорошо, но вот только рядовой разработчик на PHP редко пишет что-то, что стоит покрывать юнит тестами. Времени на их поддержку нужно не мало, а требования у заказчиков частенько меняются. В итоге тесты начинают комментить и толку от них становится ноль. А вот если вы пишите компонент/библиотеку, то тут юнит тесты обязательны (ну... не то что бы, но желательны). Так что я бы на вашем месте сконцентрировал внимание на первом этапе на интеграционных и приемочных тестах.

    Интеграционное тестирование - тестирование нескольких модулей в связке. То есть мы тестируем наш компонент или его самодостаточный кусок в реальных условиях. Если этот компонент для работы с файлами - разрешаем ему доступ к файлам. Если база данных - то даем реальное соединение с базой. А можем что-то и замокать. Это как говорится, зависит от задачи. Скажем обращение к сторонним апишкам стоит мокать и стабить. Главная цель этих тестов, удостовериться что модули вместе работают хорошо. Особенно важно это когда модули пишут разные люди.

    Функциональное тестирование - это тестирования всего приложения в сборе. Если это REST API, то у нас через curl дергаются реальные методы, отправляются более менее реальные запросы и валидируются ответы. Если web-страничка, то это UI тесты с силениумом/phantom.js/zombi.js или, если нам не нужно еще и js тестить, просто curl + какой виртуальный браузер на том же php. Вообще по хорошему функциональные тесты не допускают никаких моков и т.д. но опять же если очень хочется то можно (опять же обращение к сторонним сервисам, контроля за которыми у нас нету).

    Но реалии таковы, что UI тестами покрывать проект не слишком удобно. Вопервых UI может меняться, а поддерживать их так же нужно. Во вторых это скучно. В третьих тесты могут просто падать... вот взяли и упали. И потом начинается, так, тесты опять упали... что там упало? А, не страшно, можно релизить. Так же на больших проектах UI тесты отрабатывают долго, очень долго, некоторых их просто ночью гоняют. Толку от тестов при таком подходе не слишком много, ибо разработчику стоит знать о том что что-то сломалось как можно быстрее. А так он приходит, видит что тесты опять красные, чинит эти красные тесты, и запускает... ждет... проходит пол часа к примеру, и где-то в другом месте отвалилось... Короче сами понимаете.

    Приемочное тестирование - по сути те же функциональные тесты, но подаются в контексте фича-спеков. Если вы работали когда-нибудь с QA отделом, то возможно слышали про такие штуки как acceptance criteria. То есть это тот чек лист, который должен проверить тестировщик что бы удостовериться что все хорошо. На основе этого чек листа можно написать функциональные тесты. Так же есть инструменты вроде Cucumber/Behat, которые позволяют писать спецификации в виде стэпов. В этом случае спецификации для этих инструментов могут писать QA а вы просто имплементите для них степы. То есть уменьшается прослойка между "acceptance criteria" и готовыми к выполнению тестов. Более того, стэпы можно реюзать, комбинировать, масса стэпов есть готовых, вам же необходимо только предоставить стэпы подготвалливающие систему (загрузка/генерация фикстур и т.д.). Короче лепота и удобно. Но медленнее интеграционных, зато не такие жесткие как функциональные, за счет этого их проще поддерживать. QA пишут спеку, реализуем тесты под эту спеку, пишем код под тесты, тесты зеленые - функционал готов.

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

    Ну и опять же, есть такая вещь как здравый смысл. Некоторые вещи скажем можно вообще забить и не покрывать тестами, некоторые стоит покрыть. Некоторые не полностью, некоторые с как можно большим покрытием.... Скажем тестить UI (именно как выглядит, где какой элемент) вообще бессмысленно. На это нужно куча ресурсов. Хотя может и есть проекты где это оправдано.

    Короче почитайте про TDD и ATDD (можно и BDD затронуть, но тут не только от программиста зависит, менеджеры, заказчик или продукт-оунер тоже должны быть вовлечены, по сути этот подход хорошо работает в рамках продукта какого-то, на фрилансе и в аутсорсе редко можно встретить) , Continious Integration и Continious Delivery.
    Ответ написан
    Комментировать
  • Для какого типа веб проектов используют PHP фреймворки?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    фреймворк - это базовые компоненты и структура для абсолютно любого приложения на php, платёжную систему например вы на cms не напишите.
    Ответ написан
    8 комментариев
  • Как разобраться в Symfony?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    devacademy.ru/posts/series/symfony-2-joboard/, поверьте быстро не получится, как бы вы не хотели.
    Ответ написан
    Комментировать
  • Что изучать, на что тратить свободное время, чтобы в будущем стать востребованным программистом с нормальным заработком?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Ответ на вопрос будет сильно зависеть от того, в каком направлении вы думаете развиваться.
    Будет ли это сетевое программирование? Тогда это си, в основном.
    Может быть, веб-программирование? Тогда тут могут быть php, javascript, python, ruby.
    Захотите разрабатывать программы на десктоп? Вам нужны c# или java.
    На мобильные платформы? тогда java и objective c (плюс swift).
    Или податься в разработку игр? Тогда либо c++, либо с# (для Юнити - наверное, самой популярной платформе).
    Хотите экзотики? Приглядитесь к функциональным языкам - Erlang и Haskell.
    Разработка железа и драйверов для железа? тогда си (без плюсов) и ассемблер.
    Определитесь, что вы хотите, потому что всё объять не получится. Выберите один (или два) направления и добейтесь хорошего уровня в нём. А потом вам будет уже легче двигаться дальше.

    Мой совет - попробуйте изучать C# или Java (они во многом похожи) для софта, или Javascript и php/python для веб-приложений и сайтов.

    Добавлю, что очень правильный совет дал @tsarevfs - помимо языка программирования, хороший программист должен знать несколько инструментов - и в первую очередь, это система контроля версий, например, git. Плюс юнит-тестирование (хотя это можно начать изучать позже, через годик-два). Плюс - нужно хорошо знать свою IDE, в которой работаете; не вздумайте работать в блокнотиках!

    Ещё помимо практики нужно знать теорию - читайте Макконнелла, Фаулера, Мартина, Бека.
    Подпишитесь на хабре на пару десятков хабов и регулярно читайте всё подряд. Через годик ваш уровень понимания статей сильно вырастет.

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

    UPD. Важное дополнение из обсуждения в комментариях (спасибо @Argentum88 @Deerenaros )
    Чтобы стать профессионалом и "востребованным программистом с нормальным заработком", нужно очень хорошо понимать внутреннее устройство тех систем (платформ, фреймворков), на которых идёт работа.
    Для этого нужно заглядывать вглубь. Изучив различные мейнстрим-инструменты, посмотреть на аналогичные менее популярные системы. Изучать исходный код используемых open-source библиотек. Написать свою подобную систему. Для web - написать свою CMS (хотя бы базовую). Для десктоп-программ - попробовать программировать без навороченных библиотек, которые делают рутинную работу за программиста. Для разработчика игр - сделать простую игру на базовом инструментарии платформы, где всё придётся делать своими руками.
    Всё это даст возможность проникнуться, почему всё делается именно так, даст понимание взаимосвязей разных частей программы.
    А потом, осознав это, выбрать один из уже готовых инструментов, и продолжать писать на нём, уже обладая более глубоким его пониманием.
    Ответ написан
    21 комментарий
  • Выбор фреймворка для создания REST-сервисов

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Symfony имеет все нужные инструменты (Fos/rest-bundle, jms/serializer-bundle, аннотации, кучи плюшек).

    Последний год пишу REST-Api на Silex+Doctrine. Все собственно то же самое что и в Symfony, только чуть проще структура выходит. Ну и да, нужно потратить день-два на настройку темплейта для проекта (что бы можно было использовать все теже аннтоации, jms-serializer, всякие хэлперы, генератор документации и т.д.). А уже этот темплейт можно реюзать.

    Более того, можно еще больше минимизировать рутину, если использовать десериализацию данных запроса, но там есть нюансы.

    Так же для внедрения всяких полезностей вроде CORS или OAuth можно использовать мидлвары (Поддерживает все фреймворки реализующие HttpkernelInterface, то есть Symfony, Silex, Laravel и т.д. Ну и можно прилепить к любому фреймворку декоратор).
    Ответ написан
    Комментировать
  • Какие информационные ресурсы хороши для чтения?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    Ответ написан
    Комментировать
  • Какое время фрилансеру оплачивать?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    а почему заказчик не должен оплачивать коммуникацию и фикс багов??? это что не процесс разработки? вот из-за таких заказчиков и не хочется работать с местными работодателями.
    Ответ написан
    16 комментариев
  • Как настроить elasticsearch для русской морфологии?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    добавьте фильтр snowball, а для разделения слов от тегов попробуйте фильтр worddelimiter
    Ответ написан
    5 комментариев
  • Какие существуют способы защиты стилей CSS?

    opium
    @opium
    Просто люблю качественно работать
    мне кажется мания величия затмила ваш мозг глупейшими проблемами, вместо того чтобы код красиво оформить и выкладывать на гитхаб и делиться им, вы решили его зачем то прятать, просто задумайтесь, что хорошего вы сделали в жизни и почему не выкладываете его на гитхаб?
    Ответ написан
    11 комментариев