• Как устроить обмен данными между несколькими приложениями?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Как вариант:
    RabbitMQ
    Ответ написан
    Комментировать
  • Для чего нужны абстрактные классы?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Во-первых, класс, содержащий абстрактный метод, сам является абстрактным и не должен инстанцироваться. Выбрасывая NotImplementedError вы такого эффекта не добьётесь и можете получить исключение в рантайме, создав по ошибке экземпляр абстрактного класса. Во-вторых, декларативный подход позволяет писать более чистый код, явно передающий намерения.
    Ответ написан
    Комментировать
  • Чем отличается сохранение поля модели?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Тем, где сложение выполняется. В первом случае его делает python-код, во втором СУБД.
    Ответ написан
    7 комментариев
  • Почему список lambda выражений возвращает одинаковые числа?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Все сгенерированные лямбды используют ссылку на переменную из включения. К моменту, их вызова включение уже завершило свою работу и x имеет значение последней итерации - 2. Чтобы избежать такого поведения, нужно замкнуть значение переменной: l1 = [lambda x=x: x for x in range(3)]
    Ответ написан
    1 комментарий
  • Какой выбрать ноутбук для студента-программиста? С дискретной видеокартой или без?

    Я задавался этим же вопросом несколько лет назад, так что мой ответ можете считать выжимкой за последние ~3 года пользования ноутбуками. Как и вы, я выбирал железку для программирования в бюджете 50. Мой вопрос здесь: Есть ли жизнь без дискретного видеоадаптера?

    В итоге я выбрал Dell Inspiron 5368 (сейчас он уже не актуален, не берите). Конфиг: i5 6200u, 8Gb RAM. С таким железом я не испытал больших сложностей в работе как над учебными проектами (Pascal, C++, C#, PHP, Python), так и над рабочими задачами (PHP + Vue). Дискретная видеокарта по-настоящему бы пригодилась в курсе параллельного программирования (конкретно в вычислениях на видеокарте) и курсе разработки под OpenGL (в моем случае FPS был порядка 10 против ~40-50 у других ребят с ноутбучными дискретками среднего уровня). Тем не менее, считаю что дискретка для моих задач особо не нужна. Сейчас пересел на XPS 9360 (i5 8250u, 8Gb), все так же кайфую.
    От себя посоветовал бы обратить внимание на
    1) Процессоры только последних поколений (в свете удвоения количества ядер в мобильных i5/i7 при переходе на 8 поколение). По поводу Ryzen ничего не могу сказать - не пользовался
    2) SSD это просто маст-хэв в 2019. NVMe или SATA - другой вопрос. Если есть возможность ставить первый - лучше его, но я не думаю, что SATA настолько плох. Смотрите тесты.
    3) 16 RAM. У меня 8 распаяны на плате, забиты под завязку всегда. Дропов в производительности не испытываю т.к. NVMe достаточно быстрый и компенсирует недостаток RAM быстрой подгрузкой необходимых ресурсов с диска. Если будут плашки в слоте, а не паяные чипы - еще лучше.
    4) Автономность и вес. Не знаю как у вас в универе, но у нас во многих (особенно поточных) аудиториях нет обеспечения розетками в достаточном количестве. Ко всему этому добавляется моя любовь покодить в %random_place%. Плюс необходимо еще таскать ноут каждый день с собой на пары. Этот критерий весьма субъективный, но покупать 5 кг машину для ежедневного насилия над собой я бы не стал, честно. По батарейке - на Inspiron 5ч *обычной* работы хватало впритык, на XPS 7ч за глаза (в режиме печатной машинки с одним открытым OneNote там вообще цифры переваливают за 15 часов). Учтите, что аккумулятор проседает по емкости спустя время. Если ноута "с завода" хватало тютелька в тютельку, то через n месяцев/лет этого не будет.
    5) Экран. Очень субъективно, главное чтобы вашим глазам было удобно и комфортно. Мне очень хорошо на 13' FHD, кому-то такой диагонали мало. Смотрите, чтобы подсветка не ШИМила на низкой яркости (если на вас ШИМ влияет).
    Конкретных моделей не посоветую, к сожалению, но надеюсь текст выше вам чем-то поможет.
    UPD: по Type-C - офигенно удобный. Подключил к нему док, а через док - монитор и периферию, в итоге дома через один кабель подключается целое рабочее место.
    Ответ написан
    2 комментария
  • Как отследить новые сессии Django?

    deepblack
    @deepblack Куратор тега Django
    Показывайте сообщение всем у кого не установлена cookie, соответственно вместе с просмотром устанавливайте её.
    Ответ написан
    Комментировать
  • Ajax vs websockets?

    @PavelPikat
    Сокеты имеют преимущество перед HTTP в том, что соединение устанавливается только 1 раз в начале, и после этого при каждом обмене данным handshakeне происходит, не пересылаются заголовки туда-сюда, соответственно это работает пошустрее и штрафика жрет меньше.

    Но нужно иметь ввиду и недостатки: первичное соединение у сокетов устанавливается гораздо дольше чем простой HTTP запрос, нагрузка на сервер несомненно выше - 1 сервер скорее всего не сможет поддерживать больше чем N-ое количество открытых соединений (напр. 10,000)

    P.S не советую с сокетами делать "пинги" или "поллы", т.к. это будет только нагружать CPU и жрать батарею. Сокеты в состоянии покоя (когда данных нет) вообще ничего не жрут и WiFi может уходить в sleep-mode
    Ответ написан
    Комментировать
  • Ajax vs websockets?

    DevMan
    @DevMan
    в чем проблема открыть дополнительный коннект?
    сокеты рулят, если нужна двухсторонняя связь.
    аякс рулит, когда нужна односторонняя связь.
    Ответ написан
    2 комментария
  • Что такое экспонента?

    longclaps
    @longclaps
    Приставка "экс" означает бывшая (ныне переставшая быть), таким образом экспонента - это бывшая понента.
    Ответ написан
    1 комментарий
  • Как правильно: объект экземпляра или объект экземпляра класса?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Экземпляр обязательно должен к чему-то относиться.
    Экземпляр чего? Класса.
    Никогда не читайте русскоязычные переводы!
    Читайте в оригинале на английском.
    Устоявшееся выражение - "экземпляр класса".
    Ответ написан
    Комментировать
  • Vue.js: перекомпиляция "на лету" после изменения dom. Как?

    Fragster
    @Fragster
    помогло? отметь решением!
    У вас jquery, головного мозга. Если после первого клика надо поменять сообщение, то надо именно что поменять сообщение после первого клика, как-то так:
    <div id="vue">
      <div id="target">
        <a href="#" v-on:click.prevent="alert">{{message}}</a>
      </div>
    </div>

    new Vue({
      el: '#vue',
      data: {
        message: 'alert 1'
      },
      methods: {
        alert: function (event) {
          alert(this.message);
          this.message = 'alert 2';
        }
      }
    });

    Ну или объясните задачу по нормальному. Если надо поменять компонент, то надо смотреть на https://ru.vuejs.org/v2/guide/components.html#%D0%... или на https://ru.vuejs.org/v2/guide/conditional.html
    Ответ написан
    4 комментария
  • Можно ли следить за LocalStorage?

    Chefranov
    @Chefranov
    Новичок
    created() {
        window.addEventListener('storage', () => {
          //что-то делаем когда меняется local storage
        })
      },
    Ответ написан
    8 комментариев
  • Почему в некоторых языках функции могут быть вне классов, а в других нет?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В Java вообще нет функций, только методы. Методы по определению не могут быть вне классов. А сделано так потому, что Java проектировалась как язык принуждающий писать в ООП.
    Ответ написан
    4 комментария
  • Что значит звёздочка после типа указателя?

    myjcom
    @myjcom
    что значить Звёздочка после типа?

    https://en.cppreference.com/w/c/language/pointer

    Для чего после double стоит *, ведь это символ разыменования, а что мы разыменуем?

    В данном случае звездочка не является оператором а относится к типу.

    Зачем перед malloc стоит (double*)

    https://en.cppreference.com/w/c/memory/malloc

    Выделяет память в байтах (возвращает указатель на void), и ничего не знает о том как вы ими будете распоряжаться.

    N.B. В современном Си такой необходимости нет.


    приведение к типу (double*) сообщает компилятору, что вы хотите.
    Ответ написан
    2 комментария
  • Как не позволить функции продвинуться дальше?

    0xD34F
    @0xD34F Куратор тега Vue.js
    await setTimeout

    Бессмысленная операция, setTimeout не возвращает Promise, эвейтить тут нечего.

    Если хотите использовать await вместе с setTimeout, последний придётся явно завернуть в Promise:

    await new Promise(r => setTimeout(r, 1000))

    Кроме того, надо возвращать результаты выполнения функций, например здесь

    .catch((e)=>{this.handleUsersListErrors(e)})

    после того, как catch отработает, вызов getUserCheckList завершается, и created продолжает работу, никакого "не позволить продвинуться" не будет (ну и конечно нелишним будет отметить, что хуки жизненного цикла vue синхронны, так что в любом случае не выйдет "приостановить" выполнение created - в том смысле, чтобы асинхронный код выполнился до начала монтирования экземпляра компонента).

    UPD. Держите пример того, как может выглядеть реализация подобной схемы (в роли "запроса" выступает генерация случайного числа, успешным результатом считается число, попадающее в верхние 10% заданного интервала):

    data: () => ({
      status: 'unknown',
      val: 'empty',
    }),
    methods: {
      getVal() {
        this.status = 'awaiting request answer';
        return new Promise((...r) => {
          setTimeout(() => {
            const max = 10000;
            this.val = Math.random() * max | 0;
            r[+(this.val < max * 0.9)]();
          }, 1000);
        }).catch(this.handleError);
      },
      handleError() {
        this.status = 'ERROR, awaiting new request';
        return new Promise(r => setTimeout(r, 2000)).then(this.getVal);
      },
    },
    async created() {
      await this.getVal();
      this.status = 'OK';
    },

    <div>status: {{ status }}</div>
    <div>value: {{ val }}</div>
    Ответ написан
    Комментировать
  • Как передать переменную в другой компонент vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    isBarMenuClicked: false, // эту переменную нужно передать

    Не нужно. Зачем кнопке знать о состоянии меню? - её дело нажиматься и оповещать об этом того, кто находится выше. Делайте по клику $emit('click'), подписывайтесь на событие в родительском компоненте, переключайте там значение переменной, отвечающей за открытость меню и передавайте её в меню как параметр.
    Ответ написан
    Комментировать
  • Как передать переменную в другой компонент vue?

    @Gilfy
    Ответ написан
    Комментировать
  • Как перевести этот код с C++ на python?

    Никак. Это выдранные из контекста 4 строки без конкретной реализации использованных в них методов
    Ответ написан
    1 комментарий
  • Как подсчитать число уникальных строк больше 1 млн. при вводе?

    longclaps
    @longclaps
    Задача не имеет решения в заявленых ограничениях. Если чьи-то решения прокатывают - значит редакция мухлюет с тестовыми данными. Вот демка на этот счет. Можешь допилить её, выбросив лишнее и заменив randrange на hash(input()), и попробовать пропихнуть как решение.
    from numpy import zeros, uint32
    from random import randrange
    from sys import getsizeof
    
    
    N = 10 ** 6
    hashes = zeros(N, uint32)
    print(f'hashes занимает  {getsizeof(hashes)} байт')
    control = set()  # здесь считаем по-честному
    for i in range(N):
        # вместо строк я использую большие случайные числа
        r = randrange(0x4000000000000000)
        control.add(r)
        # сохраняем последние 4 байта r - больше не лезет
        hashes[i] = r & 0xffffffff
    hashes.sort()
    a, cnt = hashes[0], 1
    for b in hashes:
        if a != b:
            a = b
            cnt += 1
    print(f'control - целых {getsizeof(control)} байт (для строк длиной до 1к было бы больше)')
    print(f'{cnt:8} разных хэшей\n{len(control):8} разных чисел')

    Слишком короткий хэш (32 бита) на 10^6 строк порождает слишком много коллизий (смотри парадокс дней рождения). Нельзя впихнуть невпихуемое.

    UPDATE
    Roman Kitaev предложил использовать фильтр Блума, вот решение на этой идее. Оно несёт в себе недостатки фильтра Блума: работает медленно и ошибается; так же возможно, что мои упрощения убили фильтр, но авось прокатит.
    bitmap, cnt = bytearray(0x400000), 0
    for _ in range(int(input())):
        h, f = hash(input()), 0
        for _ in range(16):
            m = b'\x01\x02\x04\x08\x10\x20\x40\x80'[h & 7]
            h = ((h >> 4) ^ i) | ((h & 15) << 60)
            if not bitmap[h & 0x3fffff] & m:
                bitmap[h & 0x3fffff] |= m
                f = 1
        cnt += f
    print(cnt)
    Ответ написан
    6 комментариев
  • Как конвертировать Python в C++?

    tsarevfs
    @tsarevfs
    C++ developer
    Коротий ответ: нет.

    Теоретически можно написать конвертер для достаточно большого подмножества языка. Реализовать eval практически невозможно.
    На практике это совершенно бессмысленно. Если цель получить быстрый код, есть PyPy который транслирует в СИ. Но очень часто это и не нужно. Те части кода, которые должны быть быстрыми уже написаны на Си и доступны как библиотеки (numpy, tensorflow, ...).
    Ответ написан
    4 комментария