• Как распределить бюджет гранта?

    AMar4enko
    @AMar4enko
    А можно купить оборудование и дико сдать его в аренду :D
    Ответ написан
    Комментировать
  • Как лучше сделать rest api middleware?

    AMar4enko
    @AMar4enko
    А как ваш вопрос относится к AngularJS?
    На чем вы пишете middleware? Express?
    Ответ написан
  • Как в angular отменить ошибку серверной валидации?

    AMar4enko
    @AMar4enko
    Логично предположить, что в момент нажатия кнопки "Отправить" мы принимаем введенные данные за отправную точку дальнейшего процесса, следовательно я бы всем полям поставил $dirty = false. После того, как с сервера получили ошибки - проставляем их в соотв. инпуты, отмечаем серверную невалидность.
    Как только пользователь меняет невалидное поле, оно становится $dirty, что сообщает нам, что с этого поля можно убрать серверную невалидность.
    У меня работает по такому принципу.
    Ответ написан
  • Почему не преобразовываются html сущности через html_entity_decode?

    AMar4enko
    @AMar4enko
    А зачем вам при записи в базу их кодировать, зачем обезвреживать код для записи в БД?
    Обезвреживать надо при вставке в код страницы, а в базу можно вставлять хоть черта лысого - по-моему сегодня уже не осталось DBAL которые данные не эскейпят. А ваш вопрос, насколько я понял, относится именно к эскейпу.
    Ответ написан
    4 комментария
  • Интересные проекты на Ruby?

    AMar4enko
    @AMar4enko
    Открывайте гитхаб и ищите ruby-репозитории с большим количеством звезд.
    Можете десктопное приложение с wxRuby написать https://github.com/Hanmac/rwx
    Ответ написан
    Комментировать
  • Meteor.js: почему дублируются элементы?

    AMar4enko
    @AMar4enko
    Вот поэтому никак не могу себя заставить метеором заняться - как вот на такие вопросы ответы искать? Жить на их форумах?
    Ответ написан
    Комментировать
  • Angular - promise в цикле, и как получить данные при каждой итерации?

    AMar4enko
    @AMar4enko
    Эм. Я правильно понял, что у вас N страниц, вам нужно для всех скопом забрать данные, но при этом как только приходят данные с одной из страниц, сразу их отдавать в контроллер?
    Тогда resolve вам не подойдет - вам нужно дергать сервис напрямую в контроллере.
    У $q.defer() есть дополнительный метод notify.
    Если честно, я предполагал, что $q.all после резолва каждого промиса делает notify в комбинированный промис - так было бы логично. Увы, это не так. Поэтому можно сгородить свой велосипедик, типа этого codepen.io/AMar4enko/pen/wBKQOy

    Но я вижу еще одну проблемку у вас - никто не гарантирует, что страницы придут в запрошенном порядке. Поэтому вам надо дополнительную логику сделать, чтобы уведомлять о получении данных по порядку, в принципе это ерунда.
    Ответ написан
  • Как получить File или Blob object, зная только URL?

    AMar4enko
    @AMar4enko
    Вас в гугле забанили?
    stackoverflow.com/questions/11876175/how-to-get-a-...
    Ответ написан
    Комментировать
  • Как найти круг на изображении с помощью js?

    AMar4enko
    @AMar4enko
    Ну если прямо руками, то можно можно так (только что придумал):
    - начиная с одного из углов берем пиксель, если он белого цвета, то выкидываем, берем следующий.
    - если он не белого цвета, то находим ближайший пиксель этого же цвета слева и справа от него, получаем ширину линии
    - встаем на середину линии и от нее идем вверх и вниз, пока и там и там не дойдем до белого цвета, каждый раз определяя ширину линии по этой фигуре
    - у круга внизу и вверху ширина линии маленькая, а посередине большая
    - у квадрата ширина линий постоянная
    - у треугольника с одной стороны большая, с другой маленькая
    Ответ написан
    Комментировать
  • Отличия service от factory?

    AMar4enko
    @AMar4enko
    Вот хорошая статья. habrahabr.ru/post/190342
    Ответ написан
    Комментировать
  • Как скормить Angular динамические данные из Ajax.jquery?

    AMar4enko
    @AMar4enko
    Это что касается компиляции и использования шаблонов "на лету"
    codepen.io/AMar4enko/pen/azvEXw

    В остальном много вопросов по архитектуре например, что делает $scope.translate в контроллере, зачем в целом нужен контроллер language и.т.д.
    Ответ написан
    Комментировать
  • Как выводить записи из таблицы БД MySQL без перезагрузки страницы?

    AMar4enko
    @AMar4enko
    Если принять за "PHP" его классическое использование в стеке веб-сервера, то "правильно" - никак.
    Правильная реализация - вебсокеты или server-sent events. Все остальное это полный ахтунг по одной простой причине - при более-менее реальных нагрузках нужно минимизировать затраты (CPU и память) на осблуживание одного соединения. В случае PHP это невозможно.
    Обычно такие вещи реализуются на асинхронных фреймворках. Именно поэтому сейчас realtime-web так бурно развивается с приходом node.js.
    Можете попробовать на phpDaemon что-нибудь наваять.
    Ответ написан
    Комментировать
  • Как получить Reference Field из MongoDB с помощью Flas\MongEngine?

    AMar4enko
    @AMar4enko
    Эм, я в Питоне ни бум-бум, тем более в MongoEngine, но по аналогии с другими системами - user[0].books вам и вернет ваши книги, самостоятельно выполнив запрос, который вы руками по id выполнить пытаетесь.
    Ответ написан
  • Как возможно реализовать такой sql селект?

    AMar4enko
    @AMar4enko
    LEFT JOIN hw_10 ON hw_10.subject_id IN [schedule.`first`, schedule.`second`, schedule.`third`, schedule.`fourth`, ...]
    Ответ написан
  • У меня не работает парочка вещей на angular, как пофиксить?

    AMar4enko
    @AMar4enko
    Насчет того, что у вас при нажатии "Заказать" добавляется в массив, но не пересчитывается сумма заказа:
    У вас mainController объявлен на body, а потом объявлен в my-directive.

    В начале mainController вы в скоупе создаете новую ссылку на массив orderList, totalPrice() вызывается на скоупе второго экземпляра mainController, в то время как добавление товара происходит в массив, объявленный в скоупе первого экземпляра mainController, а это два разных массива.

    А убрать из директивы объявление контроллера вы не можете, потому что для директивы запрашиваете изолированный скоуп, в который само собой функция totalPrice() из скоупа, объявленного на body, не попадает.

    Вам надо основательно разобраться сначала, как работаю скоупы в AngularJS, после чего узнать про controller as.

    P.S. По архитектуре приложения ничего говорить не буду, не просили.

    Вы столкнулись с проблемой из-за того, что захардкодили в контроллерах бизнес-логику. Это очевидный архитектурный недостаток. После его устранения у вас все начнет работать как нужно. Вам нужно вынести работу с корзиной в отдельный сервис:
    module.service('Cart', function($rootScope, localStorageService){
        var 
            currencies = {rub: 10800, usd: 1}, 
            cartTotal = 0, 
            cartItems = localStorageService.get('zakaz') || [];
    
        function updateCartTotal(){
            var _total = 0;
            angular.forEach(cartItems, function(item){
                _total += item.price;
            });
            cartTotal  = _total;   
        }
    
        this.getTotal = function(currency){
            var currency = currency || 'usd';
            return cartTotal * (currencies[currency] || 1);  
        }
        this.addItem = function(item){
            cartItems.push(item);
            updateCartTotal();
            $rootScope.$broadcast('cart:updated', {cartSize: cartItems.length});       
        }
        this.removeItem = function(item){
            var idx = cartItems.indexOf(item);
            if(idx > -1){
                cartItems.splice(idx,1);
                updateCartTotal();
                $rootScope.$broadcast('cart:updated', {cartSize: cartItems.length});       
            }
        }
        this.isItemAddedAlready = function(item){
            return cartItems.indexOf(item) > -1; 
        };
        this.clear = function(){
            cartItems.length = 0;
            cartTotal = 0;
            $rootScope.$broadcast('cart:updated', {cartSize: cartItems.length});   
        }
        this.getItems = function(){
            return cartItems;
        }
    });

    Замечание: сейчас для поиска элемента в массиве ипользуется indexOf.
    Он будет работать только когда корзина будет инициализироваться пустым массивом, потому что в этом случае при добавлении и удалении элементов будут использоваться одни и те же ссылки и равенство ссылок будет прокатывать. Для нормальной работы нужно либо писать костыль для поиска по ID, либо использовать underscore или lodash.

    Теперь вы в контроллеры подключаете этот сервис через DI и везде, где нужно, используете его методы.
    Для того, чтобы обновлять сумму и размер корзины делаете:
    $scope.$on('cart:updated', function(event, info){
        $scope.cartTotal = Cart.getTotal(currency);
        $scope.cartSize = info.cartSize;
    });

    Мы бы могли сохранить ссылку на функцию сервиса у себя в контроллере и в шаблоне вызывать ее, типа {{getTotal(currency)}}, но так делать не стоит, потому что это лишний нагруженный watcher. Сейчас вы его, конечно, не почувствуете, но помнить о таких моментах надо всегда. Поэтому мы подписались на событие корзины и когда корзина изменяется, вытаскиваем нужную информацию.
    Перепишите код с использованием сервиса, и увидите как он изменится в лучшую сторону. Ну а про удобство автоматизированного тестирования пока, думаю, смысла нет.
    Ответ написан
  • Как определить название формы с которой был сделан клик?

    AMar4enko
    @AMar4enko
    $('.selector-for-multiple-forms').on('submit', function(event){
        var jqForm = $(this), msg = jqForm.serialize();
        event.preventDefault();
        ... 
    });

    Каждая из форм, отправка которых должна обрабатываться таким образом, должна иметь класс .selector-for-multiple-forms или можете придумать любой удобный вам селектор.
    Ответ написан
    Комментировать
  • Как реализовать сетку картинок с разным размером на CSS?

    AMar4enko
    @AMar4enko
    Самое простое решение - разбить на N колонок, раз у вас ширина картинок одинаковая.
    Ответ написан
    Комментировать
  • Как сделать код рабочим для promise Angular?

    AMar4enko
    @AMar4enko
    Вы бы написали, как insurances в скопе появляются.
    Может быть достаточно $scope.insurances = [];, может быть стоит получение данных вынести в resolve-секцию. Вариантов уйма, у всех свои плюсы и минусы.
    Ответ написан
  • Как взять random из промежутка?

    AMar4enko
    @AMar4enko
    Обычно rand выдает числа от 0 до 1.
    Если так, то 10000 + rand()*80000
    Ответ написан
  • Как обезопасить соединение между клиентом и серверов (RESTful API)?

    AMar4enko
    @AMar4enko
    Самый главный вопрос - вы же используете HTTPS?
    Без него все ваши хеши можно выловить сниффером трафика.
    Что подразумевается под клиентом? Браузер напрямую на ваш сервер? Браузер через сервер стороннего сайта на ваш сервер?
    Если браузер, то ваши хеши будут в открытом виде. Можно их угнать и завалить ваш API мусором.
    Ответ написан