Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Почему в файле auth.log множество попыток входа по SSH?

Лучший ответ:
Это боты. Да раздражают. Я бы поставил вход только по сертификату, сменил бы порт ssh на 2022 и настроил fail2ban

Худший ответ:
Почему в файле auth.log множество попыток входа по SSH?
Потому что не надо открывать SSH на весь интернет - хоть по ключу, хоть на нестандартном порту. Это изначально порочная практика, не приводящая к катастрофическим последствиям ровно до обнаружения очередной серьёзной 0-day уязвимости openssh-server.
Вопрос: Как сделать так чтобы в назначенное время код переставал работать?

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

Худший ответ:
Только серверное исполнение кода. 

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

А как ты будешь выполнять на сервере js код это уже другой вопрос. Если это какой-нибудь чат-бот или программка с уникальными в своем роде секретными алгоритмами, то можно тупо предоставлять подписку и запускать экземпляр на сервере или через API предоставлять доступ.
А если это обычный js код для сайта - то твоя идея мягко говоря очень странная.
Вопрос: Где взять реальную модель(образец) для Archi (ArchiMate) описывающую какое-то популярное веб-приложение (магазин, CRM, и т.п.)?

Лучший ответ:
Открываем сайт theopengroup и ищем там референсы если они вообще есть в природе. Мы даже для авиации нашли. 

Но если что, то Archimate не предназначен проектирования систем. Он предназначен для Enterprise Architecture и самое приближенное что там можно потенциально иметь - бизнес-функции и сервисную модель

Худший ответ:
В конечном итоге я пришел к выводу, что ArchiMate не мой вариант, мне нужны UML-диаграммы. Спасибо всем, кто помог советом!
Вопрос: Как правильно написать свой обработчик ошибок php?

Лучший ответ:
Перед тем как писать обработчик, надо сначала понять, а зачем он нужен. 
Потому что вот эта вот функция - она совершенно бессмысленная. 
Вся "обработка", которой она занимается - это добавляет бессмысленные фразы типа "Error_message" к тому что РНР выведет и так. 

Обработчик ошибок не должен заниматься удалением файлов. Обработчик вступает в дело, когда ничего исправить уже нельзя, и всё что остаётся - это показать пользователю страницу с извинениями и корректным НТТР кодом. Пример можно взять здесь: https://phpdelusions.net/articles/error_reporting

А вот обрабатывать ошибки надо с помощью оператора  try catch
Если надо откатить транзакцию, то всю её целиком надо поместить внутрь  try catch, в котором ловить ВСЕ ошибки, то есть \Throwable и после этого скорее всего добавить throw с тем же исключением, поскольку вряд ли при ошибке БД имеет смысл продолжать работу скрипта. Но зависит от обстоятельств.

Если надо удалить файлы, то опять же, заключить в try catch загрузку файлов, то тут просто заключить в try catch, всё почистить и написать какое-нибудь сообщение пользователю.

Худший ответ:
Если в скрипте произошла ошибка, то как мне откатить транзакциюстарайся чтобы все, что касается работы с каким то объектом, у которого состояние требует реакции (закрытие файла, транзакции бд и т.п.) то настоятельно рекомендуется описывать всю логику примерно на одном уровне/в одном месте

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

Язык программирования php рекомендует и предлагает для этого конструкцию try catch finaly, там где может произойти ошибка, в catch прописывай логику завершения именно данной секции (откатить транзакцию) и вызывай следующий throw по цепочке, в finaly же прописывай то что нужно исполнить в любом случае.

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

Лучший ответ:
Надо настроить маршрутизацию и NAT если потребуется.

Худший ответ:
Если под "увидеть" подразумевается "увидеть в сетевом окружении Windows" - то нет. Раньше это было возможно, но с некоторых пор M$ поломала все это нахрен и теперь старые инструкции - не работают, а новых просто нет.
Вопрос: Какое сетевое оборудование выбрать для системы камер видеонаблюдения?

Лучший ответ:
Купите Trassir. или сервер у себя поставьте или облачный. там уже всё есть внутри

Либо банально отдайте юзера sub поток с камер, а не основной

Для камер в 2мп вполне хватит 2000kb\s на камеру. что в запасом хватает для вашего гигабита

Худший ответ:
Что подразумевается под "диверсифицировать"?
Вам не хватает ширины канала, не хватает форматов отдачи?
Не знаю насколько сейчас актуально, можно сделать rtsp to rtmp конвертер и гнать всё в трансляции на youtube или аналогичные платформы.
Вопрос: Как разместить элементы, как на картинке?

Лучший ответ:
Это называется masonry-раскладка, есть подробная статья на Харб, в статье есть различные решения.
Есть готовое решение .

Худший ответ:
4 <div> с display: flex; и flex-direction: column; Подойдёт?
Вопрос: Нормально ли бросать (throw) внутри async функции?

Лучший ответ:
Где-то читал, что нехорошо кидаться ошибками изнутри async функций 
... надо только возвращать rejected Promise.
В этом `где-то` вас обманули, так как любое возвращаемое из `async` функции значение (да, включая throw) уже обёрнуто в `Promise`. 

const foo = async () => { throw new Error('Smth went wrong'); };
const bar = async () => Promise.reject(new Error('Smth went wrong'));
Работают абсолютно одинаково

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

reject не бросает исключения и исполнение кода не прервется. Исключение будет выброшено когда-то там потом, когда промис этого захочет.
new Promise((resolve, reject) => {
  reject("reject msg");
  console.log("wtf?????");
})
Вопрос: Какой двигатель выбрать?

Лучший ответ:
Конструкция уже есть? Нужно просто все посчитать.
Обычными кухонными весами, зацепившись за колесо крючком, начни раскручивать колесо с тем ускорением, скоростью и рабочей нагрузкой что тебе нужна, на весах будет число в ньютонах. Теперь бери двигатель (если есть с редуктором то с ним), закрепи веревку к оси и, накручивая ее на ось, поднимай груз, закрепленный с другой стороны, равный весу, который показывали весы. Собственно все что нужно ты поймешь.

И да, потом плюсуй 2х запас.

Худший ответ:
Колхозить из стекло-очистителя имеет смысл когда их много воляется в граже и начинает мешать.

Думаю надо купить что-то готовое:
https://aliexpress.ru/item/32607989173.html
или
https://www.europrivod.com/katalog/motor-reduktory...
Вопрос: Как пропустить через фотодиод 220 вольт?

Лучший ответ:
Реле (твердотельное или электромагнитное), по характеристикам способное коммутировать 220 V (на самом деле вас обманули, уже давно по нормам сетевое напряжение 230 V), а также нужной силы ток (про который вы не упомянули, а он важен).
т.е без двух трансформаторов на сторонахВообще непонятно, каким боком тут трансформаторы. Рекомендую поручить работу специалисту. Без знаний и опыта шутки с высоким напряжением могут оказаться фатальными.

Худший ответ:
расчитать max ток
емкосная нагрузка = может убить вашу схему, т.к. в момент вкл. при разряженых кондюках=ток буде максимальный
зы
пусть будет 10миллиампер
ну а там закон Ома+Фарадея
Вопрос: Как создать десктопное браузерное НЕ web приложение?

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

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

Я так полагаю, вы хотите использовать веб-браузер по умолчанию, как средство, для отображения интерфейса программы, то есть, программа будет управляться веб-интерфейсом. Что-то типа последней версии uTorrent WEB.

Если так, то вам нужно, средствами Python, реализовать простой локальный сервер.

В этой теме есть ответ на ваш вопрос
Вопрос: Минимизация стоимости входящих в роуминге. Как принимать звонок по сотовой сети и переадресовывать по интернету?

Лучший ответ:
Вариантики
1) Сложный, надо понимать что и как ты делаешь. Своя АТС+GSM шлюз, приложение на телефон. 
2) Запросить у своего оператора возможно отдать номер по SIP, поставить приложение на телефон.
3) Отнести симку оператору который поставит ее в свой шлюз и отдаст по SIP, поставить приложение на телефон.
4) Самый удобный и не требующий особых навыков. Поищи на ali устройство по ключевому слову SIMBOX

Худший ответ:
lostapp.ru/soft/roamer  тут поищите

сам роамер сдох
Вопрос: Не работает дизайнер в Visual studio. Почему?

Лучший ответ:
Значит форму отредактировали вручную, и где-то лишние символы или нет закрывающей скобки. Создайте заново форму.

Худший ответ:
В дизайнер руками лучше не лазить. Или, если лезете - чётко знать, что и зачем Вы делаете. 
Вариантов у Вас два:
- искать ошибку в дизайнере;
- создать новую форму и перенести логику (код).
Вопрос: Если витую пару завести на пины ардуино, то как определить, что с другой стороны она куда-то подключена?

Лучший ответ:
Я так понял, вам нужна идея алгоритма, определяющего, что другой конец линии подключён или не подключён к сетевому порту, чтобы вы реализовали его на ардуинке.
Это элементарно.  Проверка основана та том факте, что линия подключается к сетевому контроллеру через импульсные трансформаторы, т.е. обмотки с небольшим количеством витков провода. Фактически это аналог "прозвонки". Для 100-мегабитного соединения:
1. Подаём на пин, к которому подключён оранжевый провод, попеременно 0 и 1.
2. Через небольшую паузу (1...5 миллисекунд, чтобы закончились всякие переходные процессы на линии) на пине, к которому подключён бело-оранжевый провод, проверяем, что там есть.
3. Если подаваемый и принимаемый сигналы совпадают, то подключение есть. Если принимаемый сигнал не меняется, подключения нет.
4. Для гарантии повторяем то же самое на зеленой паре.

Для гигабитного соединения делаем такую же проверку и на синей и коричневой парах (а можно и не делать).

PS: С опозданием пришло в голову, что описанная процедура годится только если на другом конце линии - обычный порт, без PoE-питания. Если оно там есть, то между парами приложено 12 или 48 вольт, и при подключении к ардуине обеих пар это напряжение пойдёт прямо на её пины, что нехорошо. Поэтому проверять надо только на одной паре, и вторую (для подтверждения) можно проверять только после отключения первой. Так надо делать всегда, поскольку заранее неизвестно, есть ли на том конце PoE.

Худший ответ:
В принципе никак.
Вопрос: Как удалить элемент массива в localstorage, по нажатию на крестик, и перезаписать массив?

Лучший ответ:
1. меньше вложенности
if (data) { ... длинная простыня кода }, при отсутствии else лучше заменить на:

if (! data) return;
...тот же код, на уровень левее
2. некруто объявлять функции внутри if() и тем более внутри цикла for()

3. DRY ("Don't Repeat Yourself" – «не повторяйся»). При обнаружении сохранённых элементов в LS, и при создании новых, происходит одно и то же действие: создание элемента списка, навешнивание событий и пр. В функцию его.

По сути вопроса опять предложу переосмыслить архитектуру. Без деталей, в общем: есть массив (пустой, или заполненный из localStorage). Свежесозданные задания попадают в массив. Удаляемые — удаляются из массива.
При изменениях массива — сохранять обновлённый в LS; стирать всё нарисованное ранее, и рисовать весь список с нуля, как будто только загрузили страницу. Ничего, это быстро )

Худший ответ:
Нужно использовать обертку+замыкание для обработчика, удаляющего элемент по клику.
tasks.push(data); // тут вставили очередной элемент
let task_index = tasks.length - 1; // узнаем его индекс по длине массива, так как он в текущей ситуации последний
// несколько строк спустя
b1.addEventListener("click", 
(function(inner_task_index) // функция-обертка для изоляции контекста, сюда передается значение task_index, я специально выделил его другим именем inner_task_index, чтобы видеть контекст функции-обертки
  {
// обертка возвращает функцию-обработчик события  для addEventListener
return function delFromLocalSt() {
    task.removeChild(li);
        let array = JSON.parse(localStorage.getItem('task'));
        array.splice(inner_task_index, 1); // удаляем элемент по известному индексу используя механизм замыкания, используя контекст функции обертки
    localStorage.setItem('task', JSON.stringify(array));
   }
})(task_index) // вызываем хитрую обертку, чтобы обеспечить изоляцию переменной от контекста функции createEl
);
Вопрос: Как сделать кнопку копировать в буфер обмена?

Лучший ответ:
<div class="option">
  <div id="result">TextContent</div>
  <button id="copy">Copy</button>
</div>
let result = document.getElementById("result");

let copy = document.getElementById("copy");

copy.addEventListener("click", function () {
  copyToClipboard(result.innerText);
});

function copyToClipboard(text, onComplete) {
  if (navigator.clipboard) {
    navigator.clipboard
      .writeText(text)
      .then(() => {
        if (typeof onComplete === "function") onComplete();
      })
      .catch((err) => {
        console.error("Copy fail", err);
      });
  } else {
    let area = document.createElement("textarea");
    document.body.appendChild(area);
    area.value = text;
    area.select();
    document.execCommand("copy");
    document.body.removeChild(area);
    if (typeof onComplete === "function") onComplete();
  }
}

В песочнице работать не будет

Худший ответ:
Как-то так можно:
//...
	function copyResult() {
	    navigator.clipboard.writeText(result.textContent)
                .then(() => console.log('Done'))
                .catch((err) => console.log(err))
	}
Вопрос: Как отладить медленное выполнение запросов между docker-контейнерами и основной системой, и между docker-контейнерами?

Лучший ответ:
Тоже с этим сталкивался. Проблема в wsl2. А именно в файловой системе windows. Уже есть куча issue в основном репо. 
Пока что вариант перейти на HyperV. Если не доступно - страдать

Худший ответ:
примите как данность, docker - дитя linux, и на windows его портировали как получится, не со зла, а исключительно из-за того что windows сложная система и песочницу там запилить реально не просто.

разработчикам, а точнее девопсам, реально проще живется на linux, особенно когда работаешь с открытым кодом (а подавляющее большинство библиотек так или иначе это foss), советую не мучиться наконец и начать работать в linux

майкрософт это давно понимает и поэтому запилили wsl, ибо это способ хоть как то удержать главное, что определяет, на какими операционными системами будут пользоваться люди в конце концов - developers developers developers!
Вопрос: Возможна ли блокировка домена со стороны мобильного оператора? И можно ли её как то обойти?

Лучший ответ:
portal.nkrzi.gov.ua/index.php?r=site/index&pg=171&id=9613&language=uk
только на украинском, на русский редирект в корень

сменить домен, судя по Гуглу вы это умеете и тут пришли валенком прикинуться

Худший ответ:
Ну так может для начала связаться с оператором? По-моему, тут вопрос не в техническом, а в правовом поле. Либо ваш сайт что-то нарушает и попал в реестры РКН, либо оператор самодурствует, и тогда надо давить на него
Вопрос: Подойдет ли оборудование MikroTik для организации ЛВС школы?

Лучший ответ:
Делюсь. По мне так достаточно микрика RB-951 ))
Самый дешевый вариант - взять Ваш микротик и поставить неуправляемый свитч от Длин.
Если по красоте - тогда Ваш выбор оборудования подходит.
Экранированая витуха - зачем? достаточно обычной
По остальному - вроде всё верно
Патч-панель - по сути необязательно, можно напрямую всё завести без неё. (но это уже от ТЗ зависит)

Если выбираете "голову" между микриком и ubiquiti - я за микротик. какие дльше свитчи будут уже не важно.

Непонятно только одно - чем детям помешает вифи... он же безвреден. у них из розеток да смартфонов больше излучение)

Худший ответ:
Обратите внимание, что экранированная витая пара работает должным образом, только если ее экран подключен к заземлению. Иначе она может собирать на себя заряд как антенна и отдавать накопленное во что придется.
Вопрос: Почему не используют NoSql решения на каждого пользователя?

Лучший ответ:
Ежемесячно почтой пользуются более 27 миллионов пользователей.
вот яндекс например (это только те кто пользуется, а сколько зарегистрировано за 20 лет неизвестно)

А теперь представьте: придумали новую функцию и надо накатить миграцию в базе данных. 
Добавить столбец или создать таблицу там какую-нибудь очень нужную.
Это надо 27 миллионов раз накатить миграцию.
Очень эффективно получится? Деплоить по одному апдейту в месяц или вроде того)

А если в принципе надо переехать куда-нибудь и перенести данные, тоже собирать в кучу как-то 27 миллионов разных баз. Или даже сделать бекап например.

Про всякие аналитики, статистики и т.п. можно вообще не думать, неизвестно как можно будет подключиться к такому количеству баз чтобы сделать какую-то общую статистику.

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

а там данных на одного пользователя не больше миллиона значений
от балды цифра, а если у меня 2 миллиона? А если 3? Каждый раз всё переделывать когда появляется пользователь который выходит на ваши рамки?
А когда один пользователь перестанет влезать на один сервер?
А что если 10 пользователей занимают диск целого сервака, а нагрузки при этом никакой не создают - сервер простаивать будет просто так?

Ну в общем можно много чего еще такого придумать.
Это не поддерживаемо, не масштабируемо, неудобно ни с какой стороны.
Если бы было по другому так бы все делали.

Худший ответ:
Я думаю что твоя идея не лишена смысла. Можно на каждого пользователя поднимать экземпляр БД.
Что здесь хорошо изоляция и безопасность. Что здесь плохо обилие linux-процессов на каждого пользователя. Например если у тебя чат на 10 000 человек - то поднять столько-же процессов на одном хосте сложнее.  Любые операционки имеют какой-то минимальный футпринт памяти и ресурсов ОС на процесс. И переключение. Планировщик будет бегать между 10 тыщ процессов обслуживая их события. Что еще может быть плохо. Администрирование этого грида приложений. Бэкап проще делать имея 1 сущность процесса и 1 лог ошибок. А что делать с 10 тыщами логов. Отвественый девопс должен как-то просмотреть все логи? Или уже начать писать автоматизацию бэкапов. Кажется пустяк - но ты сядь и просто попробуй сам это сделать. Или мониторинг. Как проверить что все 10 тыщ не содержат в логах ошибок?

Вообще маппинг между приложениями и БД всегда идет сложным образом. Обычно m : n. И очень редко удается сделать 1:1 или как-то по другому.
Вопрос: Как в Linux разрешить доступ в интернет только определенным программам?

Лучший ответ:
Можно настроить фаирвол так, чтобы только определённые пользователи (UID) имели доступ в интернет, а потом запускать программы от имени этих пользователей.

Худший ответ:
app armor и se linux или cgroups, это правильный но сложный вариант, гуглится даже проект соответствующий там в описании ссылки на подробнее информацию

И да, это сложно.

Но есть ОЧЕНЬ простое решение - виртуализация/контейнеризация!
OpenVPN запускаешь внутри виртуальной машины (мышевозекательно libvirt + lxc, не требует ресурсов для работы), внутри этой песочницы поднимаешь ssh сервер (чтобы на его основе работал socks прокси, так как это встроенная фича, нужно на машине где нужен интернет подключиться к ssh серверу с ключом -D1080 и получишь socks proxy с портом 1080) либо какой-нибудь http прокси, и вот браузер запускаешь с настройкой этой прокси, при необходимости хост машину вообще можно от интернета отключить.

Так же можно и firefox в lxc запустить (сложно настраивать графику, но можно пользоваться графически сервером хост машины, настроив DISPLAY и права доступа xhost)

Этот способ очень хорошо изолирует приложение и очень прост в настройке, заметно проще чем фаервол
Вопрос: Как заставить взаимодействовать оборудование из разных Vlan/Подсетей?

Лучший ответ:
В целом все камеры работают с ПО или по своим протоколам (соответственно со своим dedicated software ) или если с другими VMS,  то по общепринятым , это зачастую rtsp или onvif.
Например дата порт для протокола Hikvision это 8100 или иногда 8000, их же IVMS 4200 работает как раз по ним.

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

Худший ответ:
Предположу что между подсетями firewall с пробросом портов, т.е надо открыть доступ по порту onvif в другую подсеть, возможно ещё и nat на gw подсети
Вопрос: Как мне сообщить пользователю в телеграмм боте, что он должен нажать на кнопки?

Лучший ответ:
> if message.text == 'Технология(Мальчики)':
Имел ввиду elif? У тебя вообще довольно много elif пропущено.

Вообще я бы посоветовал использовать словарь.
#код неполный! вставишь эти фрагменты в свой самостоятельно
#все задания описаны тут
tasks = {
  'Математика': 'Параграф 4 учить РТ 3',
  #ну и так далее.
}
#делаем кнопки
buttons = [types.KeyboardButton(name) for name in tasks] #по кнопке на каждое задание
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add(*buttons) #добавить все элементы списка buttons, как если бы мы написали их по одному

#Проверка полученной кнопки
if message.chat.type == 'private':
    task = tasks.get(message.text, None) #ищем текст, соответствующий кнопке
    if task is None: #не нашли
        bot.send_message(message.chat.id, 'Пожалуйста, нажми на кнопки')
    else:
        bot.send_message(message.chat.id, task)
И никакой лестницы if-elif

Худший ответ:
А зачем чередовать if и elif, если можно просто использовать каждый раз elif
Вопрос: Как реализовать алгоритм экспайринга элементов в базе данных?

Лучший ответ:
По-моему, ты накрутил сверх меры. Всё решается куда проще.

Структура таблицы, максимально упрощённая:
CREATE TABLE tasks (
    id PRIMARY KEY,
    definition,
    performer_id REFERENCES performer (id)
    expired_at DATETIME
);
Взятие (параметры - id обработчика и id задачи):
UPDATE tasks
SET performer_id = @performer_idб
    expired_at  = NOW() + INTERVAL 'performing time'
WHERE ( expired_at IS NULL or expired_at < NOW() )
  AND ( id = @task_id )
То есть, задачу можно взять, если её ещё никто не брал, или если время ожидания ответа на задачу истекло. И в качестве бонуса - видно, что либо задачу никто не брал, либо кто-то брал (только последний, если таких было несколько) и прогавал сроки.

performing time может либо поставляться снаружи как параметр, либо быть свойством задачи (с соотв. полем в структуре таблицы).

Худший ответ:
Зачем так сложно?

В БД делаем поля
status - статус таска (NEW, COMPLETED)
assignee - исполнитель
scheduled - дата до которой исполнитель должен предоставить результат.

Когда выбираем список задач для взятия - используем условие (status = NEW) AND (assignee IS NULL /*не назначена*/ OR scheduled < NOW() /*истекла*/)
Когда пользователь пытается сохранить результат - проверяем что исполнитель он и что таска не истекла. Если условие не выполнено - не даем сохранить.

И никаких демонов, тем более каждую секунду.
Вопрос: Документ с моими старыми логинами и паролями из вк. Откуда он взялся?

Лучший ответ:
ВК - это добровольно установленный троян. 
Поэтому не удивляйся что твои данные утекли

Худший ответ:
Может какой-то менеджер паролей использовали?
Который хранил пароли на диске открытым текстом