Задать вопрос
  • Какая есть среда разработки для веб-приложений с удобной отладкой?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    NetBeans.
    Бесплатный. Работает с xDebug (правда, немного нужно почитать, как именно, но все равно).
    Подсветка методов функций - работает (если правильно составлять phpDoc, конечно).
    Минус - немного притормаживает, как и большинство редакторов на Java, и бывает раздражающее автодополнение, но, к счастью, запросто отключается.
    Ответ написан
    Комментировать
  • Как внедрить тестирование в процесс разработки на PHP?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    Я приучился писать тесты просто: когда имеешь дело с деньгами - цена ошибки высока. Без тестов процессинг писать - лучше сразу застрелиться. Учился не сам - такова была политика тимлида.
    Когда есть уже проект с legacy-кодом (а ваш именно такой по определению Боба Мартина), то единственный способ начать что-то менять это начинать писать тесты на новый функционал. А если доходят руки до рефакторинга, то тоже сразу покрывать этот код тестами.
    Что касается заказчиков, то им действительно до лампочки есть тесты или нет. Поэтому надо оценивать время разработки таким образом, чтобы в него входило время на написание тестов. Как показывает опыт, никто не будет задавать вопрос "Почему так долго?". Если зададут, то можно ответить по типу "вы же не хотите услышать лекцию про устройство ядерного реактора?"
    Ответ написан
    Комментировать
  • Есть ли решение для чтение больших прайсов xls,xlsx?

    valerium
    @valerium
    Изобретая велосипед
    Немного костыль, но
    libreoffice --headless --convert-to csv price.xls
    А дальше работать с 1—2 мегабайтным CSV, это уже не проблема.
    Ответ написан
    3 комментария
  • Какой микро модульный php движок посоветуете для изучения внутренностей?

    sim3x
    @sim3x
    Если на грабли не наступить самостоятельно - ничему научиться не получится
    Так что твоя задача, скорее сделать не так как у всех, а по-своему, а потому переделать как надо
    Ответ написан
    Комментировать
  • Как вы строите архитектуру приложения?

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

    Потом список сценариев своими словами. Детализация по вкусу. После списка сценариев наброски интерфейса. Только после набросков интерфейса, которые показаны клиенту, думать о внутренней реализации.

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

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

    riky
    @riky
    Laravel
    насколько я понял ключевой момент в том что поддерживать старый код вы не хотите.

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

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

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

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

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

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

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Не волнуйтесь, вас уволят и правильно сделают. И вот почему.
    Начну со стороны хорошего бизнесмена:
    У него уже есть cms и crm, которую он пилил 5 лет, умеет продавать и знает. Да, так получилось, свой велосипед, ужасно написанный, но это его не волнует до тех пор, пока она кормит и его и всех его подопечных. Отказаться от неё означает не только огромные временные затраты на смену всего, начиная от обучения программистов как её пилить, заканчивая обучением всех, кто будет её касаться. Так же это означает поддержка уже двух систем, старых клиентов со старой и новых с новой. Но самое главное - это высокий риск того, что продавать её будет тяжелее.

    Со стороны хорошего разработчика:
    А хорошему разработчику вообще до фени, с чем ему работать. Спросите у опытных. Эмоционировать при виде говнокода и велосипедов - это максимализм юного программиста. Разработчики с опытом умеют погружаться в любой велосипед, в любой говнокод и работать с ним. А потому что они уже навидались и в своё время тоже кричали и пытались перевернуть мир, но, кому это надо? Вы - наёмный работник, вы не должны писать красивый код, вы должны решать бизнес задачи. Бывалые так и делают, просто иногда про себя вздыхая, т.к. чувство прекрасного всё же не убить :)
    Ответ написан
    18 комментариев
  • Есть ли для total commander плагин позволяющий выкатить на ftp сервер файлы по определенным правилам?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    Напишите bat сценарий с стандартным ftp клиентом системы, минус только в том что пароли вводить нужно или хранить в открытом виде, хотя в тоталкоммандере и так не особо что-то зашифрованно.

    Сам как правило вседа пишу автоматизацию на руби, он мне ближе. Обратите взорт на rsync.

    P.S. Когда-то давно был плагин который реализовал копирование по списку в том числе и на фтп, к сожалению за давностью лет не помню названия :(
    Ответ написан
    Комментировать
  • Какие книги есть где можно осуществить свои мечты в строение свое движка?

    Arris
    @Arris
    Сапиенсы учатся, играя.
    Написать свою CMS просто. Берешь и пишешь. А потом переписываешь. А потом еще раз. До просветления.
    Ответ написан
    Комментировать
  • Переход с самописного движка на платную CMS для интернет магазина - сейчас или через год?

    greyhard
    @greyhard
    Программист, автолюбитель
    Пилите то что есть. Вам надо делать продажи от чего зависит ваше рабочее место и зарплата (не только ваша но и коллектива). Если вам плевать, то можете конечно сказать давайте сразу на Битрикс и месяц полтора простоя. Но посмотрите на это со стороны директора. Хотели бы вы сами простоя в месяц полтора ?

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

    Посмотрите Asana
    Ответ написан
    Комментировать
  • Стоит ли модули приложения выносить в composer пакеты?

    @matperez
    Стоит. Вот пример подобного решения для Yii2. Зависимость от sitemap_generator в приложение добавлять не нужно, если она уже есть у разрабатываемого модуля.
    Ответ написан
    2 комментария
  • Как правильно писать unit тесты?

    @thyratr0n
    Непонятно, что вы хотели получить в ответ, ибо не задали четкого вопроса.

    Во-первых, вы, конечно, "удачно" выбрали Yii первой версии в качестве примера. Эта фреймворка не очень приспособлена для изготовления "тестопригодного" кода, ибо содержит на всех стадиях функционирования большое количество "магии". Не верите? Попробуйте что-то наваять на базе CActiveRecord и запилить юнит-тесты. У вас получится что угодно, но не то, что надо.
    Самый главный аспект юнит-тестирования состоит в том, что один тест (метод класса-теста) должен решать строго одну задачу, а не проверять в фоне целую подсистему.
    На одном из своих проектов я решил эту проблему, написав целую свору заглушек.
    Во-вторых, все зависит от задач. Грубо говоря, юнит-тесты проверяют код как есть. Следующий уровень тестов (не берусь его называть, ибо я их постоянно путаю) проверяет бизнес-сценарии. И самый высокий уровень проверяет все это дело в связке с внешними интерфейсами.
    И в-третьих, один тест не должен включать код других тестов, ибо каждый тест должен быть изолирован, считая, что весь остальной код работает. Именно поэтому, когда вы пишете, например, тест для мелкой модельки, не нужно гонять работу с БД: считается, что вся подсистема взаимодействия с БД _работает_.

    Да, и еще. Очень часто путают моки и стабы.
    Стаб - это заглушка - код, который "глушит" выполнения другого. Цель заглушки - проверка того, _что_ возвращает объект в своей работе. В вашем случае нужен какой-то объект, который не позволит коду выполняться далее LoginForm::login(). Как это сделать? При статической типизации кода - никак. Нужна надстройка, которая будет динамически использовать данные объекты, чтобы их можно было заменить на стабы.
    Мок - это надстройка над тестируемым объектом, целью которой является проверка того, _как_ работает объект внутри, именно поэтому моки всегда строятся на Reflection.
    Ответ написан
    4 комментария
  • Как программисты оценивают стоимость своей работы?

    Jump
    @Jump
    Системный администратор со стажем.
    Но ведь любая зп рассчитывается из того какую прибыль принес данный сотрудник компании
    Абсолютно неправильное утверждение.
    Какую прибыль принес компании дворник? А секретарь?
    Зарплата сотрудника в компании вообще никак не зависит от прибыли приносимой сотрудником.

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Искать адекватных фрилансеров с похожим стилем мышления и взглядами - так больше шансов что сработаетесь. Объединяться не только по работе за деньги, но и придумать себе дополнительное сотрудничество, например, какой-нибудь совместный Open Source проект, или коммерческий продукт - и тем и другим может быть плагин/тема для WordPress или что-то подобное. Например, тема в двух вариантах - бесплатная Lite для WordPress.org и промо себя любимых, платная Pro для ThemeForest. Такая дополнительная работа позволит всегда быть в одной лодке и теснее работать на общее благо, это отразится и на коммерческих проектах. Кроме того, это всегда бонус и для клиента - например, в заказах по WordPress клиент видит, что я и мои ребята висим на WordPress.org как разработчики плагинов/тем, один у нас вообще в ядро WP контрибьютит. Это большой плюс в карму.

    2. Не увеличивать команду без надобности. 1 человек фронтенд, 2й - бекенд. Дизайнер на первых порах лучше проектно. Расти строго по мере острой необходимости, хотя новых людей надо искать заранее и тестировать в реальной работе. То есть, должно быть постоянное "ядро" команды, и еще несколько на подхвате. Поначалу они на подхвате (и работают себе самостоятельно в остальное время), со временем кто-то из них переместится в ядро, по мере роста.

    3. Со студиями/агентствами надо работать в обратном направлении. У многих из них часто бывают завалы и нехватка собственного ресурса, вы должны быть подрядчиками у них, а не наоборот.

    4. Бюджеты. Самое главное :) Кто-то умный когда-то сказал:
    The kind of clients we attract is directly related to our rates

    Что означает, что качество клиентов прямо зависит от ваших цен. И второе, из опыта - геморроя плюс-минус одинаково в проекте с бюджетом 200$, и в проекте с бюджетом $2000. Времени и усилий на поиск/привлечение клиента тратится столько же. И чаще всего те, кто платит $2000 больше ценят время, работу, и не имеют мозг без острой на то необходимости (см. цитату выше).

    5. Снижать стоимость привлечения клиента (под стоимостью подразумевается и время, и деньги). Повторные / постоянные клиенты - наше все. Оставлять клиентов на поддержке, делать так чтобы они обращались повторно с доработками / развитием своих проектов, приходили с новыми заказами, советовали другим. Например, я вчера закончил интересный проект для повторного клиента. Первым заказом были небольшие фиксы платного шаблона, 2 часа работы / $60, через биржу. Спустя некоторое время он обратился уже за целым сайтом для бизнеса своего отца. Адекватный бюджет. Сделали, запустили вчера. У него уже опять готов список новых фич для этого сайта, через месяц где-то вернется с ними и снова загрузит работой. Имея хотя бы с десяток таких клиентов, можно заполнить половину рабочего времени, не тратя время на поиски новых клиентов. И гемора с ними нет, и с оплатами никаких проблем, и т.д.

    6. Для того, чтобы п.5 в реальности происходил, недостаточно просто делать работу вовремя и хорошо. Нужно клиенту помогать, обучать его, советовать. Недавно был случай - клиент пришел со стандартной задачей пофиксить платный шаблон под его требования. Поковырявшись в этом ужасе и задав кучу правильных вопросов стало понятно, что этот шаблон ему вообще не подходит для этих задач. Проект был переориентирован в разработку с нуля, из $120 бюджет сменился на совсем другие цифры. Задача ведь не просто кнопки понажимать и что-то там накодить, а помочь клиенту решить его задачи. Ему результат в целом важен, а не количество строк кода, которые вы написали, или насколько правильно этот код отформатирован.

    7. Снижать себестоимость разработки. Накапливать типовые решения, код, который можно (и нужно) использовать повторно. В случае с готовыми CMS (а это самый распространенный формат работы) - покупать девелоперские неограниченные лицензии на те плагины, которые существенно экономят время. Мы, например, купив однажды ACF Pro для WordPress существенно уменьшили себе объем работы на каждом проекте. Сейчас будем брать Gravity Forms или Ninja Forms для того, чтобы решить вопрос с формами и кастомными фронтендами, которые жрут кучу времени и сил в разработке даже со своими наработками. Плюс какие-то мелкие решения, которые часто нужны.

    8. Написать для себя стратегию развития. Четко понимать, куда хотим прийти и в какие сроки (плюс-минус), четко определить, что делать, что двигает в этом направлении, а что нет. Тогда будет шанс из кучки фрилансеров вырасти в студию или что-то в этом роде. Без стратегического видения фриланс - это белка в колесе и замкнутый круг. Вечная погоня за небольшими деньгами "на пожрать и отложить на отпуск". Стратегия может быть разной, например, "вырасти в студию", "создать свои коммерческие проекты / онлайн-сервисы", "стать богом в одной конкретной сфере и собирать сливки со всех фриланс бирж - получать самые жирные проекты в этой нише" и т.д.
    Ответ написан
    1 комментарий
  • Кто нибудь пробовал работать во фрилансе после работы?

    Конечно, люди разные, но я не могу. Лучше это время тратить на личные проекты (опенсорс) и на развитие (новые языки, улучшать фундаментальные знания), либо еще на какое-то хобби (у меня это музыка, например). В долгосрочной перспективе это принесет больше пользы, а качество жизни будет выше. Работать на двух работах, совмещать работу/учебу - все это либо для очень-очень организованных людей (феноменально организованных, которые могут жить четко по плану каждый день), либо для тех, кто особо-то и не вникает (а это напрямую влияет на качество скилла). Кроме того, как не пытался, предел продуктивной работы в сутки - это порядка 6 часов. Все остальное не только не приносит удовольствия, так еще и по качеству получается хуже. Лучше делать одну задачу, "быть медленнее", но делать ее реально круто.
    Ответ написан
    4 комментария
  • Кто нибудь пробовал работать во фрилансе после работы?

    agent10
    @agent10
    Software Engineer
    Также работал когда-то, но впоследствии отказался.
    Получилось так, что соотношение "потраченное свободное время (время на семью) / доход" довольно хилое.
    Т.е. было легче сменить основную работу и повысить зарплату, чем тратить все вечера и выходные на фриланс.
    Лучше потратить это время на отдых, себя, родных и близких.
    Ответ написан
    1 комментарий
  • Где используется паттерн "Репозиторий"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Паттерн репозиторий используется для изоляции логики хранения данных. Например:

    interface UserRepository {
        function getUser($id);
        function getUsersWhichSatisfyMyCustomBuisnessRulecs(BuisnessRules $rules);
        function saveUser(User $user);
    }
    
    class InMemoryUserRepository implements UserRepository {
        private $users = [];
    
        function getUser($id) {
             return isset($this->users[$id]) ? 
                 $this->users[$id] : null;
        }
    
        function getUsersWhichSatisfyMyCustomBuisnessRulecs(BuisnessRules $rules) {
             return array_filter($this->users, function (User $user) use ($rules) {
                   return $user->isSatisfyRule($rules->getSomeRule());
             }
        }
        function saveUser(User $user) {
            $this->users[$user->getId()] = $user;
        }
    }


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

    - что нет жесткой привязки к реализации. Вы можете использовать внутри репозитория plain sql, data mapper, active record, ассоциативные массивы, файлы... ну вы поняли. Главное интерфейс заимплементить.

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

    martinfowler.com/eaaCatalog/repository.html
    Ответ написан
    5 комментариев
  • Каким образом обеспечить деплой проекта?

    fornit1917
    @fornit1917
    Если совсем круто хочется - настройте Jenkins или TeamCity. Умеют и с репозитория обновления вытягивать, и билдить, и тесты запускать, и на продакшн деплоить. Документации с примерами в интернете достаточно.

    Если простой деплой, то можно взять capistrano или его аналог.
    Ответ написан
    Комментировать