• Как настроить UFW на сервере, где использую только OpenVPN?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Посмотрите настройку OpenVPN здесь
    У вас, скорее всего, причина в том, что надо разрешать протокол udp:
    sudo ufw allow 1194/udp
    У меня на VPS с OpenVPN такие порты ufw открыты:
    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere                  
    443/tcp                    ALLOW       Anywhere                  
    443/udp                    ALLOW       Anywhere                  
    XXX22/tcp                  ALLOW       Anywhere                  
    XXX22/udp                  ALLOW       Anywhere                  
    1194/udp                   ALLOW       Anywhere                  
    OpenSSH (v6)               ALLOW       Anywhere (v6)             
    443/tcp (v6)               ALLOW       Anywhere (v6)             
    443/udp (v6)               ALLOW       Anywhere (v6)             
    XXX22/tcp (v6)             ALLOW       Anywhere (v6)             
    XXX22/udp (v6)             ALLOW       Anywhere (v6)             
    1194/udp (v6)              ALLOW       Anywhere (v6)

    Но помимо портов, есть с ufw ещё один момент (с файлом /etc/ufw/before.rules), который описан в статье по ссылке.
    Ответ написан
    2 комментария
  • Что необходимо для определения азимута в телефона?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Азимут вычисляется на основе данных, получаемых через стандартное API от датчиков устройства: https://developer.android.com/guide/topics/sensors...
    Ответ написан
    Комментировать
  • Почему не добавляет класс?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Ваш код:
    // setup autocomplete function pulling from currencies[] array
      $('#autocomplete').autocomplete({
        lookup: currencies,
        onSelect: function (suggestion) {
        	console.log(suggestion);
          var top = $('#'+ suggestion.data).offset().top - 10;
          $('html,body').stop().animate({scrollTop: top}, 500);
          $('#autocomplete').val('');
    
          var scroll = $(window).scrollTop();
          if (scroll) {
              $("#"+ suggestion.data).addClass("active");
              setTimeout(function() {
                $("#"+ suggestion.data).removeClass("active");
              }, 7000);
    
          }
        }
      });

    В чём сакральный смысл получения значения $(window).scrollTop() и условия, основанного на этом значении? Не работает из-за этого.
    А вот это "через раз" - работает только когда у вас страница хоть сколько нибудь проскроллена (больше чем на 0 пикселей)
    Ответ написан
    1 комментарий
  • Почему не получаю json-объект?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Как научиться работать с API VK:
    • научиться читать
    • научиться читать документацию
    • научиться читать документацию к API VK
    • перестать заваливать тостер базовыми вопросами о VK API


    https://vk.com/dev/photos.getWallUploadServer :
    Возвращает адрес сервера для загрузки фотографии на стену пользователя или сообщества.
    После успешной загрузки Вы можете сохранить фотографию, воспользовавшись методом photos.saveWallPhoto.
    Параметры:
    group_id идентификатор сообщества, на стену которого нужно загрузить фото (без знака «минус»).
    целое число
    Результат:
    После успешного выполнения возвращает объект с полями upload_url, album_id, user_id.
    Ответ написан
    7 комментариев
  • Посчитать количество файлов в сетевой папке. Написал программу, но она не видит путь до папки, что не так?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    ' \\slieshare\Reports\отчеты по "бугагашеньке"'
    • slieshare - не опечатка ли в slideshare
    • зачем пробел в начале перед двумя слэшами?
    • если не поможет перечисленное выше - поиграйтесь со шрифтами с экранированием пробелов и/или кавычек
    Ответ написан
    Комментировать
  • Python. Format. Как добавить нулей и выровнять?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    "{0:>10}".format("{0:>08b}".format(3))
    Для улучшения читабельности можно сделать так:
    binary_str = "{0:>08b}".format(3)
    aligned_str = "{0:>10}".format(binary_str)
    Ответ написан
    Комментировать
  • Чем бекапить все базы Postgres без прерывания доступа к сервису?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Стандартная утилита pg_dump
    • есть везде, где есть Postgres
    • не блокирует БД: приложения могут читать/писать данные, но запросы на изменение структуры, скорее всего, будут ждать окончания бэкапа
    • восстанавливает настолько быстро, насколько быстро выполняются обычные SQL-запросы.
    Ответ написан
    Комментировать
  • Как отобразить архив статей?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    К сожалению, на одну и ту же модель нельзя зарегистрировать более 1 класса админки.
    Есть вариант с прокси-моделью, посмотрите здесь. Там даже тема схожая - публикации.
    Ответ написан
    Комментировать
  • Почему не получается импортировать JSON?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    import json
    jsdata = '{"name": "Jack"}'
    data = json.loads(jsdata)
    print(data['name'])

    • Во-первых, ваш json невалиден. В JSON строже с кавычками, чем в python или php - там для обрамления строковых литералов разрешается использовать только двойные кавычки. Поэтому инвертируем кавычки во второй строчке
    • json.load - это метод загрузки из файла. Для парсинга из строки надо использовать json.loads
    • Последняя строчка - у вас неправильное обращение к ключу словаря
    Ответ написан
    Комментировать
  • В чем ошибка при внесении данных в разметку?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Закройте вторую скобку:
    print(html.format("Title list", "Recveste"))
    С ней всё работает
    Ответ написан
    3 комментария
  • Что еще добавить в юнит тест для функции сортировки?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    • в setUp создайте несколько объектов Slide
    • добавьте в вызов
      self.client.post(reverse("article:article_sorting"), follow=True)
      json, который сменит сортировку этьм объектам
    • добавьте ещё одну проверку, помимо статуса (и, возможно, json ответа), что объекты Slide сменили свою сортировку
    Ответ написан
    8 комментариев
  • Django Rest Framework ManyToMany?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    И как сериализатор должен догадаться о том, из какого поля модели брать значение для сериализации, если названия полей сериализатора и модели у вас отличаются?
    class PostSerializer(serializers.ModelSerializer):
        categories = CategorySerializer(many=True, read_only=True, source='article_category')
    ...
    Ответ написан
  • Как при помощи @property получить @property.property?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Метод, реализующий свойство size, должен возвращать что-то (объект другого класса, например), в свою очередь реализующее через свои свойства нужные вам фичи.
    Ответ написан
    4 комментария
  • Есть ли поле у класса?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Если брать ваш код и сравнивать Base2.value и MyClass.a, то в первом случае - это атрибут класса, во втором случае - атрибут экземпляра класса

    Вопрос (self.a = значение ) означает что у класса MyClass ТЕПЕРЬ есть поле а

    Не совсем. Если вы хотите сделать a атрибутом класса, нужно объявлять его так же, как Base2.value
    Ответ написан
    3 комментария
  • Как задать permission для собственного метода?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    В вашем особом случае можно применить декорирование прям в urls.py, как показано вот здесь, только декоратором будет permission_required

    Но вообще, такой подход - запихать всё в одну вьюху и какую-то логику вынести в urls.py - забраковал бы :)
    Ответ написан
  • Django. Как зарегистрировать посетителя (гостя), после отправки формы заказа?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Если оставить за бортом спорные моменты в таком процессе, то:

    Автоматическое создание пользователя
    У стандартного UserManager'а есть метод create_user. Если у вас переопределённая модель пользователя, проследите, чтобы UserManager для вашей модели был актуальный. Если вы меняли поля, которые фигурируют в этом методе, возможно, вам потребуется создать свой UserManager на основе стокового.

    Аутентификация пользователя
    Залогинить пользователя, на удивление, совсем легко, есть функция login

    Ну а редирект (на ЛК) после создания пользователя и его успешного логина вы, наверное, знаете как сделать.
    Ответ написан
  • Как перевести БД MySQL на БД PostgreSQL?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Если никаких фич, кроме непосредственно таблиц и данных в них, вы не используете (хранимых процедур, триггеров и т.п.), то, насколько я помню, в phpMyAdmin есть функция экспорта, в которой можно указать, синтаксис какой СУБД использовать для результирующего дампа в SQL. И Postgres там был.
    UPD:
    Посмотрел в демо phpMyAdmin, ошибался, нет там экспорта в формат постгреса
    Попробуйте посмотреть что-нибудь из этого списка
    UPD2:
    У стандартной команды mysqldump есть опция --compatible, где можно указать значение postgresql: https://dev.mysql.com/doc/refman/5.7/en/mysqldump....
    Ответ написан
    Комментировать
  • Зачем нужна сериализация?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Сериализация:
    • это обобщённый процесс для структур языка программирования.
    • нужна для любого взаимодействия в системе, выходящего за рамки передачи данных в текущем скрипте: даже если вам кажется, что она не используется - это не так, она всё равно используется под капотом.

    Сериализация гарантирует (для поддерживаемых структур данных), что после процесса сериализации/десериализации вы получите те же самые структуры данных.

    Не будь её, вам бы понадобилось вручную создавать свои протоколы и методы перевода данных в вид, пригодный для передачи куда-либо.
    Ну и, модуль pickle - это встроенная реализация сериализации, но в то же время - одна из многих. Вы можете использовать, например, json, или yaml. Что угодно, что переведёт обычные структуры данных в пригодную для передачи форму (строку, байтовая строка) и вернёт (десериализует) обратно.
    Ответ написан
    7 комментариев
  • Можно ли глобально запретить логирование картинок?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Попробуйте поиграться с map и access_log в контексте http, а не server.
    В документации к директиве access_log есть такой пример:
    map $status $loggable {
        ~^[23]  0;
        default 1;
    }
    
    access_log /path/to/access.log combined if=$loggable;

    Возможно, получится добиться условного логирования в зависимости от переменной $uri
    P.S.: if в access_log появился в nginx, начиная с версии 1.7.0
    Ответ написан
    Комментировать
  • Как выигрывать аукционы Ebay?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Ви таки будете смеяться, но тот человек скорее всего не ставил в последнюю секунду, и софт не факт что использовал какой-то.
    На ебее механизм такой.
    Допустим, в данный момент на товар выставлена цена в $50, шаг 1 доллар, нет ставок, до конца аукциона много времени (часы, дни, не имеет значения).
    Вы находите этот лот, принимаете решение его выиграть, и делаете какую ставку? Скорее всего $51, да?
    И вот тут вы совершаете роковую ошибку. Когда вы делаете ставку, вы должны писать максимальную сумму, которую вы готовы потратить на этот лот, НО после вашей ставки будет отображено, что текущая ставка = предыдущая ставка + щаг аукциона. О том, что вы готовы потратить чуть больше, никто не знает.
    В нашем случае, например, вы готовы потратить $70. Значит, в поле для ставок вы пишите эти 70 баксов, но на странице лота отобразится ваша ставка в $51. И если никто больше не захочет делать ставки на лот, вы автоматом выигрываете его за $51, несмотря на то, что готовы были потратить $70.
    Допустим, нашёлся ещё один охотник за этим лотом, и он готов потратить, скажем 75$. Когда он засабмитит эту ставку, в истории ставок к лоту будет примерно следующее:
    • стартовая 50
    • вы 51
    • он 52
    • вы 53
    • он 54
    • ...
    • вы 70
    • он 71

    И вы оказываетесь в пролёте.

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

    UPD:
    По ссылке выше есть такой абзац: "рекомендуем делать ставки как можно ближе к моменту завершения аукциона. Это позволит избежать излишней накрутки на стоимость лота при конкурировании нескольких покупателей. В противном случае, если Вы задолго до завершения аукцина указаваете Вашу максимальную ставку, Ваши конкуренты будут стремиться её перебить, что приведет к необоснованному увеличению текущей цены торгов. "

    Некоторые ответчики писали о ботах, ещё они называются "ebay snipers". Так вот, по большому счёту, весь профит от них в том, чтобы они за несколько секунд до окончания аукциона сделали вашу максимальную ставку, не показывая вашего интереса к лоту за много времени до окончания аукциона, чтобы не накручивать цену на лот почём зря.
    Ответ написан
    5 комментариев