• Какой движок выбрать для многофункционального портала?

    samoilenkoevgeniy
    @samoilenkoevgeniy
    Lead Full-Stack Web Developer
    Ну я представляю, как сделать мнимую защиту от парсинга, Но проблема в том, что её нужно постоянно обновлять будет, потому что переписать парсер под ваши условия не составит большого труда, поэтому я бы изначально отразил бы это в переговорах с заказчиком(начальством).
    А по остальному - уже сказали, что подойдут почти все готовые решения.
    Хочется отметить modX revo с его мультидоменностью, возможно стоит его рассмотреть в качестве двигла + есть своя CMF и не плохое общение с базой посредством xpdo
    Ответ написан
    1 комментарий
  • Почему не работает код с использованием Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Могу лишь порекомендовать выкинуть эту книгу и потратить больше чем 60 минут. Ну и да, посматривайте в консоль иногда, angular обычно кидает ошибки если что-то пошло не так.
    Ответ написан
    3 комментария
  • Как узнать уровень фронтенд разработчика?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    @tnorman уровень логики не ниже, чем на серверной стороне?)) Посмешили.
    Фронт-енд разработчик должен разбираться во фронт-енде, а не в PHP — фтопку PHP, вообще никакого PHP.

    Основы построения баз — да, поскольку появится возможность работы с базами напрямую. Понимать принципы общения с сервером и другими компьютерами, знать про HTTP-заголовки, политику безопасности и, в частности, политику происхождения документа. То есть знание XMLHttpRequest, CORS и (хотя бы) представление о WebSocket, WebRTC.

    Разбираться в клиентских технологиях — HTML, CSS, Javascript, SVG, canvas, многочисленные API, описанные в HTML. И если не знать про WebGL и API, то разбираться зачем это и к чему. Построение DOM, CSSOM, понимание узких мест и тенденций. Основные семантические конструкции и микроданные.

    Понимать box model, visual formatting model, stacking context, работу с формами и элементами, медиа-элементами. Знать, что такое кодировка и как жить с разными кодировками при необходимости, хотя это уже редкость.

    ООП соглашусь — наследование, инкапсуляция, понимание роли прототипов и умение их использовать. Знание основных паттернов и парадигм. Добавлю модель событий — просто знание (не жалкие 5 штук, а реальный охват, включая MutationObserver). Ну и регулярные выражения.

    AJAX? Если не брать в расчёт XML-RPC, SOAP, WSDL, то выделять это в отдельный вопрос не стоит. А вот event loop (включая tasks и microtasks), на который завязана модель событий и все асинхронные вызовы знать обязательно. Также быть в курсе, что такое promise, зачем они и как использовать.

    Знать основы проектирования, UX и построения UI. Очень много в работе фронт-енда основано на взаимодействии человека и интерфейса. Непонимание основ UX приводит к неприятным последствиям.

    Что же насчёт Backbone или других конкретных технологий — это вообще дело наживное и акцентировать внимание не стоит. Опыт приветствуется, но не является обязательным. ну только если проект не горит.
    Безусловно, знание технологий разработки нужно, но я бы тогда поставил на Node.js, Grunt/Gulp, AngularJS.
    Ответ написан
    5 комментариев
  • Как правильно организовать работу с условием if?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    В обработчике $("#down_button").click(... убери 2 строчки с .bind и .unbind - и всё будет работать.
    Ответ написан
    4 комментария
  • Почему не работает ajax запрос в ie?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    скорее всего вы столкнулись с кросс-доменными запросами. caniuse.com/#feat=cors

    IE до 9-ой версии включительно не поддерживает CORS.
    Ответ написан
    Комментировать
  • Хранить много данных в объекте js или дергать mysql?

    @dj_raphael
    мы до 10 000 объектов загружали в tablesort и ничего не тормозило. правда полей было всего 10, тк что 600 это мало
    Ответ написан
    1 комментарий
  • Какую выбрать структуру базы данных для каталога с пользовательски изменяемыми полями?

    документо-ориентированные базы данных вам в помощь, гуглить так же можно по запросу noSQL, если все же хочется реляционную базу данных, то смотрите EAV подход к хранению информации

    а так попробуйте для начала реализовать без возможности задавать новые характеристики пользователям, неужели в радиодеталях список характеристик такой огромный и стремится к бесконечности?
    Ответ написан
    Комментировать
  • Зачем в angularjs использовать jquery?

    hell0w0rd
    @hell0w0rd
    Просто разработчик
    Angular - это DI + директивы. Все встроенные директивы просты и под них действительно хватает JQLite. Однако есть куча готовых решений, которые возможно уже используются в проекте. Одна из фишек ангуляра - его можно начать внедрять постепенно.
    Ответ написан
    2 комментария
  • Как скачать свой же шаблон с github и одновременно создать новую ветку?

    AMar4enko
    @AMar4enko
    Меняйте адрес репозитория и вперед
    git remote set-url origin git@github.com:USERNAME/REPOSITORY2.git
    В PHPStorm функции смены адреса репа нет, делайте из коммандной строки
    Ответ написан
    Комментировать
  • Как собрать многоуровневый массив?

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

    $words = explode(' ', 'a b c d'); // сразу представим строку как массив для более удобной работы с оным
    $expectedResult = [
        // 1st level
        [
            'a b c d e',
        ],
        // 2-ой уровень
        [
            'a',
            'b c d e'
        ],
        [
            'a b',
            'c d',
        ],
        [
            'a b c',
            'd'
        ],
        // 3-ий уровень
        [
            'a',
            'b',
            'c d',
        ],
        [
            'a',
            'b c',
            'd'
        ],
        [
            'a b',
            'c',
            'd'
        ],
        // 4-ый уровень
        [
            'a',
            'b',
            'c',
            'd'
        ]
    ];


    каждый уровень представляет из себя комбинации предыдущего:
    то есть для строки "a b c d" первый элемент третьего уровня:
    [
        'a',
        'b',
        'c d'
    ]

    можно составить как конкатенацию первого элементов второго уровня строки 'b c d' с добавлением оторванной части
    ['a'] + ['b', 'c d']
    Следовательно можно упростить алгоритм введя рекурсию постоянно уменьшая сложность. Разделяй и влавствуй как говориться. Поскольку нас теперь заботят только элементы первого и второго уровня алгорим существенно упрощается (можно хоть 666 уровней делать, реализация от этого сложнее не становится. Единственный минус - на большой вложенности можно упереться в лимит по стэку - решается заменой стэка на очередь вызовов но это не здесь и не сейчас).

    Единственное о чем нам стоит подумать - о логике склеивания кусков и условия выхода из рекурсии.

    Допустим у нас 4 слова в строке. Нам нужно собрать все варианты элементов третьего уровня. Для этого нам надо:
    1) ['a'] + ['b', 'c d'] - есть наборы для строк "a" и "b c d"
    2) ['a'] + ['b с', 'd'] - есть наборы для строк "a" и "b c d"
    3) ['a b'] + ['c', 'd'] - есть наборы для строк "a b" и "c d"
    На третьем стэпе мы достигли ситуации, при которой у нас вторая часть строки содержит количество слов равной требуемому уровню (два слова для второго уровня). Собирать комбинации больше неизчего. Сделаем это нашим уловием выхода из цикла.

    Давайте теперь попробуем соорудить функцию, которая будет корректно отрабатывать первый и второй уровни

    function buildLevel(array $words, $level) {
        // с первым уровнем все просто
        if ($level === 1) return [implode(' ', $words)];
        if ($level === 2) {
            // со вторым чуть по сложнее...
            $result = [];
            $chunk = [];
            while(count($words) >= $level) {
                // отделяем первое слово из "строки" и зановим его к первому "слагаемому"
                array_push($chunk, array_shift($words));
                $result[] = array_merge([implode(' ', $chunk)], [implode(' ', $words)]);
            }
    
            return $result;
        }
    
        throw new \Exception(sprintf('Not implemented for level %d for now', $level));
    }


    Проверям работу: ideone.com/ggFzJd
    array(1) {
      [0]=>
      string(7) "a b c d"
    }
    array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(1) "a"
        [1]=>
        string(5) "b c d"
      }
      [1]=>
      array(2) {
        [0]=>
        string(3) "a b"
        [1]=>
        string(3) "c d"
      }
      [2]=>
      array(2) {
        [0]=>
        string(5) "a b c"
        [1]=>
        string(1) "d"
      }
    }

    все ок, только результаты надо склеить.... Но давайте вспомним одно из основных правил программирования! DRY - do not repeat your self. Что мы видим? Одинаковый код! В обработке второго уровня у нас используется код, который мы уже использовали в обработке первого уровня! Причем дважды! Кошмар! Рефакторим...

    $result[] = array_merge(buildLevel($chunk, 1), buildLevel($words, 1));


    Теперь вспомним наш замысел... Мы хотели огранизовать рекурсию, и она родимая у нас и выходит. Функция вызывает самою себя понижая уровень. Сложность решения уменьшается, все хорошо. По такому же принципу добавляем обработку третьего уровня. Попробуйте сначала сами и самостоятельно попробуйте побороть проблему "склейки" результатов третьего и второго уровня. Зачем просто унифицируйте решения. Для того что бы поставить логическую точку, я все же предоставлю готовое решение, но постарайтесь все же сами сделать сначала:

    ideone.com/fwS4u6 - к сожалению времени не так много... может позже доделаю склейку. Пока так. Суть надеюсь будет ясна. Если кто допилит - буду рад.
    Ответ написан
  • Нужен наставник по веб-программированию, поможете?

    FanKiLL
    @FanKiLL
    Вы хотите найти человека, который пожертвует свои допустим 2 часа, вместо того, чтобы пойти в ту же качалку или потратить это время на свой личный проект - он будет обучать вас?
    То есть обучать вас по скайп показывать как делать? Такое дорого стоит.
    Но, если вы найдёте такого альтруиста - то ок.

    Могу предложить, раз вы знаете хорошо css, js, html - я вас беру в довольно таки большой проект - даю задачи, говорю какие фрейморки юзать например getbootstrap.com и fortawesome.github.io/Font-Awesome/icons - будете набивать руку на реальном проекте, будет редизайн - ваш дизайн если будет на уровне будет главным. Потом сможете указать проект в портфолио.
    Ответ написан
    Комментировать
  • Как разделить работу сервера и клиента с точки зрения безопасности?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Считайте и на сервере и на клиенте, чтобы постоянно не гонять между ними результаты, но иногда сравнивайте. Если клиент не делает запросы на сравнение, но другие запросы делает, или его данные отличаются от серверных, то он читер - блокируйте. Нода не очень хороша в долгих расчетах, но если формула очень простая, и вам не нужно просчитывать миры с точностью до пылинки, то проблемы не будет. Для клиент-серверного взаимодействия используйте websocket (двусторонний обмен) и Server-sent Events (односторонняя трансляция серверных событий на клиента, но много проще в реализации и надежности). При обмене клиента и сервера добавьте немного криптографии, например, постоянно изменяющийся код, которым подписывается каждое сообщение при обмене между клиентом и сервером. Код может зависеть от порядкового номера сообщения (синхронные счетчики должны быть у клиента и сервера), от предыдущего сгенерированного случайного числа, присланного сервером, от шага в игре, и этот код можно примешивать к контрольной сумме сообщения, приходящего с клиента (это чтобы было сложно написать эмулятор, прикидывающийся клиентом).
    Ответ написан
    Комментировать
  • Что такое git checkout?

    korobochkin написал основную функцию команды, могу еще добавить, что git checkout отменяет изменения файла, достаточно прописать git checkout <Имя файла> и он будет возвращен в первичное состояние коммита
    Ответ написан
    Комментировать
  • Что нужно знать Front-end разработчику в 2014 году?

    gelevanog
    @gelevanog
    javascript developer
    EcmaScript 6
    Ответ написан
    Комментировать
  • Как быть дальше с обучением веб-разработке?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Учите JS.
    Он применяется и в серверных и в клиентских технологиях.
    js/jquery (web), node.js(server), node-webkit (stand-alone app), Unity3D (game-dev)
    Ответ написан
    3 комментария
  • Как запретить пользователю root доступ в конкретную БД?

    @andymitrich
    Software Developer
    Мой вам бесплатный совет - завязывайте с доступом к базам под рутом, черевато это.
    Ответ написан
    Комментировать
  • Переменные в шаблоны передаются?

    ivankomolin
    @ivankomolin
    В angular в подключаемом шаблоне scope изолирован от основного scope.
    Поэтому необходимо добавить нужные переменные в scope подключаемого шаблона.
    Например так:
    (scope: {user: '=user'}, templateUrl: 'part1.html')
    Ответ написан
    1 комментарий