Задать вопрос
  • Как реализовать сложную логику проверки привилегий пользователя в Zend Framework 2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Курить в сторону Security Voters. Если подобное не поддерживается зэндом из коробки, можно быстро наваять свою реализацию или взять какую-либо готовую имплментацию. Удобнее способа разруливать права на выполнения действий я лично пока не встречал.
    Ответ написан
  • Внутренний модуль, создает 2 скопа?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Я не знаю почему для решения изначальной задачи вы не воспользовались комбинацией ngRepeat + ngTransclude, ну да ладно.

    А клик происходит дважды потому что сначала вашу директиву обработал Angular а потом вы еще раз это дело скомпилили. То есть вы не просто скомпилили, а сделали это с одним и тем же куском DOM, так что все продублировалось. Один из вариантов - сделать клон элементов и тогда уже компилить. Ну или убрать ручной compile из myDirective, он там не нужен. А если нужен - лучше заменить на ngTransclude.
    Ответ написан
    8 комментариев
  • Почему правильнее, чтобы Ajax возвращал JSON, а не HTML?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    тут все зависит от контекста.

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

    С токи зрения классических web-сайтов, где все сначала рэндрится на сервере, есть два варианта:
    - если данные с сервера нам нужны что бы обновить маленькую штуку какую, которая уж больно зависит от текущего состояния страницы, то есть это часть логики представления на клиенте, то лучше json а на клиенте уже сделать что нужно. Так мы упростим логику на сервере.
    - Если мы просто должны что-то подгрузить и нам важна производительность на клиенте, то тогда имеет смысл отдавать отрендренный HTML. Шматок html грузится не сильно дольше шматка json, и в целом, за счет отсуствия рендринга на клиенте мы можем даже сэкономить. Так скажем twitter делал (а может до сих пор делает). Но опять же это усложняет поддержку сервера так что тут надо смотреть, усложняет ли, сильно ли и т.д.
    Ответ написан
    2 комментария
  • 3D или программирование?

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

    Я вот когда-то думал что 3D это мое а программирование - так, хобби... и вот уже лет 6 вообще не открывал макс...

    По поводу профильного образования - ну это вы зря. Хотя бы пару курсов не повредят. Просто стоит выбрать где учиться.
    Ответ написан
    1 комментарий
  • Get\Set для унаследованных классов, как?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну добавить такие вот геттеры/сеттеры вы можете, если используете Object.create:
    ClassName2.prototype = Object.create(ClassName.prototype, {
       foo: {
            enumerable: false,
            get: function () {}
            set: function () {}
       }
    }))
    Ответ написан
    Комментировать
  • Стоит ли использовать noSQL для каталогов с фильтрами (товары, недвижимость и все что в исчислимом количестве)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Храним данные в MySQL (а лучше PostgreSQL, ибо на этом можно было бы и закончить), делаем агрегацию данных в mongodb/couchdb, для выборок юзаем монгу, для записи - mysql + опять же запускаем агрегацию данных.

    Монга начинает грустить когда вы пытаетесь делать там джойны. А если вы захотите сделать монгу основным хранилищем то вам захочется сделать и джойны... такие дела. Как кеширующий слой - найс. Как основная база - надо сильно хорошо подумать а стоит ли.
    Ответ написан
    Комментировать
  • Перебор массива циклом или сверка значений проверкой?

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

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

    Пример. Возьмем массив на 1 000 000 чисел, и попробуем сделать его копию, с увеличенным в два раза значением:
    var data = range(1000000);
    var result = range(1000000);
    // обычный вариант
    for(var i = 0;i<1000000;i++) {
        result[i] = data[i] * 2;
    }
    
    // развертка цикла
    for(var i = 0;i<1000000;i+=4) {
        result[i] = data[i] * 2;
        result[i+1] = data[i+1] * 2;
        result[i+2] = data[i+2] * 2;
        result[i+3] = data[i+3] * 2;
    }


    jsperf.com/loop-unroll-simple

    На этом примере уже видно что развертка работает, хоть и прирост производительности не такой большой. Оптимизирующий компилятор JS-а и там умеет это делать.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Donate производится на добровольной основе и не является монетизацией.
    Ответ написан
    Комментировать
  • Читаемость php и html?

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

    Если вас коробит, это хорошо на самом деле. Вы можете просто делать отдельные процедурки/функции которые будут формировать вам кусочки HTML или же всю страницу. Это будет хорошей практикой для вас думаю. Ну мол функции/процедурки которые готовят данные, а потом функции/процедурки которые делают из этих данных страничку.
    Ответ написан
    Комментировать
  • Windows 8 VS Linux?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    переключение между PS и редактором занимает ~ 10 секунд

    Ну че, логика верная. Нет фотошопа - нет проблем.

    2ГБ Оперативки

    Вы не думали увеличить объем... скажем до 8-ми? или хотя бы до 4-ех? Ну и да, SSD. А так поменяете вы систему или нет - разницы не будет с таким железом.
    Ответ написан
    2 комментария
  • Есть PHP фреймворк на DI с контроллерами, кроме Phalcon?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Посмотрите в сторону lumen. Ну и да, чуть что можно взять PHP-DI, Symfony/HttpKernel и FastRoute и радоваться жизни.
    Ответ написан
  • Сколько у вас мониторов и какая у них диагональ на вашем рабочем месте?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    13" экран бука (для IDE и скайпиков), + 24" benq не помню модель. Монитор поменьше под другим. Раньше второй монитор был сбоку и в итоге я не пользовался одним из мониторов вообще так как головой вертеть как-то неудобно. А так - пишешь что-то, поднимаешь голову - смотришь результат. 13" для IDE более чем хватает (хотя для xcode малова-то бывает, потому с ним частенько работаю на большом экране) + retina что бы текст читался лучше.
    Ответ написан
  • Архитектура API на Laravel?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Может быть есть другой вариант?

    Да, есть, перестать страдать фигней с универсальными настройками раутинга (всеравно придется потом что-то докручивать) и сделать нормальную REST/JSON RPC API, со своими правилами на каждый метод API.

    laravel.com/docs/5.0/controllers#restful-resource-... - вообще имеет смысл вот такие штуки использовать.

    По версиям API - можно через мидлвэры разруливать.

    Что до {type} - вообще это не круто, если вы хотите получить json вместо xml, то просто пишите в Accept именно application/json, а не делайте кастыли в URI. Хотя это как вам удобнее конечно.
    Ответ написан
    5 комментариев
  • Cуществует ли легковесная реализация Data Mapper + UnitOfWork + Repository?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    М.... не знаю такой.

    Есть https://github.com/doctrine/skeleton-mapper

    Еще есть Spot2 но оно без UoW, надо будет докручивать самостоятельно (благо реализации есть).

    Но вообще лучше смериться с тем что пока ничего лучше доктрины нет и просто использовать ее, не забывая включать в продакшене кэш для метаданных.
    Ответ написан
    1 комментарий
  • Передача константы класса в качестве аргумента getRepository?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net/manual/en/language.oop5.basic.php#language...

    то есть мы просим доктрину дать нам репозиторий для сущности Image (по полному имени класса).
    Ответ написан
    Комментировать
  • Как часто вы используете/нужно исользовать паттерны проектирования и построении api?

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

    Например почти каждый javascript разработчик писал что-то в духе...

    var api = (function() {
        // какие-то приватные вещи, к которым не стоит давать доступ из вне
        // что бы все было чистенько
        var privateVars =  {};
     
        // публичный метод
        return function () {
             
        }
    }();


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

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

    p.s. пользуюсь постоянно, в контексте Angular реализую даже сервисный слой, что бы вся бизнес логика была вне контроллера и последний использовался для отделения бизнес логики от логики представления.
    Ответ написан
  • Имеет ли смысл в angular делать какой то сервис для всех других сервисов?

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

    Выносить какие-то общие вещи в отдельные сервисы, делать иерархию зависимостей сервисов не настолько линейную - это вообще нормально. Зависит от логики приложения.
    Ответ написан
    1 комментарий
  • Одностраничное приложение только на websocket, делал кто?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Начнем с того что вы сейчас просто выбираете транспорт, либо HTTP либо WebSockets. С концептуальной точки зрения разницы особо нет. В плане производительности - все упрется в выбранную архитектуру.

    По сути, websockets будут продуктивнее работать (если мы не берем в расчет HTTP2), но вам придется реализовывать мультиплексирование запросов/ответов, как-то писать свой протокол поверх и словом куча гемороя. При том что профита по производительности в сравнении со старым добрым HTTP + Keep Alive не так много.

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

    p.s. пробовал делать все на websockets но без мультиплексирования, у меня небыло необходимости разруливать конкурентные запросы или паралельные, все шло через очередь да и задачи были очень простые. А почему был выбран websockets - потому что всеравно использовался а для одного метода еще API писать было лень.
    Ответ написан
    2 комментария