• Как ускорить работу с Browserify?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Переходите на es6 модули и babel.js. при разработке можно пересобирать только измененный файл а подгружать все через es6-module-loader (+ компилить все в один бандл для продакшена).
    Ответ написан
  • На PHP и Python возможно реализовать одинаковые по функционалу сайты, или какой-то язык мощнее другого?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Клон youtube только на php или python будет проблематично сделать. Как минимум у вас появятся СУБД, очереди, кеши и все такое. В целом же это все вполне себе реально сделать хоть на javascript.
    Ответ написан
    2 комментария
  • [Silex] Где разместить Provider?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну вот пишите вы какой-то компонент, и бац, у вас появляется нэймспейс с этим компонентом. А потом пишите вы такой провайдер, а он так бац и в неймспейсе компонента, для которого вы это дело пишите. Или у вас просто есть нэймспейс Provider.... Ну думаю вы меня поняли. Если у вас там провайдеров слишком много - стоит тогда подумать почему так.
    Ответ написан
  • Сильные стороны PHP-вских фреймворков по сравнению с фреймворками Python и наоборот? Бывают ли случаи, в которых без фреймворков нереально обойтись?

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


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

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

    Если вам так уж хочется выбрать - подкиньте монетку, толку будет явно столько же если не больше.
    Ответ написан
    6 комментариев
  • PHP-MVC: Как осуществить взаимодействие JS и БД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала, MVC чисто UI-ая архитектура. Об этом как-то скучно, но если интересно почитайте про action-domain-responder

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

    Классический случай клиент-серверной архитектуры - single page application. С точки зрения WEB же частенько у нас клиента как такового почти и нет, почти всю роль клиента забирает браузер а на JS написаны разного рода украшательства и свистоперделки. Короче клиент и сервер сильно перемешаны (то есть сервер слишком много знает о клиенте).

    На клиенте MVC позволяет из view работать с моделью через контроллер, который является эдаким промежуточным слоем, который разделяет view и model между собой. На сервере же, такой подход не жизнеспособен в большинстве случаев. Там поток данных идет строго вниз, запрос -> контроллер -> получение данных в контроллере (из сервисов или еще как) -> формирование представления данных (шаблонизация, сериализация, что угодно) -> отправка ответа. То есть из view возвращаться обратно в контроллер уже не хорошо, у него уже должно быть все что ему нужно, а всякие хелперы и утилиты - часть presentation layer. Иногда это неудобно и спасает HMVC, когда из view layer мы можем инициализировать запрос на другой контроллер, и тогда мы как бы не нарушаем цепочку и вроде как удобно.

    Теперь к сути проблемы, а именно AJAX запрос. Запрос производится клиентом (как бы он небыл связан с сервером), то есть это никакого отношения к архитектуре сервера не имеет. То есть инициализируется все та же цепочка действий, формирование требуемого представления данных и отправка их на клиент. По сути как только мы отдали респонс с сервера, будь там что угодно, все что происходит с ним после, на клиенте, нас уже не сильно волнует.
    Ответ написан
    Комментировать
  • Как запустить snippet директивы для angulsrjs?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://docs.angularjs.org/guide/directive

    Если мы заполним за вас, то соблаговолите разукрасить:

    60908_colours_881-by_endi.gif

    Updated
    Черт... не думал что вы это сделаете ну... теперь не отвертеться...

    .directive('', ['', function(){

    что тут происходит. Первые пустые кавычки - имя директивы. Записывается в camel case, используется с нижним подчеркиванием (так уж повелось с DOM).

    .directive('someDirective', fn);
    // <some-directive></some-directive>


    дальше, у нас есть массив, в котором одни пустые кавычки и функция. Это такой вот кастыль (по другому не выйдет сказать) что бы описать зависимости директивы. Можно заменить массив просто на функцию, но если вы будете прописывать зависимости от сервисов (например от $q) при минификации все сломается. Дело в том, что если мы явно не указали проперти $inject у функции, которую передаем, то angular будет пытаться подобрать зависимости по названиям аргументов. И тут проблемы - при минификации имена аргументов меняются и... все плохо. Потому либо явно прописываем $inject либо используем array notation, при котором сначала идут оригинальные названия сервисов, а последним элементом массива - функция, в которое это все будет инджектиться. Ну и справедливости ради - есть ng-annotate который все это автоматизирует.

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

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

    Собственно по тому как и что писать в директивах много написано.
    Ответ написан
    5 комментариев
  • Какие цели преследует Dependency Injection?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    DI это один из вариантов Inversion of Control. Основная его задача - ресолвить зависимости объектов, больше он ничего не умеет да и не должен. Вам надо создать объект? просите DI. Надо переопределить реализацию интерфейса, на который завязаны ваши классы, не вопрос, поправили в одном месте - применилось везде.

    для тестирования важно скорее соблюдение принципа инверсии зависимостей (D в SOLID), а как эти зависимости к нам приходят это уже детали.
    Ответ написан
    Комментировать
  • Адаптивная вёрстка - как побороть боль?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    сделать красиво и лаконично - использовать rem.

    rem не панацея от всех болезней. Вообще каждый юнит надо использовать осмысленно. Будь то px, rem, em или vm/vh/vmin. Все юниты нужны для своих целей и использовать только что-то одно глупо.

    Существует ли какой-нибудь клёвый подход/методика?

    mobile first. В целом же все зависит сильно от дизайна. Как по мне придумывать какие-то правила на эту тему - глупо.

    В чём смысл использовать em?

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

    Неужели нет единой методики, неужели в вёрстке всё так плохо

    Единой методики быть не может априори. И не все так плохо. Ну а что до неудачных примеров - просто смеритесь что большинство просто не парится, работает и ладно. Методологии есть - SMACSS, BEM, etc... они не по адаптивной верстке, они просто по верстке. С тем же BEM (возможно слегка адаптированным под ваши нужды) можно изрядно уменьшить количество боли.
    Ответ написан
    4 комментария
  • Почему нужно так извращаться в Yii2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    алиасы?

    Почему нужно так извращаться в Yii2?

    Потому что люди могут.
    Ответ написан
    Комментировать
  • Продажа программы через свой сайт?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Windows Store и не надо выдумывать.
    Ответ написан
    6 комментариев
  • Каков путь джуниора?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    читать книжки, больше кодить. Прочитал - попробовал.
    Ответ написан
    Комментировать
  • Как сделать нативный код на JavaScript совместимым с библиотеками/фреймворками?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    все эти "ненужные" свойства добавляются через прототип, следовательно нужно проверять:

    for(var i in object) {
        if (!object.hasOwnProperty(i)) continue;
    
        // do stuff
    }


    в целом же для ваших задач лучше использовать старый добрый .map

    var newCollection = collection.map(function (item) {
        return JSON.stringify(item);
    });
    Ответ написан
    Комментировать
  • Зачем писать в паттерне "декоратор" название конструктора?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это не название, вы явно задаете конструктор но у прототипа, что интересно. Зачем - а вот тут не скажу. Сейчас модно вообще пользоваться Object.create.
    Ответ написан
    2 комментария
  • Как красиво верстать такое (без дублирования кода)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почитайте про БЭМ. Для выделенных элементов у вас будет один блок, в котором есть элементы:

    .intro {}
    .intro__heading{}
    .intro__text{}
    .intro__call-to-action{}


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

    различия в оформлении в этом случае делаются через модификаторы:

    .intro--gray {background-color: #efefef}
    .intro--wide {padding: 100px 0; }


    смысл примерно такой.
    Ответ написан
  • Как использовать DocumentFragment вместе с jQuery?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А как использовать этот же подход в методах jQuery - appendTo, append, html и т.д ?


    Да так же

    var frag = $(document.createDocumentFragment());
    // ...
    $node.append(frag);
    Ответ написан
    Комментировать
  • Какую структуру выбрать для своей CMS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    И вот задумался - какую структуру для неё выбрать?


    дерево
    Ответ написан
  • Подключение зависимостей вендорного бандла в Symfony2 автоматически?

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

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

    то подключал зависимые бандлы в app/AppKernel.php (все 10 штук).

    так и напишите в инструкции.
    Ответ написан
    3 комментария
  • Стоит ли использовать json?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Стоит ли использовать json?

    Почему нет? Можно конечно еще protobuf использовать...

    насколько я понимаю там нету потдержки кук

    Вообще это не проблема добавить, но это имеет смысл только для web приложений (с определенными оговорками, если в вашем случае вероятность XSS выше чем csrf уязвимостей).

    В целом же популярная практика - JWT (JSON Web Tokens)
    Ответ написан
    5 комментариев
  • Как ng-repeat разделить запятыми?

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

    angular.module('app').filter('join', function () {
        return function (arr, glue) {
             if (!Array.isArray(arr)) {return arr;}
             return arr.join(glue);
        };
    });


    <strong>{{store.product.genres | join : ', '}}</strong>
    Ответ написан
    Комментировать
  • Можно не использовать шаблонизатор для NodeJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    так как не вижу смысла он и сам по себе уже шаблон.

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

    А как происходит дело в NodeJS ?

    А никак, js это js, html это html. Хочется извращений - можно хранить все в js в виде строк и работать с ними. Но лучше всегда использовать шаблонизаторы. Это как минимум будет вас ограничивать в том, что можно пихать в шаблоны а что нет. В идеале запрос данных не должен происходить из шаблона выше по слоям, только вниз. Скажем концепции типа HMVC родились именно из этого ограничения, при этом мы не нарушаем правило, о том что поток данных идет сверху вниз вместо прямого обращения из view к логике.
    Ответ написан
    Комментировать