• Есть ли расширение, которое в списке вопросов на Тостере показывает рядом с вопросом автора и его статистику?

    @Koteezy
    Если кому то интересно

    Данные сохраняются в localStorage на один день, так что, при каждом переходе он запрашивать инфу не будет
    Ответ написан
    6 комментариев
  • Как декодировать UTF-8?

    igorzakhar
    @igorzakhar
    >>> s = "<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c,</p>"
    >>> x = s.encode('utf-8')
    >>> x.decode('utf-8')
    '<p>Добрый день,</p>'
    Ответ написан
    Комментировать
  • В чем минусы питона 3.6?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Естественно переделали, за 10 лет-то существования Python 3. Теперь идёт обратный процесс, с каждым днём всё меньше библиотек и фреймворков поддерживают 2.7.
    Ответ написан
    3 комментария
  • Как правильно сделать фильтрацию по числу JSONB в PostgreSQL используя индекс?

    Melkij
    @Melkij
    PostgreSQL DBA
    Индекс возможно повесить функциональный:
    create index on tablename using btree(((features ->> 'capacity'::text)::integer));

    Соответственно предикат по этому же самому выражению получит возможность использовать этот индекс.

    Больше возможностей внятно индексировать jsonb для запросов на числовые диапазоны мне как-то не вспоминается. Сортировку по полю-то только btree и умеет из всех актуальных access method.

    Т.е. индекс используется, хотя в данном случае index срабатывает на price столбце? Тогда почему запрос отрабатывает быстро?

    Да, индекс используется - индекс по price. Потому что вы по нему сортируете. И планировщик опираясь на свою статистику надеется, что сможет быстро найти 25 строк читая строки в порядке требуемой сортировки по индексу и по пути проверять выкидывать неподходящие.
    Ответ написан
    2 комментария
  • Как правильно выбирать регистратора доменных имен?

    alekciy
    @alekciy
    Вёбных дел мастер
    Если вопрос в надежности, то выбирать нужно (мы же о зонах рунета говорим, так?) аккредитованного регистратора. Только они имеют официальное права записи в реестр. Остальные не более чем ресселеры и при работе с ними возможны нюансы (ресселер может зарегать домен на себя). Список официальных регистраторов: www.cctld.ru/ru/registrators/

    Из все списка лучше регать в nic.ru или reg.ru. Я рекомендую reg.ru потому что: 1) у них есть программный API которые позволяет управлять доменом; 2) бесплатно предоставляют DNS сервер. Ну и в целом более клиенто-ориентированные.
    Ответ написан
    4 комментария
  • Стал работать по часам и обнаружил, что выходит 6 часов в день. Это нормально?

    Sir_Waat
    @Sir_Waat
    Business Analytics, Scrum Master
    Скажу по опыту работы с разными командами + опыт коллег. Если разработчик\менеджер\маркетолог\ктоугодно работает в день 6 часов не отвлекаясь на внешние раздражители и выполняет свою работу - это считается идеальным человекоднем. Правильно распределенные перерывы на размять конечности и попить чаю\кофе позволяют за эти 6 часов сделать масимум полезной работы, т.к. чисто физически невозможно эффективно и вовлеченно работать 2 промеждутка по 4 часа в день с минимальными перерывами.
    Ответ написан
    Комментировать
  • Стал работать по часам и обнаружил, что выходит 6 часов в день. Это нормально?

    Maksclub
    @Maksclub Куратор тега Карьера в IT
    maksfedorov.ru
    Не забывайте, НИКОГДА не забывайте, что в ваше рабочее время входит не только полезная работа (написание кода):
    - разобраться с той или иной информацией, изучение проблемы
    - анализ и преоктирование
    - просто изучение нового (подходы, библиотеки)
    - отдых в определенном проценте (не считая обеда)

    Если за вас это не делает работодатель, делайте за него.
    В будущем, если будете управлять коллегами — делайте это для них.

    Главное для любого человека — он сам, никакая зп не переплюнет эгоизм, помните это.
    Ответ написан
    Комментировать
  • Как получить доступ к MySQL установленном внутри Docker контейнера?

    pxz
    @pxz
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Так у Вас проброшены порты (3306), подключайтесь к localhost:3306.

    Но если локально уже работает мускуль, то поменяйте порт в compose-файле.

    Вот тут можно почитать как посмотреть проброшенные порты:
    https://docs.docker.com/engine/reference/commandli...
    Ответ написан
    1 комментарий
  • Let's Encrypt + Nginx + Docker, как обновлять ключи?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    В compose-файле:
    services:
      ...
      certbot:
        image: certbot/certbot
        volumes:
          /etc/letsencrypt_docker:/etc/letsencrypt
        command: ["renew"]

    Сертификаты заводить через
    docker-compose run certbot certonly --web-root=/etc/letsencrypt/challenges -d domain
    .
    В конфигах nginx:
    server {
      server_name some.domain;
      ...
      location /.well-known/acme-challenge {
        root /etc/letsencrypt_docker/challenges;
      }
    }

    В крон
    docker-compose -f /path/to/docker-compose.yml up certbot
    Ответ написан
    1 комментарий
  • Структура БД для хранения комментариев?

    Kwisatz
    @Kwisatz
    Больше web-приложений, хороших и разных
    Выглядит как заказ на работу

    Вопрос конкретно в чем?
    - В связке родителя/потомка? parent_id
    - В выборке дерева? with recursive
    - Хотите отделить записи по времени? шардинг с условием

    UPD:
    раз
    два
    три
    Ответ написан
    3 комментария
  • Есть идеи, как реализовать создание/хранение приходной/расходной накладной на Django?

    neatsoft
    @neatsoft
    Life is too short for bad software
    В одной таблице должны храниться документы, во второй - строки табличной части (всех документов).

    models.py:
    from django.db import models
    from django.db.models import Max, Sum
    from django.utils.translation import ugettext_lazy as _
    
    
    class Product(models.Model):
        name = models.CharField(
            _('Name'),
            max_length=200,
            db_index=True,
        )
    
        def __str__(self):
            return self.name
    
    
    class Document(models.Model):
        INVOICE = 'I'
        WAYBILL = 'W'
        TYPE_CHOICES = (
            (INVOICE, _('Invoice')),
            (WAYBILL, _('Waybill')),
        )
        type = models.CharField(
            _('Type'),
            max_length=1,
            choices=TYPE_CHOICES,
        )
        number = models.CharField(
            _('Number'),
            blank=True,
            max_length=50,
        )
        created_at = models.DateTimeField(
            _('Created'),
            auto_now_add=True,
            db_index=True,
        )
    
        @property
        def total(self):
            return self.items.aggregate(sum=Sum('total'))['sum']
    
        class Meta:
            ordering = ['-created_at']
    
    
    class DocumentItem(models.Model):
        document = models.ForeignKey(
            Document,
            models.CASCADE,
            related_name='items',
        )
        position = models.PositiveIntegerField(
            verbose_name=_('Position'),
            editable=False,
            db_index=True,
        )
        product = models.ForeignKey(
            Product,
            models.PROTECT,
        )
        price = models.DecimalField(
            _('Price'),
            max_digits=12,
            decimal_places=2,
        )
        quantity = models.DecimalField(
            _('Quantity'),
            max_digits=10,
            decimal_places=3,
        )
        total = models.DecimalField(
            _('Total'),
            max_digits=12,
            decimal_places=2,
        )
    
        def save(self, *args, **kwargs):
            if not self.position:
                position = self.document.items.aggregate(Max('position'))['position__max'] or 0
                self.position = position + 1
            super(DocumentItem, self).save(*args, **kwargs)


    admin.py:
    from django.contrib import admin
    
    from .models import Product, Document, DocumentItem
    
    
    @admin.register(Product)
    class ProductAdmin(admin.ModelAdmin):
        pass
    
    
    class DocumentItemInline(admin.TabularInline):
        model = DocumentItem
        fields = (
            'position',
            'product',
            'price',
            'quantity',
            'total',
        )
        readonly_fields = (
            'position',
        )
        ordering = ['position']
    
    
    @admin.register(Document)
    class DocumentAdmin(admin.ModelAdmin):
        inlines = [
            DocumentItemInline,
        ]
        list_display = (
            'type',
            'number',
            'created_at',
            'total',
        )
        list_filter = (
            'type',
        )
        search_fields = (
            '=number',
        )


    Стандартная админка - для примера, вообще она не для этого (обычным пользователям она не должна быть доступна). Но реальные формы строятся по тому же принципу.

    Код накидал прям здесь, не проверял, поэтому возможны незначительные ошибки.
    Ответ написан
    4 комментария
  • Как скрыть фреймворк DJANGo (csrfmiddlewaretoken)?

    @remzalp
    Программер чего попало на чем попало
    https://github.com/django/django/blob/master/djang...
    подозреваю, что можно
    1. нагло пропатчить файл
    2. породить дочерний класс, в котором токен обозван как надо и использовать уже эту реализацию
    3. заняться монкейпатчингом
    поискать еще в темплэйтах {% csrf_token %} и переопределить нужные шаблоны.
    Ответ написан
    Комментировать
  • Как добавить элементы модели в конец списка?

    maram4ik
    @maram4ik
    Python developer
    from itertools import chain
    b = a.filter(stock__gt=0).order_by('-price')
    c = a.filter(stock=0)
    x = chain(b, c)


    Можно как то так
    Ответ написан
    6 комментариев
  • Лучший платный/бесплатный VPN-сервис без стороннего софта?

    Astrohas
    @Astrohas
    Python/Django Developer
    Ну если осведомлены в linux-е советую купить VPS например на ovh и накатить по мануалам openvpn , pptp, SSh туннелирование и прочее и прочее.
    У самого такое.
    Ответ написан
    4 комментария
  • Как использовать общие данные для нескольких объектов?

    longclaps
    @longclaps
    Массив-то зачем - обычно автоинкрементным полем обходятся. Объяви его как classproperty и увеличивай в __init__()
    Ответ написан
    9 комментариев
  • Как перенести базу postgresql из нерабочей системы, если в chroot сервис не запускается?

    Melkij
    @Melkij
    PostgreSQL DBA
    Найдите, где datadir базы. Скорей всего /var/lib/postgresql/(версия базы)/main, но могла была быть перемещена, так же может стоять несколько кластеров базы и разные версии базы - в дебианах и убунтах это делается легко.

    Далее установить на новой системе postgresql идентичной major версии и не ниже minor версии что была там. Какая была major версия - смотрите файлик PG_VERSION в datadir. minor версию ставьте последнюю актуальную.
    Так понимаю, старая система в принципе не работает? Т.е. старая база выключена? Выключите и новую (пока пустую) базу. Проверьте, если не уверены, обе базы должна быть выключена.
    Переименовываете datadir на новом сервере (вообще, можно удалить, но можно и ошибиться консолью и дропнуть не то =) )
    Копируете каталог базы: rsync -a /olddatadir /newdatadir
    Копируете и правите если надо конфиги из /etc/postgresql/версия_базы
    Если каталог pg_tblspc/ в datadir не пуст - скопируйте и симлинки из него и все данные по этим симлинкам в аналогичные места на новой машине.
    Если pg_xlog/ является симлинком - его необходимо скопировать. Можно оставить симлинком, можно содержимое перекопировать.
    Пробуете запустить базу на новом месте. Смотрите в логи. Если на старом месте база не была повреждена (и ничего нужного скопировать не забыли) - то она запустится.
    Ответ написан
    1 комментарий
  • Как быстро удалить большое количество строк в postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Безопасный подход для больших таблиц:
    create unlogged table list_for_delete (id int);
    insert into list_for_delete values ....
    
    with to_rm as (
        select id from list_for_delete limit 10000
    ), rm as (
        delete from list_for_delete where id in (select id from to_rm)
    )
    delete from tablename  where id in (select id from to_rm);
    
    vacuum analyze tablename;
    drop table list_for_delete ;

    cte с delete повторять пока не будет affeted rows = 0. Смотреть на лаг репликации, добавлять задержки между запросами и увеличивать/уменьшать размер пачки в зависимости от влияния на прод.
    vacuum в конце, можно после половины пройтись дополнительно. С таким-то объёмом можно руками вакуум вообще не делать и оставить автовакууму. А для таблиц побольше при массовом изменении имеет смысл.
    Ответ написан
    Комментировать
  • Как записать путь ключей в словере python?

    @Darkzenon Автор вопроса
    Нагуглил ))

    import operator
    from functools import reduce

    path = ('folder','attrs','music','a')
    value = reduce(operator.getitem, path , JsonData)
    Ответ написан
    Комментировать
  • Чем бекапить все базы Postgres без прерывания доступа к сервису?

    Melkij
    @Melkij
    PostgreSQL DBA
    pg_basebackup
    Сделает консистентную физическую копию базы. Соответственно размер бекапа примерно равен размеру кластера postgresql + накопленные за время копирования WAL.
    Восстанавливаться элементарно запустив postgresql с указанием PGDATA в место где лежит результат pg_basebackup.
    Им обычно реплики поднимают.

    pg_dump или pg_dumpall
    Логический бекап данных. Обычно не очень подходит по критерию быстро восстанавливаться т.к. при восстановлении будут перестраивать индексы, проверять fk и прочие constraint, зато как правило сильно (в пару раз без сжатия легко, со сжатием ещё больше разница) компактнее по размеру бекапа

    Все из штатной поставки Postgresql. И другие способы бекапа Postgresql в основе своей опираются на них же.
    Ответ написан
    1 комментарий
  • Какой ЯП выгодно изучить в дополнение к PHP?

    megafax
    @megafax
    web-программист
    Идти в сторону DevOps, изучение всего зоопарка ЯП большого прироста в знаниях не даст. Скорй всего лучше искать какие то пограничные технологии. Например, как подружить php, go, nodejs, elasticsearch, postgresql и все это еще на множестве серверов win + linux. Специалист, который может видеть картину целиком намного ценнее, чем узкий спец. Также не прекращайте совершенствование php, все таки он на месте не стоит.
    Ответ написан
    4 комментария