• Нужен ли Angular JS Java разработчику?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если учить Angular JS то у меня есть на него около 3 месяцев.

    Тогда первый вариант, нанять человека.
    Ответ написан
    Комментировать
  • Почему так не делают в docker (all-in-one чёрный ящик)?

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


    Отчего же? Ваше приложение может работать под арчем используя одни либы, используя при этом базу данных которая крутится под дебианом, при этом вы не паритесь о каких-то других вещах. Если вам нужна база данных - вы просто используете контейнер с оной как черный ящик. А с учетом того что у нас есть docker-compose разворачивать такую систему вообще не проблема, просто запускаем docker-compose up и все. Мы добились того же что можно было бы сделать используя один контейнер, но всю систему намного проще поддерживать.

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

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

    Ну и опять же, многие делают именно так как вы. Просто запихивают все в один контейнер.

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

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

    Как правило просто перерисовывается все. Вообще все. Затем уже идут оптимизации. Скажем в iOS есть чудный компонент под названием UITableView который просто игнорирует все невидимые ячейки. С другой стороны тот же браузер будет рендрить все, что не display: none. Даже если это "что-то" заслоняет другой слой. Идею вы думаю уловили.

    как работает аппаратное ускорение;

    Читаем про архитектуру видеокарт, opengl, графический конвейер.

    как рендерится веб-страница со всеми эффектами: тени, полупрозрачность, анимация;

    www.html5rocks.com/en/tutorials/internals/howbrows... - там довольно детально.

    как работают композитные менеджеры окон, типа Compiz;

    прямо с их сайта:
    Compiz is an OpenGL compositing manager that use GLX_EXT_texture_from_pixmap for binding redirected top-level windows to texture objects. It has a flexible plug-in system and it is designed to run well on most graphics hardware.


    Если вы ознакомились с OpenGL то думаю разберетесь.

    https://www.youtube.com/watch?v=cQoQE_HDG8g - так же можете вот это посмотреть.

    про библиотеки GTK+ и Qt, хочется понять, как они уживаются в одной десктопной среде в линуксе;

    ну... они ничего не знают друг о друге и работают поверх X11
    Ответ написан
    Комментировать
  • Много уровневые контроллеры в Phalcon?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Но на автомате это не поддерживается?

    на автомате это плохо.
    Ответ написан
    Комментировать
  • Как в ОС UBUNTU инициировать работу контроллеров ( сервисов, отдельных php-скриптов или целых бандлов) Symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    По первому вам уже ответили - используйте сервисный слой. По второму - используйте MQ (например rabbitmq). В этом случае ваша джоба будет периодически собирать новые имейлы и добавлять их в очередь на обработку. Далее обработчики будут брать задачу из очереди и парсить мэйлы. Ну и т.д. Обработчиками могут быть команды симфони и у них может быть доступ к сервисному слою опять же.
    Ответ написан
  • Почему не работает API запрос?

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

    PHP Warning: file_get_contents(https://getbible.net/json?p=James3:5): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden


    попробуйте поиграться с заголовками запроса, User agent, referer и т.д.

    $opts = [
        'http'=> [
            'user_agent' => 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0',
        ]
    ];
    $context = stream_context_create($opts);
    Ответ написан
    Комментировать
  • Реализация Telegram API на JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    исходники webogram доступны, так что...
    https://github.com/zhukov/webogram
    Ответ написан
  • Пара вопросов по Postgres?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1. Однобайтовый int. В документации инты начинаются от 2х байт, у меня есть много что влезло бы и в 1.

    на диске оно будет занимать все те же 2 байта, зачем так экономить?

    Использование индекса с OR/IN.

    Проще посмотреть эксплейн запроса, не так ли?
    Ответ написан
  • Что значит 120 GB?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Обычно 1Gb в контексте маркетинга это 1000 000 000 байт, а не степень двойки. Реальный размер всегда будет чуть отличаться.

    Допустим у маков обычно пишут 124gb, но что мы видим:

    Capacity : 120.1 GB (120,101,797,888 Bytes)
    Ответ написан
    Комментировать
  • Как защититься от редактирования js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Возьмут, скажем, поставят ip неизвестно кого и как тогда "поймать" самозванца?

    А еще это можно организовать на сетевом уровне, скажем через прокси.

    А еще у некоторых пользователей (например тех кто сидят через 3G или публичные wifi сети) ip динамический.

    Также могут зациклить отправку данных, создать нагрузку на сервер

    С одной машины - не серьезно. В любом случае есть rate-limit и это дело можно настроить в nginx. В случае с прокси или распределенной атакой не поможет.
    Ответ написан
  • Как создать статическую переменную в ES6?

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

    вы же статику хотели. В противном случае:

    class SubList {
        get style() {
            return {
                  overflow: 'hidden'
            };
        }
    }


    можно и статикой замутить, но и обращаться тогда надо будет через SubList.

    updated:
    var someObj = {
        overflow: 'hidden'
    };
    
    export default class FooBar {
        get someObj() {
             return someObj;
        }
    }
    Ответ написан
  • Как правильно добавить действие в rest api отличное от CRUD?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почему бы не так:

    GET /prices?from="efaef&to=aeaef&foo=bar

    Если делать как предлагает Назар Мокринский, то это RPC, это тоже нормальный подход, когда имена ресурсов не очень ложатся (например я так делаю с методами апишки для восстановления пароля). В этом случае лучше использовать POST, но опять же в вашем случае все все еще нормально ложится на rest, так что....
    Ответ написан
    Комментировать
  • Как и куда в ES6 засунуть propTypes будет правильно?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    class SomeComponent extends React.Component {
        get propTypes() {
             return {
                 data: React.PropTypes.object.isRequired
             };
        }
    }
    Ответ написан
    Комментировать
  • Почему поведение service отличается от поведения функции конструктора этого service?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Из вашего вопроса ничерта не понятно, приведите код и по каким признакам вы определяете что что-то не так?

    По вашей задаче: инверсия зависимости и фабрики.
    Ответ написан
    23 комментария
  • Как правильно запускать долгий php-скрипт?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вообще более-менее правильный подход:

    - пользователь отправляет запрос на сервер
    - сервер добавляет задачу в очередь
    - обработчик-демон берет задачу и делает ее

    По поводу отслеживания прогресса все чуть интереснее. Есть как минимум 4 варианта реализации:
    - пулинг - когда периодически мы шлем ajax запрос на сервер и спрашиваем сколько там сделано
    - лонг-пулинг - оптимизация первого варианта, при которой запрос не сразу отваливается, а отваливается либо по таймауту (скажем прошло 10 секунд) или же изменилось состояние и нам нужно об этом уведомить пользователя. Как только соединение отвалилось мы обрабатываем что там нам пришло или не пришло и повторяем запрос. Профит - реалтайм нотификация, то есть как-только у нас появилась свежая информация мы можем ее получить.
    - Server-sent events, когда запрос отдается нам по кускам с разделителями. Каждый кусок отдается тогда, когда что-то на сервере поменялось. Профит тот же что и в варианте с лонг полингом только не надо разрывать соединение. Но есть куча нюансов (скажем с Apache это не прокатит) и мало кто так делает.
    - web sockets - реалтайм, полнодуплексный, удобный вариант, но нужно заводить отдельный демон.

    Самый простой вариант - простой пулинг, в вашем случае реалтайм вам не нужен, достаточно раз в 10 секунд спрашивать сервер что там как. В этом случае обработчик очереди (или дочерний процесс или еще кто) может записывать в кэш текущий статус джобы, и вы можете получать ее по идентификатору. в качестве хранилища можно использовать redis или memcache, в этом плане они идеальны.
    Ответ написан
    5 комментариев
  • Почему ui-router не посылает событий при первом входе?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    stateChangeStart запускается при смене стейта и только. Просто обрабатывайте внутри директивы и рефреште по stateChangeStart
    Ответ написан
    3 комментария
  • Существует такой скрипт, который определяет поддерживает ли браузер определенное свойство и добавляет префиксы?

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

    Так что берем в руки autoprefixer и делаем прекомпиляцию на сервере, + сервим в gzip + кеширование.

    --- updated ---
    Сори, попутал с transform в css файликах.

    Для js ничего предложить не могу, только такое:
    www.kirupa.com/html5/vendor_prefixes_javascript.htm
    Ответ написан
    4 комментария
  • Как преобразовать json в модель/класс?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    JSON.parse

    А вообще попросите там на сервере что бы вам правильный Content-type возвращало, и тогда ангуляр будет это делать сам. Либо же почитайте про interceptors

    Если же задача состоит в "замэпить данные на объект". то...

    return data.map((item) => Post.fromObject(item));
    Ответ написан
    Комментировать
  • Нужно ли складывать много маленьких JS файлов в один большой?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если вы используете HTTP2 - то не обязательно, но это врядли.

    если загрузить асинхронно 10 файлов по 100кб то это будет быстрее чем один 1МБ файл

    А если загружать по 80 файлов по 10кб то это будет медленнее чем 10 файлов по 100кб, так как расходы на установление соединения будут больше чем время ожидания доставки очередной порции данных.

    Браузер делает запросы за ресурсами паралельно (можете в дебагере браузера посмотреть, там же информация о том кто блокирует загрузку), так что загрузка нескольких файлов будет быстрее загрузки одного большого. Но, даже с учетом keep alive, браузер не может реюзать полноценно при таком раскладе соединения, и он будет их плодить в большом количестве, и чем больше их, тем больше нагрузка на сервер, тем медленнее будет получаться статика. Так что нужно найти баланс.

    Я бы предложил разделить все на:
    - angular.js
    - vendor.bundle.js - все сторонние модули и прочее
    - app.bundle.js - все файлики приложения.

    тогда да. асинхронная загрузка будет быстрее.
    Ответ написан
    1 комментарий
  • PHPStorm, куда слезть с него? nodejs / frontend разработчики, поможете?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что-то продуктивнее? VIM.

    Вообще интересно чем вас не устраивает WebStorm/PhpStorm. Вы может поделитесь.
    Ответ написан
    7 комментариев