Задать вопрос
  • Можно ли провести sql-inj или еще какую нибудь не 'добрую' пакость, обнаружив вот такое?

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно Канта почитать. Ницше так же неплох, но может не пойти.
    Ответ написан
    Комментировать
  • Сжатие строчных данных на PHP, чем?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net//manual/ru/function.gzdeflate.php

    Либо в вашем случае делать base_convert по частям.
    Ответ написан
    Комментировать
  • Что выбрать для REST и RBAC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для REST будет идеален фреймворк основанный на Symfony/HttpKernel (имплементящий HttpKernelInterface). Это даст вам возможность абстрагироваться от запросов, применять реверс-прокси кешеры а так же возможность модифицировать запросы/ответы по слоям, этим упростив архитектуру. В частности быстро прикрутить CORS, сделать авторизацию на уровень выше и т.д. можно будет за счет http middlewares и в частности stackphp. Есть JMSSeializer (который можно будет заменить на свой сериализатор, если будет стоять вопрос о производительности), который позволит вам декларативно описать правила сериализации/десереализации ресурсов и вынести все это дело на слой выше, абстрагируясь таким образом от всего этого в коде вашего приложения. Так же возможность быстро прикрутить версионизацию апишки.

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

    По интернационализации так же проблем особо не должно возникнуть. Есть экстеншены для doctrine, есть symfony/translation и кучи других либ.

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

    Так что из перечисленных вами вариантов - Silex. Но если хочется еще и меньше бойлерплейт кода писать, то Symfony. Учитывая что по времени вы сильно не ограничены, то будет время разобраться как делать все правильно. Вопросы производительности стоит решать по мере возникновения проблем, вообще у REST с этим не так много проблем. Узкие места можно переписать на чем-то другом, например на go, можно оптимизировать persistance-layer, сериализацию (при простых запросах JMSSerializer дает большой оверхэд по времени, так что можно в особых случаях написать свой оптимизированный под определенный response сериализатор) и т.д.

    Но в целом вы можете использовать отдельные компоненты в связке с тем же Silex. Вообще все упирается больше в количество бойлерплейт и сервисного кода. В целом если вы будете подходить грамотно к построению архитектуры приложения можно на чем угодно написать нормально. Вопрос только в том что какие-то вещи где-то правильно сделать сложнее.
    Ответ написан
    1 комментарий
  • Собеседование на должность javascript-разработчика (senior). Как пройти и какие вопросы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Выбираете место куда не особо хотите идти, идете на собес, не проходите, понимаете в чем ваши проблемы. Знать надо пожалуй javascript сам по себе, работу событий в DOM, HTTP (в том числе кросдоменные запросы) и т.д. и т.п. Далее от уровня на который претендуете. Может быть от вас вообще только jQuery потребуется знать. А может angularjs+backbone+knockout+кучи других штук и gulp/grunt, jasmine и прочие приблуды для покрытия кода тестами...
    Ответ написан
    Комментировать
  • Как в composer отменить измененные файлы? (composer revert modified files )?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Маленькая поправка - не update а install. Последнее установит именно те версии, которые у вас стояли (пл composer.lock).

    Если у вас composer ставил зависимости с prefer-dist (тобишь скачивал архив), то да. Только удалить директорию и выполнить composer install.

    Если у вас composer клонил пакет и делал чекаут, можно вручную сделать чекаут директории нужной, либо composer сам предложит это сделать.
    Ответ написан
  • Стоит ли сегодня переплачивать за сайт на ruby? Или сэкономить на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне не понятно почему в два раза дороже. Ладно бы там на 30% дороже, но в два? Сроки разработки этого проекта на Ruby даже чуть меньше, чем на PHP или приблизительно равны. Покрытие кода тестами и прочее сильно много разницы в сроках так же не дает.

    Вывод, либо вы нашли разработчика на Ruby с завышеным рейтом, либо разработчика на PHP с рейтом в два раза ниже. Если второе, то стоит задаться вопросом, а хватит ли у него квалифакации? Может быть во время оценки он не учел покрытие кода интеграционными/функциональными тестами, может еще чего.

    По хорошему стоимость не должна так уж сильно различаться. Рейт сильного Symfony девелопера не ниже рейта хорошего RoR девелопера. Сроки по вашему скудному описанию скорее меньше будут у RoR. Вывод, RoR должен обойтись дешевле. По возможностям Symfony больше подходит для долговременных проектов, он быстрее Ruby (на hhvm так прилично быстрее), но под RoR больше качественных готовых решений, что так же должно сократить сроки разработки.

    Словом... мутно как-то. Опишите как вы получили "в 2 раза дешевле".
    Ответ написан
  • Что такие Си с классами?

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

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Dependency Injection решит все ваши проблемы. Суть в том что бы небыло глобального объекта содержащего все настройки, доступного из любой точки приложения. Вы должны давать параметры при инициализации. Тогда это сделает ваш код более гибким. Что бы не париться с этим, можно делегировать обязанности по созданию этих ваших компонентов отдельному компоненту. Он будет держать все все все параметры, но сами компоненты к ним доступ иметь не будут, только то что им дали в конструктор.

    Вот вам простенький примерчик, но лучше взять чего готовое. А лучше вообще взять Silex или чего такого.
    class Container
    {
        private $definitions;
        private $settings;
        private $instances;
    
        public function __construct(array $settings = array())
        {
              $this->instances = [];
              $this->definitions = [];
              $this->settings = $settings;
        }
    
        public function get($name) {
            if (!isset($this->instances[$name])){
                 if (!isset($this->definitions[$name])) {
                       throw new \InvalidArgumentException(sprintf('service "%s" not defined', $name));
                 }
                 $this->instance[$name] = $this->definitions[$name]($this);
            }
    
            return $this->instance[$name]; 
        }
    
        public function getParam($name) {
              return array_key_exists($this->settings, $name) ? 
                    $this->settings[$name] : null;
        }
    
        public function setParam($name, $value) {
             $this->settings[$name] = $value;
        }
    
        public function setDefinition($name, $definition) {
             if (!is_callable($definition)) {
                 throw new \InvalidArgumentException('Service definition should be callable');
             }
    
             $this->definitions[$name] = $definition;
        }
    }


    Использование:
    // params.php
    return [
        'db.hostname' => 'localhost',
        'db.username' => 'user',
        'db.password' => 'pass'
    ];
    
    // services.php
    $container = new Container(require __DIR__ . '/params.php');
    $container->setDefinition('db', function (Container $c) {
        return new DB($c->getParam('db.hostname'), $c->getParam('db.username'), $c->getParam('db.password'));
    });
    
    return $container;
    
    //app.php
    $container = require __DIR__ . '/container.php';
    
    $db = $container->get('db');
    $db->query('...');
    Ответ написан
    Комментировать
  • Правильная обработка ajax методов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да, это называется маршрутизацией запросов. Если не хотите писать велосипеды, рекомендую взять какой микро фреймворк, например Silex (хотя бы посмотрите примеры) и не париться.
    Ответ написан
    Комментировать
  • Какой использовать простейшую сущность для хранения массива ключ-значение в Java?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А что не так со списком хэшмапов? По идее ничего оптимальнее и не сделать... разве что отказаться от списков в пользу массивов.
    Ответ написан
    Комментировать
  • Какие есть framework на HTML5?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) Вам нужен Javascript-фреймворк, HTML5 это просто модное словцо. AngularJS, EmberJS, Backbone+jQuery+lodash+knockout.
    2) Да. В идеальном случае у вас сервер и клиент будут двумя разными приложениями общающимися по REST. В не идеальном случае отдельные компоненты могут скрещиваться.
    Ответ написан
    9 комментариев
  • Почему объект создается два раза?

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

    tumblr_loqfm0r1UJ1qludboo1_500.gif

    По делу если, то конструктор должен вызваться один раз, если это действительно весь код который учавствует во всей этой вакханалии. Самым простым вариантом будет поставить xdebug, поставить бряку в конструкторе и посмотреть call trace в случае если действительно вызывается дважды. Более изысканные способы подразумевают различные комбинации var_dump и die в разных частях кода.
    Ответ написан
    4 комментария
  • Как сделать загрузка изображения + обрезка изображения с увеличением и уменьшением?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Загружаете фотку в canvas, редактируете, делаете toDataUri и шлете на сервер результат. Либо шлете сам файл и параметры того что пользователь выбрал и режете все уже на сервере.

    Вам типа за вас сделать? тогда вы не туда пришли. Ибо так понятно что у вас руки опустились и все.
    Ответ написан
  • Есть ли браузер на PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    breach.cc это именно браузер, оболочка. Насколько я понял там на JS чисто UI и модули, webview берется из хромиума.

    На PHP уж точно нету. Если рендереры HTML/CSS на Canvas, есть примитивные интерпритаторы JS н JS... но полноценного браузера нету. Да и это слишком сложно и уж точно никому не нужно.

    Если вам интересно узнать как оно работает, проще почитать. Простенький браузер на JS написать можно, но без JS, с примитивной поддержкой CSS и т.д. Можно думаю и полноценный но займет слишком много времени и опять же никому не нужно.
    Ответ написан
    6 комментариев
  • CUDA на слабых видеокартах работает так же как и на более мощных?

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

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

    Из доступной информации, есть официальные гайды. Там приводится вот такая вот табличка:
    jkS7S.png
    Ответ написан
    3 комментария
  • Зачем нужен интерфейс в java?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Классический пример - класс логгер. Можно просто не париться и сделать класс Logger со своей реализацией, и везде в клиентском коде (то есть тот код, который этот класс будет использовать) завязать на этот класс.

    Но чу, теперь логи у нас должны храниться не в файлах а в базе, внезапно так. У нас меняется конструктор, у нас меняется реализация всех методов (предположим что у нас он один, log(string message, int level, string category);

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

    С интерфейсом у нас есть красивый интерфейс, есть его реализации, если у нас есть контейнер зависимостей то мы можем привязать конкретную реализацию к интерфейсу и там где требуется этот интерфейс будет автоматом засунута нужная реализация. Замена реализации - изменить конфиг DI.

    Так же, если вам нужно часто менять интерфейс то у вас уже какие-то проблемы с построением архитектуры. Интерфейс должен быть простым и должен делать что-то одно.

    А вообще, почитайте про GRASP и SOLID.
    Ответ написан
    2 комментария