• Как работают такие приложения как WhatsApp или Viber?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сокеты или что?

    На низком уровне при работе с сетью сокеты в любом случае используются.

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

    Вообще не понятно что вас интересует, реализация сервера, клиента, конкретно вайбера? Там разве не P2P?
    Ответ написан
    3 комментария
  • Запрос через PHP выполняется доли секунды, а через phpmyadmin - 15 секунд. Запрос одинаковый, как так?

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

    У меня есть подозрение что EXPLAIN даст вам намеки о том что вы просто не используете индексы.
    Ответ написан
    2 комментария
  • Актуальные JavaScript фреймворки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не дня без фрейморков.

    Из fullstack фреймворков можно выделить только два:
    - Angular и Ember. Все остальное - комбинации библиотек, типа тех же бэкбон с марионет, реакт с флюксом...

    С точки зрения концепций они не сильно различаются на самом деле. Ну то есть как, реакт вводит виртуальный DOM, ангуляр ввел директивы и приблизил наступление Web Components... это из различий. Миллионы других фреймворков обычно копируют эти идеи и видоизменяют их.
    Ответ написан
    2 комментария
  • Что значит конструкция в обращении к классу после Users::model()?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    User::model - читаем про статические методы. Грубо говоря этот метод через late static binding забирает имя класса, через который мы обратились к этому методу (в примере это User) и запрашивает... что-то типа репозитория (что-то типа, потому что в yii все не как у людей, и репозиторий этот это еще менеджер метаданных и билдер запросов... если упрощать). Далее метод просто возвращает репозиторий для модели с этим классом.

    Далее - method chaining. Каждый вызов метода объекта возвращает этот самый объект. Типа конфигурация так производится.
    Ответ написан
    Комментировать
  • Как наименьшей "кровью" парсить каждый час статус 10000 товаров?

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну так вы всю ноду заменяете на темплейт.

    Если вы хотите сохранить содержимое - используйте transclude
    Ответ написан
    2 комментария
  • Что учить, не могу определиться!?

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

    Берусь за jquery, json, sass,lessи ничего толком выучить не могу

    Учить JSON? бред. Осоздайте необходимость появления форматов типа JSON/XML/etc. Целенаправленно учить less/sass, то же не ок. Учите CSS (less/sass/postcss это лишь инструменты которые позволяют вам более грамотно организовать ваш код), и не в плане свойства/селекторы, а в плане подходов к верстке (БЭМ, MCSS и т.д.). Ну и да, заучите что такое DRY и почему вообще возникла необходимость в инструментах типа less/sass.

    ajax

    Не изучайте AJAX, изучайте HTTP. Тогда будет проще отделить реализацию от общей концепции. Хватит бездумно говорить "сделаю AJAX запрос", давайте говорить "сделаю HTTP запрос".

    короче направление простое - когда у вас будет более мение стабильный фундамент - то можно приступать к более высокоуровневым вещам.
    Ответ написан
    15 комментариев
  • Использовать CSS framework или писать свое?

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

    Имхо, писать свой "фреймворк", если вас смущают дополнительные 40 кб - ничем не обоснованная трата времени. Если же это ваш личный проект и вам хочется - то вас никто не остановит.
    Ответ написан
    4 комментария
  • Как работает цикл for в Java?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Это аналог forEach или for in.

    То есть "для каждого элемента (User cn) в списке (users) выполнить...."
    Ответ написан
    Комментировать
  • Какую видеокарту купить для работы с web?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Бери AMD A10 проц и хватит тебе встроенной GPU. 95 ват на все про все.
    Ответ написан
    Комментировать
  • Вопрос тем, кто недавно читал книгу Боба Мартина - "методика гибкой разработки на c#".?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не читал, но подозреваю что логика сохранения вынесена как раз таки в метод Execute (то есть она не реализована, и наверное должна быть реализована в рамках PayrollDatabase), то есть вне Change. Я бы туда Unit-of-work еще впихнул, тогда вообще славно.
    Ответ написан
    Комментировать
  • Nginx + php5-fpm VS Nginx + Apache; Что выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) .htaccess не нужен, обычно у вас есть дефолтный конфиг сервера который из проекта в проект отличается не сильно. Вы можете сделать автоматическое создание vhost в рамках одной конфигурации nginx.
    2) Apache в 90% случаев не нужен, если у вас не используются какие-то ну уж очень специфичные модули.

    Вывод - зачем добавлять лишнюю прослойку?
    Ответ написан
    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 комментариев
  • Организация системы плагинов на PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне нравится концепция составления функционала системы декорированием оной. Скажем можно поставить сверху мидлвэр маршутизатор, еще сверху - систему авторизации и разруливания прав доступа ну и т.д. Отдельные модули висят на своих маршрутах и не пересекаются. Ну и т.д. Если все это сдобрить хорошим IoC с ленивой инициализацией (например PHP-DI) то вообще ништяк.

    Это если вам что-то поинтереснее хуков и глобальных обзерверов интересует. С ними вечно проблемы.
    Ответ написан
    Комментировать
  • Как передать уведомление с помощью session->setFlash другому пользователю?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с помощью session->setFlash другому пользователю?

    Никак, session->setFlash использует сессию текущего пользователя, и ничью другую. В вашем случае вам нужно вводить какой-то push сервер и передавать нотификации ему.
    Ответ написан
    Комментировать
  • Что такое Virtual DOM?

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

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

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

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

    Если же прослойку эту сделать со своим интерфейсом, можно получить слой абстракции для работы с UI. Именно это предлагает тот же React. Слой абстракции над UI. Вы можете работать с реактом, но UI будет отрисовываться не через DOM а скажем... это может быть нативный интерфейс мобильной платформы (гуглить native-react). Ну и т.д.
    Ответ написан
    Комментировать
  • Как получить доступ к элементу в react.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Обычно в html у блока прописываем id, а в js скрипте получаем к нему доступ через document.getElementById("id")

    и получаем море проблем.

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

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

    https://facebook.github.io/react/docs/component-sp...
    Ответ написан
    3 комментария
  • Как сравнивать составить битовую маску с большим количеством условий?

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

    Можно сделать несколько битовых маск, типа каждый бит значения - флаг наличия в конкретной стране (из этого следует ограничение, что мы можем использовать только 32/64 страны на значение в зависимости от платформы для long unsigned). Ну и дальше по аналогии.
    Ответ написан
  • SetTimeOut возвращает отрицательное значение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    static int timeoutId()
    {
        static int lastUsedTimeoutId = 0;
        ++lastUsedTimeoutId;
        // Avoid wraparound going negative on us.
        if (lastUsedTimeoutId <= 0)
            lastUsedTimeoutId = 1;
        return lastUsedTimeoutId;
    }

    исходя из этого кода - негативным timeoutID быть не может. Там есть проверка, если все id-шки закончились и пошло переполнение - то ресетится в единицу. Но это хром. В других браузерах может быть все совсем по другому. Главное не привязывать логику к формату timeoutID и все будет хорошо.
    Ответ написан
    2 комментария