• Существует ли индексируемый поисковиками аналог AngularJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    стабильное решение уже указал вам Никита Гущин, будущее - Александр Марченко

    И чтобы его можно было использовать с laravel5.


    Все что угодно, SPA ничего не знают о Laravel. Всей ересью вроде проксирования поисковиков будет заниматься nginx или мидлвэр перед laravel.
    Ответ написан
  • Как правильно вынести настройки nodejs сервера в отдельный файл?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    в дополнение к вышесказанному предлагаю использовать ENV переменные для хранения той части конфигов, которое зависит от окружения (хосты, порты, пароли).
    Ответ написан
    Комментировать
  • Как лучше отправлять сообщения в MQ (AMQP), TCP или UDP?

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

    С другой стороны, если вы будете подключаться на loopback интерфейс (MQ сервер будет на том же сервере что и источник заданий), то оверхэда практически не будет, операционная система в этом случае опускает большую часть сетевого стэка.
    Ответ написан
    Комментировать
  • БЭМ. Не понятие основных понятий - блок, элемент, модификатор?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Получается что блок это чисто Namespace для других сущностей.

    как-то так да. Вот только у вас пример не правильный.

    <div class="blog"> 
       <div class="header header_blog">Заголовок блога</div>
       <div class="date date_blog">19.19.1900</div>
       <div class="body body_blog">текст</div>
    </div>
    <div class="comment"> 
       <div class="comment_date date">19.19.1900</div>
       <div class="comment_body body">текст</div>
    </div>


    Вот так правильно.

    Далее, помимо того что блок это "неэмспейс" он так же может содержать базовые стили, но не размеры и позиционирование. За это отвечают элементы.

    Грубо говоря.

    .blog{}
    .blog__date{} // задает положение даты в... блоге? В блоге нет дат, даты есть у постов, так что выносим это в .post
    .blog__header{} // задает положение заголовка, ширина, паддинги, маргины
    .blog__body{} //задает положение содержимого в блоге, только положение на странице, ширина, паддинги, маргины
    Ответ написан
    7 комментариев
  • Библиотека для оптимизации изображений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы нагуглили то что нужно.

    Еще есть частично бесплатная API у tinyjpg.com: https://tinypng.com/developers
    500 картинок в месяц, но нужно быть осторожным с png с прозрачностью.
    Ответ написан
    Комментировать
  • Как создать приложение на Yii?

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    забейте на время на MVC, почитайте про SOLID.

    1) mysql_* функции депрекейтед, используйте pdo (mysqli слишком низкоуровневая штука)
    2) делать 2 раза md5 не имеет никакого смысла. Сейчас можно генерить миллиарды хэшей в секунду на видеокартах так что подбор коллизии к хэшу займет не сильно много времени и большая часть паролей будет подобрана за первые пару часов. Используйте password_hash и password_verify. Для PHP < 5.5 есть флэбэк написанный на PHP.
    3) вы нарушили принцип единой ответственности, это к вопросу о том насколько ваш код ООП. Ну и принцип инверсии зависимостей туда же....
    Ответ написан
    5 комментариев
  • Как 3-х мерный массив преобразовать в модель?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В какую сторону стоит копать?

    three.js
    Ответ написан
    Комментировать
  • Что такое "отказ от двустороннего датабиндинга"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    есть датабиндинг, observable отношение между одним компонентом и другим. Например:

    var model = {
        title: 'Some Title'
    };
    
    function view(container) {
        var el = container.querySelector('[data-bind="title"]');
        // следим за изменениями
        Object.observe(model, (changes) => {
            if ('title' === changes.name) {
                // обновляем при изменении связанное значение у другого компонента
                el.innerHtml = model.title;
            }
        }, ['update'])
    }


    В этом случае если каким-то чудом наш элемент вдруг поменяет содержимое (ну а вдруг?) то значение внутри модели не поменяется, оно не зависит от другого компонента.

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

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

    Проблема с двусторонним дата биндингом очень простая - систему построенную с активным применением двустороннего биндинга крайне тежело отлаживать. Приведу простой пример. Предположим что у нас есть компонент A и компонент B. У компонента A есть свойство foo которое содержит какую-то строку, компонент B содержит свойство bar и у нас установлено двустороннее связывание между этими двумя свойствами.

    Фреймворк гарантирует нам то, что если одно из этих полей поменяется, он поменяет другое, так что A.foo всегда будет равно B.bar. Вот только это создает такую проблему, теперь оба компонента должны учитывать что значение foo и bar могут поменяться в любой момент, и не понятно кто инициировал изменения. Спокойно можно войти в состояние когда A меняет состояние, B синхронизируется и реагирует и снова меняет состояние, тогда реагирует A, и может быть появляется какие-то другие связанные компоненты. То есть мы можем быстро и просто схватить рекурсию. Если у вас на этой основе построена бизнес логика - то вам будет крайне сложно потом поддерживать эту систему, дебажить ее ад.

    Грубо говоря помимо того что дебажить эту систему становится тяжело, у нас появляется неявная зависимость между A и B, им нужно знать что они могут поменять друг дружку. А все неявное это не очень хорошо.

    Что можно сделать, можно разложить двустороннюю связь на составляющие. Односторонний биндинг из A в B и навесить ивенты если один из компонентов что-то меняет. В этом случае вы всегда можете поставить бряку и точно будете знать кто что поменял. Поддерживать такую систему куда проще.
    Ответ написан
    7 комментариев
  • Как совместить Laravel и Angular?

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

    angular.module('app.prefetchedData', []).constant('prefetchedData', {
        // some serialized data from laravel
    });


    все остальное - вынести в отдельные файлики или бандлить штуками типа webpack.

    Еще относительно правильный способ - экранирование (в blade же есть raw или что-то подобное как в twig?)

    Ну и третий вариант, сродни кастылю и вам должно быть слегка стыдно за его использование - в $compileProvider есть возможность установить как именно обозначается биндинг значений в angular.
    Ответ написан
    Комментировать
  • Как спроектировать связи в MongoDB?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Решил БД карточной игры перевести на MongoDB

    Зачем? Если у вас есть хотя бы 10% вероятность того что между записями появятся отношения/связи, то монга вам не подходит.

    Монгу стоит использовать исключительно для хранения денормализованных данных. То есть обычно все хранят в реляционной базе и потом делают агрегации данных в денормализованном виде что бы ускорить выборки. В этом случае у нас может быть одна база данных в нормализованном виде (mysq/postgres/etc) и много инстансов монги из которой данные только читаются, но ничего не пишется (кроме как агрегации инициированные изменением данных в реляционной бд.

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

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

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

    Для начала разберитесь в реализации и различиях между процессами, потоками и файберами, и тогда большая часть ваших вопросов улетучатся. Например можно начать с вики
    Ответ написан
  • Где можно посмотреть пример готового сайта на Express.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    разбития его по шаблону MVC.

    Uncle Bob - Agility and Architecture. MVC работает только в маленьких масштабах (кнопка, инпут). MVC не является архитектурой приложения.

    но это не дает понимания архитектуры

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

    Где можно посмотреть готовый пример

    github
    Ответ написан
  • Куда сохранять данные - в БД или документ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если хранить это все не в БД.

    БД не допустит конфликтов по записи и сделает это в памяти перед записью на диск, в случае с файлами вам придется баловаться с локами, и что бы сделать это хоть сколько нибудь эффективно вам придется потратить чуть чуть времени.

    другой вопрос какуб СУБД использовать, можно просто в nosql хранить (key-value хранилища) и мэпить на файлы.
    Ответ написан
    Комментировать
  • Каковы плюсы использование jade в разработке одностраничных приложений?

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

    в случае jade мы еще получаем довольно минималистичную разметку, по сравнению с html. Ну и да, обычно его компилят в js и потом уже используют на клиенте.
    Ответ написан
    Комментировать
  • Сколько примерно стоит программирование сайта?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    сильно загибающих цену.


    топовые фриланеры берут $50-$100 в час. Средние - $20-$40 в час. Можно найти студентов которые готовы работать за еду < $10/час.

    Проблема с этим в рисках. Вы можете найти фрилансера который сделаем вам сайт за $200 баксов, но вам может не повести с одним, с другим и в итоге вы потратите $600, у вас будет ужасный результат, срывы сроков и кучу потраченных нервов. Может конечно повести и обойдетесь только срывом сроков и ужасным результатом. Или же вообще случится чудо и только сроки сорвут, но когда придется что-то доделывать могут всплыть косяки предыдущего мастера и вы опять же будете просидать по срокам. Ну и риск того что работу вы так и не увидите так же присутствует.

    Еще есть такая веселая штука как... человек сделал проект, вам понадобилось что-то подправить иии его нет.

    Хотите надежности - платите больше. Вот и все.
    Ответ написан
    2 комментария
  • Какими MySQL менеджером на Ubuntu вы пользуетесь?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    > mysql

    консольный клиент самое то.
    Ответ написан
    5 комментариев
  • Как определиться с фреймворком?

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

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

    Мне не понятно, это разделение фреймворков на группы

    разделение по языку программирования и задачах, которые решает этот фреймворк. Допустим RoR, Sails, Laravel, Symfony, Drango - это фреймворки для организации WEB интерфейса к вашему приложению. И не более.

    Angular, Ember, React, etc - это фреймворки для организации интерактивных WEB приложений на клиенте, на сервере им делать нечего (если не учитывать server-side рендринг для укорения отображения страницы).

    Используют ли их вместе, или только один?

    если вам надо написать интерактивное приложение и API к нему, то логично взять два фреймворка, которые реализуют то что нужно. Так что да.

    Как большое море, в котором видны островки, но целой карты нету

    нарисуйте. В центре ставим WEB, от него ответвляем клиент и сервер, и соединяем все... википедия в этом нам может помочь.
    Ответ написан
  • Каким тегом можно заменить div class="main" в html 5?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://developer.mozilla.org/en/docs/Web/HTML/Element - тут все есть. Для конкретики не хватает пояснения что для вас "главный контент".
    Ответ написан
    Комментировать
  • Какой js-фреймворк больше всего подходит для использования вместе с Ruby on Rails?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все что угодно, если мы говорим о SPA.... ну и все что угодно если мы говорим не о SPA.
    Ответ написан
    2 комментария