• Как в Ubuntu Desktop монтировать USB-устройства с правами 666?

    @776166 Автор вопроса
    У / и /dev/ права 750. Если поставить 640 для usb, они всё равно не выставляются.
  • Как в Ubuntu Desktop монтировать USB-устройства с правами 666?

    @776166 Автор вопроса
    Это хороший вопрос, но даже выставление 640, что явно меньше, чем 750 у / и /dev/, проблему не решило.
  • Цель— как стать Разработчиком Python Junior?

    @776166
    1) Как можно больше практики. Это самое важное. Решает практика.
    2) Задачи можно решать свои, но по возможности, надо браться за чужие. Безопасно и крайне полезно решать задачи по обустройству проекта на джанго всякими плюхами.
    — Настройка проекта в целом, быстрое разворачивание, чтобы от зубов отскакивало. Виртуальное окружение. Работа в режиме devserver и через nginx + uwsgi/чтотамсейчасещёесть. Я бы рекомендовал ещё слегка в DevOPS (в unix экосистему и в контейнеры, это сейчас модно). Напишите скрипт разворачивания нового проекта и обновления продакшн-версии на другом сервере. Всё делайте только через https, разберитесь с сертификатами.
    — Добавление в проект социальной авторизации. Попробовать allauth, попробовать python social auth для vk/fb/ok/gmail/github/yandex. Они кривые и глючные, но надо.
    — Попробовать самому расширить модель пользователя для хранения дополнительной информации тремя разными способами и попытаться понять, когда что. Конечно, с первого разаа не поймётся, но опыт уже будет. Переделать авторизацию на чисто почтовую. С подтверждениями, письмами и прочее.
    — Сделать заход на аякс. Поглядеть в глаза DRF. DRF очень важен, но он моментально выедает мозг и там много ООП.
    — Параллельно изучать фронт (HTML/CSS/JS = Bootstrap + JS + JQuery). Это помогает понимать то, что будет нужно от вас и вообще полезно для развития. И без этого вы не сможете зарабатывать вне команды, создавая сайты или прототипы сайтов самостоятельно. Попробовать собрать сайт не с SSR страниц, а с CSR (для этого и нужен API).
    — Где-то надо будет начать уделять время тестированию. Это реально очень важно.
    — Напишите телеграм-бота в контексте проекта django.
    — Напишите отдельный чат-сокет-сервер в контексте проекта django.
    3) Честно напишите своё резюме и пытайтесь найти фрилансные заказы. Будет тяжело, одиноко и обидно, но пусть будет, иногда там что-то перепадает. С этим же резюме на hh и ждать, пока не найдётся работодатель, которому понадобится джун.
  • Почему не работает перехват несуществующих доменов в NGINX?

    @776166 Автор вопроса
    И что совсем загадочно, что если оставить только парковщика, то при включённом ловце 80 порта, он на любой запрос перекидывает его с http на https.
  • Почему не работает перехват несуществующих доменов в NGINX?

    @776166 Автор вопроса
    Неа. Если удалить вообще все конфиги и оставить только парковщика и любой другой, то картина будет такая же.
  • Не получается зарегистрироваться с помощью VK и allauth?

    @776166
    Какой-то этот allauth дохлый. То vk  отвалится, то facebook. Есть какой-нибудь актуальный форк?
  • Как лучше использовать Django + несколько SSH подключений?

    @776166
    Видимо, надо поднимать отдельный сервер (демон), который будет заниматься ssh-соединениями. Django-приложение будет с ним общаться по какому-то API и давать ему команды, чтобы тот выполнял какие-то команды по ssh.

    Вопрос: а нужно ли вообще держать соединения? Если нужно выполнение каких-то разовых команд, то, возможно, имеет смысл использовать что-то типа ansible через celery.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    Сергей Горностаев, соединение, видимо, закрывается, но как-то само по себе и этот цикл про это ничего не знает. При корректном закрытии самого сервера лупы ругаются примерно так:
    Task was destroyed but it is pending!
    task: <Task pending coro=<invites_loop() running at ..../ws/handlers/invites.py:27> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7f9773bdec78>()]>>
    Task was destroyed but it is pending!
    Exception ignored in: <coroutine object invites_loop at 0x7f9773b9a728>
    Traceback (most recent call last):
      File "..../ws/handlers/invites.py", line 27, in invites_loop
      File "/usr/lib/python3.6/asyncio/queues.py", line 169, in get
      File "/usr/lib/python3.6/asyncio/base_events.py", line 580, in call_soon
      File "/usr/lib/python3.6/asyncio/base_events.py", line 366, in _check_closed
    RuntimeError: Event loop is closed


    В самом лупе следующее:
    queue = asyncio.Queue()
        try:
            while True:
                invite, invite_user, creator, appointment_id = await queue.get()

    Ругается на последнюю строчку.
    Я не понимаю, как это работает. Видимо, надо перехватывать какие-то исключения в лупе в том месте, где происходит ошибка, но я хочу перехвата уровнем выше, чтобы всё по-честному закрывалось. Может, надо async for msg in ws: ещё оборачивать ловца исключения? Там же только сообщения из сокета берутся. Такое ощущение, что он из цикла не выходит вообще, потому что ничего после этого цикла не выполняется.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    Сергей Горностаев, к сожалению, из тестов не очень понятно, как это перехватывать и вписать в общую логику приложения.

    Вот у меня есть основной обработчик приёма событий из сокета:
    async for msg in ws:
            if msg.type == aiohttp.WSMsgType.close:
                break
            elif msg.type == aiohttp.WSMsgType.error:
                break
            elif msg.type == aiohttp.WSMsgType.text:
                # Тут обработка сообщений
                pass
    #Тут после цикла всё закрывается


    Как мне в него встроить функциональность, которая выходит из цикла и мирно всё закрывает, если сокет порвался по heartbeat?
  • Как в django сделать несколько шаблонов в одной модели?

    @776166
    stilet69, фу так не уметь пользоваться поиском!

    import os.path
    
    class News(models.Model):
        created = models.DateTimeField(auto_now_add=True)
        article = models.CharField(blank=False,
                                   null=False,
                                   default="",
                                   max_length=50,
                                   verbose_name="Артикул",
                                   db_index=True,
                                   unique=True)
    
        def get_template_names(self):
            template_path = "%s/%s" % (path_to_templates, self.article)
    
            if os.path.exists(template_path):
                return template_path
            else:
                return "%s/default.html" % (path_to_templates)


    С точностью до слешей в путях.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    Странно. Мне казалось, что там было написано про то, что пинговать клиента надо отдельно. Более того, у меня это установлено. Но или не работает, или я не понимаю, как с этим управляться.
    Тогда вопрос: как отлавливать ситуацию, когда клиент мёртв? Как это вообще должно работать? В доках (мне не нравятся эти доки) я этого не нашел и в примерах этого тоже нет. Все примеры, которые попадались, это вообще игнорируют.
  • Как в aiohttp делать серверный ping?

    @776166 Автор вопроса
    javedimka, бред засчитан.
  • Как в django сделать несколько шаблонов в одной модели?

    @776166
    class News(models.Model):
        created = models.DateTimeField(auto_now_add=True)
        article = models.CharField(blank=False,
                                   null=False,
                                   default="",
                                   max_length=50,
                                   verbose_name="Артикул",
                                   db_index=True,
                                   unique=True)
    
        def get_template_names(self):
            if self.article == 'foo':
                return "templates/foo.html"
            elif self.article == 'bar':
                return "templates/bar.html"
            else: return "templates/default.html"
  • Какую онлаин бухгалтерию используете для Upwork?

    @776166
    Иван, ну как бы то, что они слили меня партнётру — ok, допустим. Но партнёр не получал от меня разрешения на включение в рассылку и уж тем более я не просил его меня где-то регистрировать. И я с Альфой не могу такой договор подписать, который таким образом на третьих лиц распространяется. Наверное. Иначе это был бы полный ад.

    Но в целом, да, Вы правы. Просто меня этот быдло-бизнес подзадоел, а сам я эмоциональный.
  • Какую онлаин бухгалтерию используете для Upwork?

    @776166
    Иван, глупость вы предложили, извините, конечно. Вы предложили принять правила игры этих мошенников и завязать официальную бумажную переписку, что в корне неверно. Потому что следующий шаг — по их внутренним порядкам я должен буду отсосать кому-нибудь из высокого начальства. Дважды. Чтобы они меня отписали от того, на что я не подписывался.
  • Какую онлаин бухгалтерию используете для Upwork?

    @776166
    Иван, Дядя Ваня, ты маненечко таво?
    Это дело принципа. Я ничего не писал и писать не собираюсь, потому что не должен и не обязан. Этим деятелем я написал в электронном письме, как есть: я у вас не регистрировался, никаких заявлений писать не буду, просто удалите этот аккаунт нахер и заодно считайте это письмо письменным отказом от всех рассылок и требованием удалить меня из ваших баз данных контактов. Они удалили, отписали и с тех пор про них ничего не слышно.

    Я думаю, надо завести специальное заявление с превентивным отказом от всех рассылок и запретом на передачу персональных данных третьим лицам. И требовать его подписывать при заключении договоров со всякими конторами. Вплоть до отказа сотрудничать, если не захотят.
  • Django request.build_absolute_uri?

    @776166
    ckatala, мало информации. DRF может этот url как-то по-другому формировать, например брать из ALLOWED_HOSTS.
    localhost всплывает скорее всего потому, что физически он и работает на localhost. Домен появляется во время проксирования. И что-то именно здесь идёт не так.