• Как сделать одну версию Node.js для всех пользователей?

    werevolff
    @werevolff
    Есть безумное предположение, что npm install npm обновит npm у пользователя.
    Ответ написан
  • Как отследить с помощью Google analytics клик по кнопке формы, которая работает на angular?

    werevolff
    @werevolff
    У аналитики же есть методы отслеживания эвента: Документация

    Однако, есть некоторые моменты, которые следует учитывать. Например, если страница перезагружается после отправки формы (интересно, зачем тогда нужен ангуляр), то событие может банально не успеть отправиться. Если бы было более детальное описание проблемы, то можно было бы попробовать понять в чём проблема. А так, у вас странное описание проблемы: "тщетно бытие". Полагаю, что правильный ответ на такой вопрос: пистолет в сливном бачке.
    Ответ написан
  • Кириллица в url Python 3, как преобразовать в url?

    werevolff
    @werevolff
    from urllib import request
    from urllib.parse import quote
    
    def poiskpers(nick):
        geourl = "http://ru.wikipedia.org/wiki/{0}".format(quote(nick))
        respornse = request.urlopen(geourl)
        content = respornse.read()
        return content
    
    print(poiskpers("василий"))
    Ответ написан
  • Строительство провайдера 2016, актуально?

    werevolff
    @werevolff
    Я как клиент готов платить большие суммы за хорошую связь. Однако, среди мелких компаний в моём регионе нормального соотношения качества/цены нет. Поэтому, пользуюсь услугами старого проверенного провайдера. Какие проблемы можно отметить у мелких и относительно новых компаний? Они в 100% случаев не имеют возможности реализовать свои обещания. Несколько лет назад рынок захватывала Yota. Сегодня в регионах это один из самых выгодных по цене операторов при почти полном безлимите для смартфона и при её пакетах минут + бесплатные SMS. Но качество - дрянь! Охват территории - дрянь. Интернетом от Yota пользоваться можно только по городу. В деревню с модемом бесполезно ехать. Аналогичная ситуация у всех остальных новаторов рынка. Часть идей превращается в конкурентное преимущество, часть - выкидывается на помойку. И люди к этому уже привыкли, так что не берусь оценивать потенциал идеи. Как по мне, то я бы охотно перешёл к новому оператору, если бы он сразу предоставил нормальный сервис. Именно техподдержку. Если бы меня устроило качество и тарифы. Но вот в чём вопрос: если вы в Москве, то там может быть иная ситуация. Как и в Питере. Я говорю только за регионы.
    Ответ написан
  • Что значат XML атрибуты через точку?

    werevolff
    @werevolff
    Полагаю, что это ошибка при формировании документа. Например, предположим, что у билдера есть метод setAttr, применимый к ноде. Есть нода PART.

    node.setAttr(getAttrNameFromDB(), "CHAR");

    В базу данных пихаем значение "<b>itsPART.CHAR.CHAR_ID</b>". PROFIT!!!
    Ответ написан
  • Выбор фреймворка для админ панели?

    werevolff
    @werevolff
    Не понимаю вашей логики:

    1. У вас в приоритете быстрый старт, а вы рассуждаете какая технология умрёт, а какая нет.
    2. У вас проекты на jQuery, вы обзорно знаете ангуляр, а руки уже тянутся к реакту и эмбер.

    keeping_records_management_simple.jpg

    Получается, что в первом пункте вы сами себе усложняете жизнь, а во втором - сами себе противоречите. Почему вы считаете, что эмбер и реакт не потянут за собой кучу зависимостей ноды? Вам нужно простейшее решение для организации кода с возможностью начать одним файлом? Это Backbone.js. Однозначно и без альтернатив. Считаете, что им пользуются одни староверы? Пишите на втором ангуляре. Из приведённых вами движков проблем с интеграцией, на вскидку, не должно возникнуть разве что у бэкбона. Так что вам что ангуляр, что эмбер - один лес.
    Ответ написан
  • Почему глючит select в angular при выборе?

    werevolff
    @werevolff
    Потому, что цена выступает идентификатором. Вот рабочая версия:
    plnkr.co/edit/5BYQ1frKklCpvMDzilRa?p=preview

    function OrderFormController($scope){
      
    /*Массив отверстий*/
    $scope.holes = [
    {id: 208,group: "Диаметр отверстия 5-10мм",name: 'Толщина 4-6',price: 60,active:false},
    {id: 209,group: "Диаметр отверстия 5-10мм",name: 'Толщина 8',price: 90,active:false},
    {id: 210,group: "Диаметр отверстия 5-10мм",name: 'Толщина 10',price: 140,active:false},
    {id: 211,group: "Диаметр отверстия 5-10мм",name: 'Толщина 12',price: 140,active:false},
    {id: 212,group: "Диаметр отверстия 5-10мм",name: 'Толщина 15-19',price: 190,active:false},  
    {id: 213,group: "Диаметр отверстия 11-16мм",name: 'Толщина 4-6',price: 65,active:false},
    {id: 214,group: "Диаметр отверстия 11-16мм",name: 'Толщина 8',price: 100,active:false},
    {id: 215,group: "Диаметр отверстия 11-16мм",name: 'Толщина 10',price: 190,active:false},
    {id: 216,group: "Диаметр отверстия 11-16мм",name: 'Толщина 12',price: 190,active:false},
    {id: 217,group: "Диаметр отверстия 11-16мм",name: 'Толщина 15-19',price: 210,active:false}
    ];
    /*--------*/
      
    /*Выбор отверстия*/
    $scope.hole = 0;
    $scope.total_hole = function () {
      var t_h = $scope.hole.price;       
      return t_h;
    }
    /*--------*/  
      
    }


    <div ng-controller="OrderFormController" ng-app="">
          <select ng-model="hole" ng-options="value.name group by value.group for value in holes" class="form-control input-md">
            <option value="">--- Не выбрано ---</option>
          </select>
          <p> Цена: {{total_hole()}} </p>
        </div>
    Ответ написан
  • Как пофиксить проваливающийся тест (Django Rest Framework)?

    werevolff
    @werevolff
    from rest_framework.test import APITestCase

    class AccountTests(APITestCase):
    def test_endpoint(self):
    url = reverse('some_url')
    response = self.client.get(url)

    Сорри что не отформатировал: пишу со смарта. Насколько я понимаю, приведённый мной код вылетит с ошибкой no reverse match если не передать id. И, как я понимаю, в вашем примере именно id не хватает для вьюхи. Однако, я не видел, чтобы вьюху вот так просто дёргали за as_view. Эта ф-ия возвращает, насколько помню, другую ф-ию (dispatch?), которой передаётся request и пачка кваргов (если заявлено). Так что правильно тут либо обращаться по reverse, либо делать MyView.as_view()(request, *args, **kwargs).
    Ответ написан
  • Как стартовать приложение на AngularJS только после загрузки стартовых данных с сервера?

    werevolff
    @werevolff
    А оно надо? Делаем в контроллере $scope.dataReady = false. Основной контейнер в HTML ng-show="dataReady". После загрузки данных, переключаем $scope.dataReady. Вешаем

    $scope.$watch('dataReady', function(newVal, oldVal) {
        if (newVal && !oldVal) {
           // А тут всё, что должно выполниться после загрузки данных. Но лучше вызвать отсюда сигнал.
        }
    })
    Ответ написан
  • Почему юнит-тесты PHP запускают из командной строки?

    werevolff
    @werevolff
    Зачем вам нужны юнит-тесты, если вы не понимаете что это такое?

    Тесты в PHP запускаются в консоли по той же причине, что и во многих других языках. Надо понимать, что PHP начинал не как настоящий язык программирования, а как шаблонизатор для cgi приложений. Сейчас PHP представляет собой язык программирования. То что вы используете его в качестве шаблонизатора на своём маке, чести вам не делает.

    И, да, мампы, лампы и вампы - не лучший вариант для программистов PHP, которым нужны юнит-тесты. Попробуйте Docker или Vagrant.

    И ещё маленькое дополнение: PHP имеет низкий порог вхождения. Это означает, что большинство простых пользователей компьютера с минимальным трудом смогут создать на нём страничку. Им юниттесты точно не нужны. Как и большинству разработчиков, которые делают сайты на CMS или фреймворках. А тем, кому реально нужны тесты, не нужен WebUI для них.
    Ответ написан
  • Выучил базовые основы Python 3. Куда копать дальше?

    werevolff
    @werevolff
    Если для Web, то Django + Scrapy. На scrapy можно сразу начинать делать парсеры. Парсеры нужны очень часто, и можно сразу брать проект и делать. Для десктопа и кроссплатформенности - не знаю. Возможно, что Kivy.

    Да, чуть не забыл: Peewee. Можно и SQLAlchemy, но pewee выглядит очень изящно.
    Ответ написан
  • Как правильно спроектировать базу и составить SQL запросы?

    werevolff
    @werevolff
    Если это не учебное задание, используйте, пожалуйста, ORM. Сейчас никто не работает с голым SQL на таких задачах. Потому что, во-первых, трудно разбираться с чужой реализацией шаблонных механизмов открытия/закрытия соединения, обращений к таблицам. Во-вторых, следует решать проблемы проектирования данных, а не реализации их записи в БД. Если задача учебная, то схема стандартная и мне нравится. Всё правильно нарисовано. Реализуется так же, как и любая ORM:

    1. Создаём класс коннектора БД. Описываем в нём методы прямой записи в БД и удаления записей.
    2. Создаём классы Comment и Category. Пусть у них будут методы get, update, delete, create. например get(id) получает из коннектора raw с данными и преобразует в ассоциативный массив. Там же реализуется получение полей связанной категории. Ну и метод delete у Comment запускает метод delete у Cаtegory, удаляя и Comment, и Category, и cat_id.
    Ответ написан
  • Как поступить с заказчиком который не платит?

    werevolff
    @werevolff
    50% - абстрактная цифра. Необходимо показать менеджеру работу. Но не код. Т.е. на доступном серваке разворачиваете код, кидаете ссылку, сверяете по пулу задач/ТЗ, какие пункты сделаны. Если полноценно ни одного - какие требования оплаты вообще могут быть? Если там реально наберётся процентов 40 сделанных тасков, то можно обсудить условия оплаты и предоставления кода. Но с такими прокатами я бы лично не стал работать дальше в этом проекте. Если только ребята согласятся поднять оплату и заплатить сразу 50% от новой суммы, а не аванс от старой. И дело не в том, что это хорошо или плохо. Просто разработчик и заказчик берут на себя обоюдные обязательства. Искать нового программиста для доделки 60% проекта - это гарантированное увеличение бюджета и трата времени. Если люди реально готовы платить, а не обманывать, они вам предложат такое увеличение при условии адекватной демонстрации с вашей стороны.

    Резюмирую:

    1. Поднимаете проект на своей стороне.
    2. Проводите демонстрацию.
    3. Отмечаете закрытые пункты заказа.
    4. Ставите заказчика перед фактом: "исходник он получает при условии оплаты обещанного аванса, но при таком отношении, после передачи кода вы уходите из проекта". Основание: вы не получили пока ни копейки. Договора нет. Со стороны заказчика устное соглашение не соблюдалось и нет гарантий, что будет соблюдаться. Если заказчик настаивает на исполнении обязанностей, говорите, что отдадите код после подписания договора. Юридически, если нет договора, факт оплаты подтверждает сделку. Т.е. договор или оплата. Предпочтительно - оплата.
    5. Если сошлись на оплате, и заказчик просит пересмотреть ваш уход из проекта, отказываетесь до тех пор, пока заказчик не поднимет ценник. Сами ищите другой проект. Не факт, что заказчик пойдёт на уступки. Если второго проекта не будет, а заказчик согласится поднять цену, пусть доплатит сразу так, чтобы в сумме вышло 50% от общей суммы. Завершаем проект, радуемся.
    Ответ написан
  • Как на виртуалке под Vagrant выставить права для записи в каталог?

    werevolff
    @werevolff
    Я использую для provision ansible скрипт. Но можно использовать и bash. Суть вопроса: пользователь vagrant имеет возможность исполнять sudo команды без пароля. Vagrant даёт возможность запустить bash код или Ansible playbook. Вывод: создаём bash файл, в котором прописываем команды chown и chmod на требуемые директории. Profit!!!

    config.vm.provision, type: "shell", run: "always" do |s|
      s.path = "pdrovision.sh"
      s.privileged = false
      s.keep_color = true
    end


    И в provision.sh:

    sudo chmod 777 /vagrant/workspace

    За работоспособность vagrantfile с идентичным кодом не ручаюсь, поскольку тут у каждого свой подход. Я использую .define с объявлением имени виртуальной машины, у автора подход из примера не понятен. Но суть в том, чтобы запустить provision выполнением bash скрипта.

    Другой вопрос в том, что операционная система не позволяет сменить права. Но если это mac, то в ней самой должны быть команды chmod и chown. Я так понимаю, что проекты лежат в папке /some/path/to/Projects. Пользователь системы, скажем, Vanya. Отсюда, должна работать команда chown -R Vanya /some/path/to/Projects (в Маке).
    Ответ написан
  • Как упростить условие?

    werevolff
    @werevolff
    if (id === 100) {
        (type === 'off') ? ion.sound.play('off') | ion.sound.play('on');
        arrSound['v1'] = (arrSound['v1'] !== 1) ? 1 : 0;
    }
    Ответ написан