Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как поделиться переменными между потоками из разных модулей?

Лучший ответ:
Не используйте глобальные переменные. Не используйте глобальные переменные в конкурентной среде ещё сильнее.

Худший ответ:
Для начала скажи, какую задачу ты пытаешься решить.
Для случая с одноразовым потоком-воркером, тебе не нужна глобальная переменная. Достаточно класса.
import threading

class MyWorkerThread(threading.Thread):
    def __init__(self, arg1: float, arg2: float): # передаём потоку входные данные 
        # поток не должен их менять!
        super().__init__()
        self.arg1 = arg1
        self.arg2 = arg2
        self.result: t.Optional[float] = None
    def run(self):
        time.sleep(10) # имитируем длительную работу
        self.result = self.arg1 + self.arg2
И тогда ты можешь его использовать так:
worker = MyWorkerThread(42, 69)
worker.start()
while True: 
    if worker.is_alive():  # проверяем, жив ли поток
        # делаешь ещё что-то, пока поток работает
        print('Still working...')
        time.sleep(0.5)
    else:
        # поток завершился, даём знать пользователю.
        print(f'Done! Result is {worker.result}!')
        break # выходим из цикла
Если же тебе нужно просто дождаться конца потока, ничего не делая в процессе, можно сделать просто worker.join()

Сложности начинаются, когда тебе нужно взаимодействовать с длительным потоком. Усложним пример:
import threading, queue

class MyWorkerThread(threading.Thread):
    def __init__(self, arg1: float, arg2: float): # передаём потоку входные данные 
        # поток не должен их менять!
        super().__init__()
        self.arg1 = arg1
        self.arg2 = arg2
        self.result: t.Optional[float] = None
        self.progress = queue.Queue()
    def run(self):
        for i in range(10):
            time.sleep(1) # имитируем длительную работу
            self.progress.put(i/10) # сообщаем о прогрессе
        self.result = self.arg1 + self.arg2
        self.progress.put(1.00)
Тогда код использования изменится следующим образом:
worker = MyWorkerThread(42, 69)
worker.start()
while True: 
    if worker.is_alive():  # проверяем, жив ли поток
        # делаешь ещё что-то, пока поток работает
        try:
            progress = worker.progress.get(block=True, timeout=0.5)
        except queue.Empty: # поток ничего не сообщил
            print('Still working...')
        else:
            print(f'Still working... {progress:.0%}')
            worker.progress.task_done() # один вызов task_done() на один успешный вызов get()!
    else:
        # поток завершился, даём знать пользователю.
        print(f'Done! Result is {worker.result}!')
        break # выходим из цикла
Если тебе нужно передать потоку новые задания, то можешь использовать ещё одну queue.
Вопрос: Как сравнить группу элементов в одномерном массиве в с++?

Лучший ответ:
Разбейте задачу на подзадачи:

1) Проверить, что данный элемент надо удалить
  1.1) Проверить, что элемент не уникальный
  1.2) Проверить, что элемент - не первый среди одинаковых (один-то его надо оставить)
2) Удалить элемент из массива дописав 0 в конце.

Все эти пункты выполняются циклом. в первых пунктах будет удобно завести булевую переменную, которая после цикла будет содержать значение проверки.

Худший ответ:
Если без велосипедов, это https://en.cppreference.com/w/cpp/algorithm/ranges...
Вопрос: Почему при клике на кнопку выводится NaN?

Лучший ответ:
Потому что this в момент вызова события указывает на элемент button, а не на cls.

Худший ответ:
потому что handleClick теряет свой контекст. Решается так:

buton.addEventListener("click", ()=>cls.handleClick());

или так

buton.addEventListener("click", cls.handleClick.bind(cls));
Вопрос: Почему тут ошибка?

Лучший ответ:
1.Почему-бы, перед тем как брать откуда-то код (ну или писать свой, не суть) не почитать пару уроков (или пару глав любого учебника) по языку?
2.В ошибке, которую вы не показали, кстати, четко написано, почему не работает (и даже сказано в каком конкретно месте ошибка):
IndentationError: expected an indented block after 'while' statement on line 11
Перевод, на всякий случай (вдруг вы английский не знаете, а абсолютно все переводчики вас забанили).
IndentationError: ожидался блок с отступом после оператора while в строке 11
Возможно я ожидаю слишком многого, но тут вроде-бы даже без знания языка можно понять, что нужно сделать (добавить отступ)

Худший ответ:
import time
from random import randint

for i in range(1, 45):
    print('')



for i in range(1, 1000):
    s = ''
    count = randint(1, 100)
    while (count > 0):
        s  = ' '
        count -= 1

    if (i%10==0):
        print(s + 'С праздником Рамадан')
    else:
        print(s + '*')
        time.sleep(0.1)
Нужен был отступ
Вопрос: Когда применять arr.reduce?

Лучший ответ:
Когда сочтёте нужным. Типа, подумали, и решили - здесь reduce нужен. Или не нужен. Да, подумали. Для этого у вас есть особый инструмент - голова называется.

Худший ответ:
Вы правы, reduce может делать и отображение и фильтрацию. Но в основном данную функцию применяют, когда при проходе коллекции нужно собрать определенный результат. Причем неважно какой: это может быть другой массив или объект, а может быть и примитивный тип данных типа строка или число. Все зависит от задачи
Как правильно писали выше, самый яркий пример и одновременно простой пример - нахождение суммы всех элементов массива.  Вы делаете агрегацию - то есть приведение целой системы к одному результату. 

[1, 2, 3, 4, 5].reduce((acc, item) => acc += item, 0); // 15
Вопрос: Как прикрутить многопоточную обработку без проблем с памятью?

Лучший ответ:
Генерацию самих строк стоит оформить как IEnumerable, а их обработку - при помощи Task.

Худший ответ:
Не создавай много потоков.
Если хочешь заморочиться, то можно отслеживать состояние памяти процесса и регулировать их количество. Если не заморачиваться, то прирост производительности от параллельного исполнения ограничен количеством ядер процессора.
То, что ты описал, подходит под паттерн - производитель-потребитель.
Пример реализации
Вопрос: Что такое PRIMARY KEY, CONSTRAINT, FOREIGN KEY, REFERENCES, INSERT INTO и для чего они нужны?

Лучший ответ:
PRIMARY KEY - первичный ключ. Поле, комбинация полей либо выражение (последнее MySQL не поддерживает), которое не может быть NULL и не допускает дубликатов (уникально для каждой отдельной записи в пределах таблицы). Поддерживается путём создания соответствующего уникального индекса и наложением ограничения NOT NULL на все используемые в выражении поля. По факту - однозначно идентифицирует запись. Кроме того, в MySQL выражение первичного ключа является кластерным индексом. См. Индекс -> Уникальный индекс -> Первичный индекс.

CONSTRAINT - ограничение. Правило, которое не допускает создания записи, для которой значение выражения ограничения имеет значения FALSE (можно TRUE или NULL).

FOREIGN KEY - внешний ключ. Ограничение, которое требует, чтобы указанное выражение для текущей записи присутствовало среди значений указанного выражения референсной таблицы (допускается и внешний ключ на ту же таблицу). Точнее, чтобы такая проверка присутствия не возвращала FALSE (можно TRUE или NULL).

REFERENCES - определяет референсную таблицу и референсное выражение.

INSERT INTO - запрос, вставляющий новые записи в таблицу.

Худший ответ:
1. Смотри, primary key нужен для того, чтобы таблица понимала, какой тут столбец самый главный.
То есть, этот primary key может отсутствовать, но тогда у тебя не будет работать auto_increment. Auto_increment нужен для того, чтобы у тебя главный столбец мог автоматически увеличиваться. Это нужно для порядковой записи строк.
2. Ключ, который ссылается на другую таблицу - это простое объединение. Нужно это для того, чтобы ты случайно не удалил связанные таблицы. Или настроить такой вариант. Если удаляешь главную таблицу или главную запись, то что должно произойти в момент удаления главной записи с записями, которые зависят от нее.
INSERT INTO это простое добавление строки в базу. Пользователь добавляется через другую команду.
Вопрос: Если нужно выключить основной DC оставив дополнительный DC включенным, какие подводные камни могут ждать?

Лучший ответ:
Передать роли FSMO с выключаемого контроллера домена...

Худший ответ:
сначала обслужи второй, потом перенеси на него роли и делай с первым что хочешь.  в чем проблема?
Вопрос: GRUB не видит Windows, после удаления Linux?

Лучший ответ:
А зачем Вам GRUB, если снесли Linux?
Любой загрузочной флешкой с WIN восстановите загрузчик OS и всё.

Худший ответ:
Груб подтягивает свои модули с файловой системы, которая фсё. Снеси груб совсем с помощью винд рекавери.
Вопрос: Как узнать колличество памяти видеокарты?

Лучший ответ:
У Nvidia есть библиотека nvml.dll там можно достать много технической информации.

Худший ответ:
Скачайте AIDA64, там отображается практически вся системная информация.
Вопрос: Заблокировать интернет для программ в ПАПКЕ?

Лучший ответ:
По простому не реально.

1.

https://habr.com/ru/post/82933/

2.

Ну и баш-скрипт сделать с "noinet" для всех программ из нужной Вам папки.

Худший ответ:
Разрешить запуск этих программ пользователю, у которого нет доступа в Интернет.
Гуглите по ключевому слову "chmod" и "useradd".

Ещё можно использовать chroot, тут уж тоже в Гугл, ответ размажется на целую страницу.
Вопрос: Вопрос про изучение C# – оптимальная методика?

Лучший ответ:
Нормально. Я так и учил C#. Практика важна в этом деле, без неё долго будешь учить. Только я писал WPF приложение. И вообще практика написания больших приложений учит строить архитектуру. Будешь писать код и видеть проблемы в своём проекте. Рефакторить проект. Переписывать его части.

Худший ответ:
 А то пока что по шарпу – консольные калькуляторы и проч. необходимая скукота.
Так сделай нескукоту.

Напиши вебсайт на C#
Вопрос: Какая система потребляет больше ресурсов всех компонентов ПК?

Лучший ответ:
почему бы не пойти дальше и не сравнить os2 с win32 и win nt4? (сарказм)

зачем тебе это?

на win xp sp0 не пойдет практически ни одно приложение, написаное последние лет 20, и потребует доустановки тонны компонент (типа vcredist), которые как раз входят в состав сервис паков.

p.s. по теме вопроса - скорее всего обе ос будут потреблять одинаковое количество ресурсов, так как основаны они на одной и той же кодовой базе (за исключением различия сервиспаков)

Худший ответ:
Это зависит от того, для чего нужна ОС.
Сама по себе ОС потребляет почти ничего, вопрос что на ней запускать. Это следует уточнить.
Вопрос: Аналог DotVVM для asp.net web forms?

Лучший ответ:
А хостинг не проще сменить? Ну или показать им на календарь, в графу "год"?

Худший ответ:
Это ваши проблемы, что у вас такой древний хостинг и нет желания мигрировать на .net 5
В принципе - если у вас есть разделение на фронт и API, то вы можете плавно перенести все фичи хоть на dotVVM, хоть на Blazor, хоть на реакт.
Вопрос: Какие варианты миграции корпоративной почты с Яндекс на MS Exchange 2019?

Лучший ответ:
В общих чертах как-то так:
1. Поднять инфраструктуру Exchange 2019 (домен Active Directory есть?)
2. Создать почтовые ящики пользователей
3. Переключить внешние DNS-записи, чтобы указывали на вашу инфраструктуру
4. Начать получать почту в Exchange
5. Выполнить экспорт ящиков Яндекс в PST
6. Выполнить импорт PST-файлов в Exchange
7. Перестать использовать почту Яндекс

P.S. согласен с CityCat4 в плане найма вами человека, обладающего необходимыми знаниями...

Худший ответ:
Вы просто поменяете геморрой с платной почтой Яндекса на геморрой с почтовыми ящиками и "глюками" Exchange
Вопрос: SQL инъекция в UPDATE возможна ли?

Лучший ответ:
Инъекция может быть через любой запрос.
И защищать тоже надо любые запросы. 
Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

Важно понимать, что в рассуждениях про инъекции люди постоянно путают два понятия - самой уязвимости, и конкретных способов ей воспользоваться.
Уязвимость — это сама возможность с помощью переданных в запрос данных изменить его код. 
Даже если ты не знаешь ни одного способа ей воспользоваться, уязвимость от этого никуда не девается. 
Даже если та возможность, про которую ты знаешь, в данном случае не прокатит - остаются ещё тысячи других.
Если есть уязвимость, то способы ей воспользоваться всегда найдутся. 

То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема. 

Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо? 

При этом разных вариантов возможных ошибок и способов  воспользоваться уязвимостью - тысячи, им посвящены целые учебники и статьи. Но для того чтобы защищаться, не надо знать ни одного. Потому что защищаться надо не от отдельных способов эксплуатации, а закрывать саму уязвимость. И сделать это очень просто:

Любые данные должны добавляться в запрос только через плейсхолдеры
Любые другие элементы запроса должны выбираться из белого списка - заранее прописанных в нашем коде значений.


Если вопрос "а можно я не буду защищаться?" вызван ленью, то это тоже решаемо.  В принципе, лень - это очень важное качество для программиста. Главное - направить её в нужное русло. 

Если каждый раз писать по три строчки долго
$sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
$stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
$stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
$stmt->execute(); // выполняем запрос
То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет  на себя всю рутинную работу.
function prepared_query($mysqli, $sql, $params, $types = "")
{
    $types = $types ?: str_repeat("s", count($params));
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param($types, ...$params);
    $stmt->execute();
    return $stmt;
}
и в итоге предыдущие 4 строчки превратятся в одну:
prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);
или твой запрос:
prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);
- просто, быстро, удобно и безопасно

Худший ответ:
Точку с запятой можно впендюрить и продолжать запрос.
UPDATE table SET test WHERE id = 0; DELETE * FROM users;
Вопрос: В чем преимущество статического массива?

Лучший ответ:
Никакой разницы нет.

Худший ответ:
В первом случае функция получает указатель на массив, во втором - просто указатель. Что это за указатель? Остается только догадываться! Но многие люди и инструменты могут догадаться. В любом случае, явное лучше неявного, простое лучше сложного, а если вам и так нормально, то стоит изучит python или js.
Вопрос: Где можно посмотреть список из 50-100 наиболее используемых встроенных функций / методов в языке php?

Лучший ответ:
а смысл?
используемые функции зависят исключительно от задач, а у разных людей они разные. 

я каждый день использую array_splice, а кто-то даже не знает о ней. вам это помогло?

Худший ответ:
Лучше гуглить к примеру "array sort php" и смотреть списочек функций, потом еще в каждую заходить и смотреть что на вход, а что на выход и что поменялось в последней версии, с опытом все наизусть можно знать да и к примеру бесплатный редактор VSCode имеет подсказки, стоит только поставить PHP Intellisence
Вопрос: Кто такие инженеры 2 категории?

Лучший ответ:
То, что написал в их должностной инструкции конкретный работодатель. Единого определения и перечня обязанностей для этой должности нет.

Худший ответ:
Обязанности определяются твоим трудовым договором и служебной инструкцией.
А кто такой инженер 2й категории уже ответил AVKor (https://ru.wikipedia.org/wiki/Инженер#Требования_к...)


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

А если человеческим языком:
- Высшее техническое образование
- Стаж по специальности (возможно смежной) 3+ года
Вопрос: Куда девать неиспользуемые пины Ардуино?

Лучший ответ:
Перемычками.
А так, вообще, не особо то и будут ловиться помехи если тот же serial или еще что будет видеть в воздухе или будет заглушено на встроенные подтяжки. Ну если это не контроллер микроволновки

Худший ответ:
Пины микроконтроллера Arduino не ловят помехи, потому по умолчанию пребывают в состоянии Hi-Z. А сопротивление входа примерно 1 МОм. Такой помехой может стать прямое попадание молнии, например.
Вопрос: Как сделать, при клике мышки на блок — меняется фон на красный, второй клик — желтый, третий — синий, четвертый клик опять красный?

Лучший ответ:
<style>
  body{background: white;}
  #changebgcolor{
    width:100px;
    height:100px;
    background: white;
    border: 1px solid lightgray;
  }
</style>
<div id="changebgcolor"></div>
let block = document.getElementById('changebgcolor');

let count = 0;
function handlerClick(){
  let bgColors = ['red', 'blue', 'yellow']; // цвета какие нужны

  count = (count > bgColors.length)? 0 : count;
  block.style.backgroundColor=bgColors[count]
  count++;

}
block.addEventListener('click', handlerClick)

Худший ответ:
<style>
  body{background: white;}
  #changebgcolor{
    width:100px;
    height:100px;
    background: white;
    border: 1px solid lightgray;
  }
</style>
<div id="changebgcolor"></div>
let block = document.getElementById('changebgcolor');

let count = 0;
function handlerClick(){
  let bgColors = ['red', 'blue', 'yellow']; // цвета какие нужны

  count = (count > bgColors.length)? 0 : count;
  block.style.backgroundColor=bgColors[count]
  count++;

}
block.addEventListener('click', handlerClick)
Вопрос: В 2021 году чревато ли устройство на работу где Zend Framework?

Лучший ответ:
не так.
ты либо умеешь и можешь, либо нет. точка. 
а используешь ты стамеску или рубанок заказчика волнует от слова никак, только сделай мои задачи.

и ZF  как раз научит тебя правильной архитектуре или сподвигнет к этому.

Худший ответ:
Отстанете 100% на любой работе, если не будете на досуге смотреть по сторонам, хотя бы часик в неделю надо тратить чтобы что-то почитать, слепить что-то для души а не для работы.
Вопрос: Как проще всего сделать датчик закрывания распашных ворот?

Лучший ответ:
1) геркон и магнит соответствующей мощности, технология много десятилетий применяется в охранных сигнализациях
2) питание геркону не нужно, наоборот, например, при закрытых воротах можно сделать полное отключение передатчика, заведя на него питание через этот самый геркон
3) любой передатчик, умеющий передавать сообщение на разрыв/замыкание цепи. 15м при отсутствии препятствий почти любой бюджетный передатчик обеспечит. 

Правильно заметили в комментарии, надежность батарей зимой на улице под большим вопросом.

Худший ответ:
Датчики угла поворота на петли? Передача через WiFi (esp8266 за $1), например. 

Или камера наблюдения, и периодический анализ картинки. Это несколько дороже, но камера может висеть на доме, и следить за воротами издали, что решает проблему проводов.
Вопрос: Как сделать случайное имя пользователя?

Лучший ответ:
create table public.profiles (
  id uuid not null,
  username text default concat('Пользователь #', random()*100000),

  primary key (id)
);

Худший ответ:
CREATE SEQUENCE profiles_seq START 1;

CREATE OR REPLACE FUNCTION nextval_rand(regclass)
  RETURNS text AS
$func$
BEGIN
EXECUTE format('ALTER SEQUENCE profiles_seq INCREMENT %s', (random() * 100)::int + 1);
RETURN 'Пользователь #' || nextval($1)::text;
END
$func$ LANGUAGE plpgsql SECURITY DEFINER;

create table profiles (
  id uuid not null,
  username text default nextval_rand('profiles_seq'::regclass),
  primary key (id)
);

insert into profiles (id) values
(gen_random_uuid()), 
(gen_random_uuid()),
(gen_random_uuid()),
(gen_random_uuid()),
(gen_random_uuid());

select * from profiles;

https://sqlize.online/sql/psql15/5c8c2073d52cd9696...
Вопрос: Какие нюансы работы самозанятым?

Лучший ответ:
1. Самостоятельное ведение бухучёта, общение с налоговой, выписывание чеков.

2. Отсутствие пенсии, налоговых вычетов, банки очень плохо дают кредиты

3. Налоговая в курсе про эти схемы и пристально следит за ними. Если человек работал на компанию, а потом вдруг стал самозанятым с единственным клиентом - этой же компанией, то это красный флаг для налоговой, о том, что идёт подмена понятий. Нужно быть готовым к этому.

Худший ответ:
Странное у вас мнение что 80 процентов работодателей грешат этим, если бы так грузили то налоги бы просели дико
Подводные камни не применяется трудовой кодекс, работаете по договору подряда
Вопрос: Влияет ли порядок видеокарты в системе на производительность?

Лучший ответ:

всегда выше в списке (по приоритету?),

Мне кажется, они там идут в алфавитном порядке, по имени.

Влияет ли это на производительность?

Нет.

Прим. ко второй пикче - на встроенной графике есть нагрузка, на видеокарте - нет

Посмотри в настройках AMD - там должен быть выбор, какой адаптер использовать.
Для нетребовательных приложений, логично, нет смысла использовать дискретный

Худший ответ:
Обычно лёгкие приложения и интерфейс винды работают на встройке, а на внешней работают игрули и т.п. тяжелые 3д приложения.
В зависимости от драйверов иногда бывает что можно выбирать на какой видеокарте запускать приложения, бывает полезно если вдруг 3д приложение тормозит и автоматически не запустилось на внешней видеокарте.
Вопрос: Достаточно ли знаний МатАна и линейной алгебры для карьеры в области машинного обучения?

Лучший ответ:
Господи, да сколько можно одно и то-же спрашивать.  Бедный qna.habr.
Ну нате вам ответы на ваши вопросы, изучайте:
https://www.analyticsvidhya.com/blog/2019/10/mathe...
https://www.kdnuggets.com/2020/06/math-data-scienc...
https://towardsdatascience.com/the-roadmap-of-math...
https://proglib.io/p/obuchenie-data-science-kakie-...
https://habr.com/ru/post/432670/
https://www.datasciencecentral.com/profiles/blogs/...
https://qna.habr.com/q/1015602#answer_1980250

Худший ответ:
никакой особой математики не надо. нейронная сеть это система достаточно  простых нелинейных уравнений с очень большим количеством параметров (уже миллиарды!). Эту систему можно решить только численно, подбирая параметры с помощью многомерной оптимизации, этот процесс называется обучением. Для ускорения используют метод жадного обучения. В остальном это исскуство и мистика
Вопрос: Как выводить только цифры и буквы в print?

Лучший ответ:
Как выводить только цифры и буквы в print?
Почитать про списки, кортежи, словари, json..., а также почитать про методы работы с ними.

Худший ответ:
Вопрос не очень понятный. "Без скобок"... Если очень не постараться, скобки не выведутся...  Если у Вас кортеж
tup = (1, 2)
то это и выведется. Если хотите вывести первый его элемент, то
print(tup[0])
А если все элементы через пробел, то 
print(" ".join(tup))