• Как реализовать очень быстрый REST API на php вкупе с фреймворком?

    Для начала нужно определить что можно выжать с сервера вообще на каком-нибудь простейшем нативном коде, эмулирующем задачу, типа подключаемся к БД, открываем файл на ФС, читаем/пишем что-то, считаем, выводим и отпрофилировать её.
    Ответ написан
    Комментировать
  • Как вести проект на основе opensource решения?

    git submodule add git://github.com/jquery/jquery.git web/vendors/jquery - создание в своем проекте каталога обновляющегося из независимого репозитория
    Ответ написан
    Комментировать
  • Как начать писать "Hello World" приложения Ruby/Python?

    Современный PHP имеет встроенный веб-сервер для разработки, то есть никакие денверы больше не нужны. А MySQL использовать или нет решать вам, и єто решение нужно принимать для всех языков. IDE посоветовал бы от JEtBrains.
    Ответ написан
    2 комментария
  • Phpunit - как это тестировать?

    Если дизайн класса (очень неудачный не только в плане тестирования) изменить нельзя, то смотрите в сторону https://github.com/php-test-helpers/php-test-helpers - как раз полностью ваш случай: переопределение загрузки класса и переопределение exit. Плюс для тестирования защищенного метода нужно будет использовать отражение, если публичными методами без оверхида не вызывать защищенный.

    Если бы не потребность в тестировании вызова exit, то с большой вероятностью можно было бы обойтись просто описанием "тупого" класса MainLogger в коде теста до его использования, чтобы не вызывать механизм автозагрузки (вы ведь его используете?).
    Ответ написан
    Комментировать
  • Silex: где задаются правила isValid() для формы?

    Как-то так создаются правила валидации:

    $form = $app['form.factory']->createBuilder('form')
        ->add('name', 'text', array(
            'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 5)))
        ))

    Ответ написан
  • Особенность функций htmlspecialchars и htmlentities

    В хронологическом (вроде) порядке:
    php > var_dump(htmlspecialchars('\'', ENT_QUOTES|ENT_HTML401));
    string(6) "'"
    php > var_dump(htmlspecialchars('\'', ENT_QUOTES|ENT_XML1));
    string(6) "'"
    php > var_dump(htmlspecialchars('\'', ENT_QUOTES|ENT_XHTML));
    string(6) "'"
    php > var_dump(htmlspecialchars('\'', ENT_QUOTES|ENT_HTML5));
    string(6) "'"
    

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

    Имхо, основной недостаток нормальных (приличное железо, экран 17+ FullHD) ноутбуков — сам форм-фактор. Экран жестко связан с клавиатурой, плюс перед клавиатурой тачпад. Хочешь экран подальше поставить — клавиатура будет совсем далеко. Хочешь поближе клавиатуру поставить (на край стола, например, или на колени) — за ней экран «поползет», да тачпад мешать будет. А уж расположить клавиатуру под горизонтальным углом к экрану вообще невозможно.

    Подключение внешней клавиатуры частично проблему решает, но только частично — «системный блок» ноутбука ограничивает расположение экрана (к краю стола экран не пододвинуть) и места по площади надо больше чем для монитора и обычной клавиатуры). Но даже если подключить внешние монитор и клавиатуру и закрыть ноутбук, сделав из него «системный блок», то остается проблема его размещения на столе — горизонтально много места занимает, на пол под стол горизонтально положить опасно, а для вертикального нужно что-то мудрить.
    Ответ написан
    Комментировать
  • Какими языками и инструментарией лучше пользоваться, чтобы написать браузерную игру?

    А по большому счету без разницы, но начния сейчас писать браузерную MMORTS с нуля, то архитектура была бы такой:
    Основа — какая-то готовая (а может и самописная, если не получится подходящего найти) система очередей запланированных событий с привязками к популярным на сервер-сайде языкам
    Легковесный websocket-сервер (попробовал бы ноду для интереса, но имея в виду phpdaemon), мониторящий события из очереди для подключенных клиентов и оповещающий клиентов об этих событиях.
    Тяжеловесный бэкенд, который по синхронному запросу клиента генерирует данные по прошедшим событиям, вытягивая их из очереди и добавляет новые события, если они инициированы запросом.
    Ответ написан
    4 комментария
  • Существуют ли преимущества какого-либо фреймворка для веб-проекта с постоянным добавлением функциональных разделов?

    Думаю нужна хорошая поддержка модульности приложения. Точно хорошо с этим у RoR (гемы) и у Symfony 2 (бандлы).
    Ответ написан
    Комментировать
  • Как правильно реализовать модель в Symfony2 на базе MVC?

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

    Сервисы использую когда в методах различных сущностей появляется дублирование кода или просто непонятно к какой сущности отнести тот или иной метод — типичный пример: перевод со счёта на счёт, оба счёта в принципе равноправны, и что метод DebetTo в источнике, что метод CreditFrom в получателе будет выглядеть некрасиво, особенно если будет ещё и третий счёт, на который перечисляется комиссия за транзакцию, а создание класса транзакции в модели нецелесообразно — прямой кандидат в сервисы. Вообще сервисы рассматриваю как функции.
    Ответ написан
    Комментировать
  • Когда на google maps появится Ростов-на-Дону?

    Надо этот вопрос задать на mail.ru — там аудитория больше :)
    Ответ написан
    Комментировать
  • Как синхронизировать продакшен и локальную версию проекта?

    Если я правильно понял стуацию и вообще никаких репов нет, то делаем git init на локальной, пушим в реп initial commit со старой версией, делаем git clone на продакшене (в отдельную папку), копируем туда актуальный продакшен, пушим в реп, на локальной делаем пулл. Бонусом получаем коммит с различием старой (локальной) и новой (продакшен) версии.
    Ответ написан
    1 комментарий
  • Как собирать статистику внутри веб-приложения?

    Пытался делать на РСУБД (MySQL), но не не понравилось — или под каждое событие нужно городить табличку или эмулировать scheme free. Проще взять настоящую scheme free СУБД, остановился на CouchDB. Не для конечного пользователя, но написать по быстрому view на JavaScript может почти любой фронтендер, после небольшого обучения специфики, конечно
    Ответ написан
  • Программы для разработки web-приложений из-под linux

    Что-то серьезное — IDE, в частности IDE от JetBrains (WebSrotm, PhpStorm, RubyMine и т.п). По быстрому что-то набросать — vim/emacs/sublime на любителя. Хотя и в gedit можно плагинов понаставить. Это в плане управления кодом.

    Дев-окружение для запуска или аналогичное продакшену (стандартные пакеты, например apt-get install apache2 php5 mysql-server), или встроенное в среде выполнения/фреймворка (php -s), или вообще запуск на VDS.

    Ну и консоль, куда без неё, даже с IDE.
    Ответ написан
    2 комментария
  • Стоит ли учить пхп новичку?

    Есть подозрение, что толком на JS вы ничего не писали, а значит программировать по сути не умеете. Тогда не считаю PHP хорошим языком в качестве почти первого.

    Если у вас цель сделать хоть что-то конкретное на сервер-сайде, то PHP идеален, как голый, так и в виде кучи готовых движков (не путать с фреймворками). Если цель разобраться, что и как происходит на сервер-сайде, то годится любой современный язык, на котором можно написать CGI-приложение, а лучше HTTP-сервер (на PHP можно). Если же цель освоить современные принципы высокоуровневой разработки, реализации бизнес-логики, а не борьбы с нюансами, то начав с PHP вы рискуете за деревьями не увидеть леса — слишком много особенностей собственно языка придётся иметь в виду. Тут порекомендую почти как lightman (Java, .NET, Python), но исключив Ruby — он слишком хорош для первого языка :), переходить на какой-то другой из «мэйнстримовых» будет мучением. Освоив принципы на одном из этих трёх языков вы потом легко сможете освоить PHP на любом уровне, хотя и будете часто материться :(

    P.S. Если что PHP основной язык более десяти лет, но он был далеко не первым, а первую свою программу для веба писал на голом Си (почти голом, CGI использовал, HTTP сервер не писал).
    Ответ написан
    Комментировать
  • Вопросы, которые вы не узнали в школе/вузе, но стоило бы знать? (из сферы IT)

    На нынешних уроках информатики, я бы после общих принципов работы компа давал бы общие принципы работы сетей вообще и www (http) в частности, чтобы было базовое понимание, что такое адрес, порт, протокол, прокси, нат, белый, серый, чёрный IP, днс и т. п. В общем чтобы понимали процессы происходящие при наборе адреса в адресной строке браузера (и знали, что это такое вообще).

    На кружке бы на http более сильно заострился, вплоть до разработки простейших http серверов на чём-то вроде node.js, скрывая детали типа сокетов, но раскрывая процесс работы по http вплоть до «ручного» разбора запросов и формирования ответов.
    Ответ написан
    Комментировать
  • CodeIgniter и Unit-тесты. Что использовать?

    Попробуйте прикрутить Codeception от Davert насколько помню CI должно быть несложно прикрутить. Есть примеры для Kohana, ZF, Symfony, по аналогии должно быть несложно сделать для CI.
    Ответ написан
    3 комментария
  • Неконкуренция в России?

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

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

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

    Единственное похожее ограничение в ТК есть вот такое:
    Руководитель организации может работать по совместительству у другого работодателя только с разрешения уполномоченного органа юридического лица либо собственника имущества организации, либо уполномоченного собственником лица (органа).

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

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

    Если же вы как работник смотрите на ситуацию, то если не были допущены к информации, составляющую коммерческую тайну и не «сливаете» наработки новому работодателю явно, то беспокоиться особо не о чем.
    Ответ написан
    1 комментарий
  • Что быстрее — глобальная переменная или инициализация класса в другом классе?

    Офтоп: я бы сделал так, если уж месить базу данных с сущностями а-ля ActiveRecord
    class Entity
    {
      protected $database;
    
      public function __construct(Database $database)
      {
        $this->database = $database;
      }
    
    }
    
    class User extends Entity
    {
      public function __construct(Database $database)
      {
        parent::__construct($database); // дурная привычка, чтобы не забыть если решу конструктор расширить
      }
    
      public function something()
      {
        $this->database->query();
      }
    }
    


    Класс Database сделал бы синглтоном или элементом реестра, и в коде вызывал бы примерно так:
    $user = new User(Database::getInstance());
    
    Ответ написан
    Комментировать