Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как организовать паттерн «репозиторий» с возможностью переключаться на разные СУБД, а именно в c#?

Лучший ответ:
Это для получается для каждого репозитория нужно писать getter/setter в главном репозитории? Очень много и накладно.
Это можно решать метапрограммированием через Reflection API и дженерики.Для переключения между субд я решил сделать Фабрику. Но на этом и возник ступор.
Реализации фабрик для этого уже написаны и называются IoC-контейнерами. Принципы работы с ними можно посмотреть здесь. Ну или где угодно в интернете. Популярные реализации: Castle Windsor, Unity, Ninject и т.п.
Суть в том, что контейнер сначала можно настроить:interface IMyEntityRepository {...}
class MySqlEntityRpository: IMyEntityRepository  {...}
...
config.Bind<IMyEntityRepository>().ImplementsBy<MySqlEntityRpository>();
А потом позвать:var repo = ioCContainer.Get<IMyEntityRepository>();
Кроме очевидных плюсов, IoC-контейнеры могут:собирать полный граф зависимостей по своей таблице (A зависит от B, B от C и т.п., внедряя необходимые реализации автоматически, т.е. мы можем создавать сразу A)конфигурироваться без перекомпиляции (autowiring (автоматический поиск реализаций заданных интерфейсов) или по информации из конфиг-файла, вроде XML).

Худший ответ:
3. Каноничный репозиторий должен уметь только CRUD. Посмотрите в сторону CQRS. В этом вопросе как раз Queries и подойдут.
Ещё рекомендую почитать про Domain Driven Design (DDD), например Эрик Эванс.
Вопрос: Стоит ли использовать вендорные префиксы CSS в 2017 году?

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

Худший ответ:
Скажем так даже в 2020 их стоит использовать!
Вопрос: Датчик веса, как измерить что-то легкое?

Лучший ответ:
Не совсем понятно, что вам нужно - измерять вес постоянно или сигнализировать об отклонении от конкретного значения.
Если просто измерять вес - кухонные электронные весы (например Sonax SF-400A, с точностью в 0,1 г).
Еще варианты:
- гуглить "тензодатчик";
- использовать систему рычагов + электроника к ней;
- использовать лабораторные механические весы.

Худший ответ:
если есть время и желание, то посмотрите в сторону arduino или подобного
Вопрос: SSL в openserver? Не работает из коробки?

Лучший ответ:
Помучился 3 дня. Решение найдено.
Отправляемся в OSPanel\modules\http\ВашаВерсия\conf
И изменяем там generate.bat Новое содержимое generate (на примере домена app.ru):@echo off
set OPENSSL_CONF=%~dp0..\conf\openssl.cnf
..\bin\openssl req -x509 -sha256 -newkey rsa:2048 -nodes -days 5475 -keyout rootCA.key -out rootCA.crt -subj "/CN=GM_pAnda/"
..\bin\openssl req -newkey rsa:2048 -nodes -days 5475 -keyout server.key -out server.csr -subj "/CN=app.ru/"
..\bin\openssl x509 -req -sha256 -days 5475 -in server.csr -extfile v3.txt -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt
..\bin\openssl dhparam -out dhparam.pem 2048
Содержимое файла v3.txt (его нужно создать в папке conf рядом с generate.bat):nsComment              = "Open Server Panel Generated Certificate"
basicConstraints       = CA:false
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer
keyUsage               = nonRepudiation, digitalSignature, keyEncipherment

subjectAltName = @alt_names
[alt_names]
DNS.1 = app.ru
Запускаем bat. Ждём примерно 5-10. Зависит от железа. 
Как консоль закрылась, значит сертификаты cгенерировались, для apache нужно два файла (rootCA.crt, server.crt)  копируем их в "OSPanel\userdata\config\cert_files" с заменой.
Далее копируем файл "Apache-********_vhost.conf" из OSPanel\userdata\config в папку с сайтом. 
на моём примере это файл "Apache-PHP-7_vhost.conf" Тут уже зависит от вашей конфигурации OSPanel. 
Так же устанавливаем сертификат на компьютер. Запускаем файл rootCA.crt и устанавливаем строго в "доверенные корневые центры сертификации".  
И устанавливаем server.crt. В личное. Нужно перезапустить браузер. перезапускаем OSPanel. Радуемся.

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

Лучший ответ:
Если Вы действительно хотите реализовать подобное (и если я вас правильно понял), то Вам нужно будет сделать не только это.
Шаг 1.
1) Создайте страницу /catalog/index.php, на этой странице выведите $_REQUEST
2) Создайте правило (взял из примера выше, у пользователя Артём Лучников )array(
    "CONDITION" => "#^/([a-zA-Z0-9_-]*)/catalog/.*#",
    "RULE" => "city_code=\$1",
    "PATH" => "/catalog/index.php",
)
3) Проверьте, что при заходе, например на /moscow/catalog/, открывается страница и в выведенном массиве есть city_code=moscow
Шаг 2.
1) Скопируйте в свое пространство компонент catalog (комплексный) [например custom:catalog], вынесите его на страницу /catalog/index.php
2) Добавьте в component.php еще одну разделяемую переменную в arComponentVariables - назовите ее, например CITY_CODE, напишите обработчики в тело комплексного компонента, которые будут "переваривать" введенный текст и будут перенаправлять на нужные страницы. В шаблоне sections.php сделайте вывод $_REQUEST
3) Проверьте, что при заходе, например на /moscow/catalog/, открывается страница и в выведенном массиве есть city_code=moscow
Шаг 3.
1) В вынесенном компоненте (из примера выше это custom:catalog), сделайте обработчик указанной переменной city_code, которая и определяет, есть ли указанный город в инфоблоке
2) Проверьте что все работает корректно
Ну и вишенка на торте, что если бы вы сделали выбор инфоблока, откуда берутся города в переменные компонента.

Худший ответ:
А не проще ли сделать вместо domain.ru/city_code/ так: city_code.domain.ru ?
Вопрос: Где найти программу для построения компбинаций?

Лучший ответ:
Два цикла for

Худший ответ:
Можно в Excel, например
Вопрос: Что мне грозит?

Лучший ответ:
Амазон тебе грозит.
Амазон тебе будет.

Худший ответ:
Ничего, люди писали у них от Hetzer долги по 3000$ и всё норм
Вопрос: Насколько данный подход устаревший?

Лучший ответ:
Да, подход устарел.
Сейчас нужно копать в REST-подход, когда сервер выступает лишь прослойкой между БД и клиентом и отдает данные по запросам к API. Весь MVC перекладывается на фронтенд — тут вступают в ход фреймворки React/Redux/Angular.
Еще становится популярным GraphQL. Библиотека минимизирует лишнюю информацию, которую клиент запрашивает у сервера.

Худший ответ:
Роутинг сделал следующим образом:
https://github.com/klein/klein.phpКаркас делаю через require 'header.php' etc.
https://getcomposer.org/Пишу в процедурном стиле, т.к в ООП пока не силен, с базой работаю посредством redbeanphpты не будешь силен в ООП, если не будешь пытаться ...
Вопрос: Что почитать об архитектуре CMS?

Лучший ответ:
не уточнили какую цмс вам надо.
цмс бывают двух типов:
(1) просто система для управления контентом, которая ставится на сервер как правило в одном экземпляре, для упрощения работы менеджерам над контентом, или пользователм сайта. 
(2) и коробочные цмс которые либо свободно распространяются либо продаются, но факт в том что много юзеров использует их. 
для проектирования цмс первого типа, нужны общие знания о ООП в пхп и MVC. проект очень простой, нужно знать только ООП/MVC и желательно выбрать какой нибудь фреймворк symfony/laravel/yii.
во втором случае система должна быть супер универсальной, функциональной. очень большие сложности возникают для обеспечения писателям плагинов(сторонним разработчикам) хорошего внутреннего апи (систему хуков hooks). 
за второй тип с уровнем знаний типа "опыт работы со всякими ВордПрессами и с их расширением" браться крайне не советую. для этого нужен очень основательный опыт написания проектов описанных в п1. только после нескольких лет работы на чистом пхп или с фреймворками, можно пробовать браться за такое. то есть нужна именно практика, одними книжками тут дело не решить. 
разработка же цмс первого типа ничего сложного, паттерны там общие как при разработке любого сайта на фреймворках, поэтому любые книжки по паттернам и проектированию подойдут.

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

Лучший ответ:
Может быть я буду неправ с точки зрения прошаренного математика, но я представляю комплексные числа, как двумерные числа. Грубо говоря, для обычных чисел мы можем нарисовать прямую, где то, что слева - меньше того, что справа. А вот для комплексных чисел нужна уже плоскость, и там привычные больше/меньше не работают. Нужно вводить новые определения для нового "больше", и нового "меньше".
Зачем это все надо? В них проще тригонометрия и всякие там хитрые штуки считать. На бумажке быстрее. Как научить комлюхтер и языки программирования это дело воспринимать -- не знаю. Возможно, это лишь абстракция, и никаких ускорений в вычислениях нет, только визуально приятнее тем людям, кто в комплексных числах привык считать. 
Есть еще большая жесть, где число вида a + bi + cj, ну или, для особых эстетов, когда число есть сумма из неограниченных итых, житых, катых, и прочих -тых.

Худший ответ:
Все очень просто
Вопрос: Как быть, если вы устали от проекта?

Лучший ответ:
Было такое. Я работал сам, людей не нанимал, не тот уровень ещё был. Но тоже устал. Доделал самые важные дела и оставил его как есть. Со времнем пришли пользователи, подросла посещаемость, я отдохнул и у меня вновь появилась мотивация и стимул его развивать.

Худший ответ:
Выложите код на GitHub и ваше детище энтузиасты доведут до завершения за месяц.
Вопрос: Javascript как зациклить вывод дней недели?

Лучший ответ:
const days = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
let currDay = 0;

while (confirm(`${days[currDay]}. Хотите увидеть следующий день?`)) {
  currDay = (currDay + 1) % days.length;
}

Худший ответ:
Генераторы вам в помощь.
Вопрос: Обязательно ли использование тестов в Rails?

Лучший ответ:
Сейчас ты все понимаешь, а через 3 месяца, когда контроллеров будет не 5, а 20, моделей не 8, а 35, код начнет ломаться в самых неожиданных местах. И в обнаружении причин как раз помогут трудолюбиво и бережно написанные тесты. Так что пиши, не ленись.

Худший ответ:
Обязательно если нужно быстро выдавать работоспособный продукт. Даже если 10 контролеров по 7 экшенов уже минимум 70 действий для проверки. А обычно ещё по 2-3 проверки надо сделать. Это всё прожать в браузере? Или потом клиенту говорить: "ой упало, мы сейчас исправим". 
В общем от задачи зависит. Что надо получить на выходе и какого качества.
Вопрос: Где найти бинарник openvpn server'а для роутера с архитектурой процессора MIPS?

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

Худший ответ:
Если на роутере открыт telnet это не означает что на него можно ставить все что угодно.
Ваш роутер не поддерживается openwrt, поэтому вряд ли вы с ним что-то сможете сделать.
Вопрос: Можно ли на php создать программу, которая будет связанна с сайтом?

Лучший ответ:
можно.

Худший ответ:
короткий ответ: можно.
длинный ответ: можно.
язык - любой на котором можно делать десктоп приложения. например, C#
Вопрос: Где можно пройти хорошее обучение онлайн. Желательно JavaScript + PHP + MySql сразу или поэтапно. Заранее спасибо?

Лучший ответ:
Codeacademy.com, интерактивная обучалка, он базу вам и даст.

Худший ответ:
https://loftschool.com/course/pop - плюс-минус адекватный курс. Но не следует ждать, что ты заплатишь и волшебно станешь классным разработчиком на выходе. Все это можно собирать по частям и бесплатно. Если интересует подробнее, пиши мне на почту
Вопрос: Есть ли смысл защищать от CSRF кнопку «Выход»?

Лучший ответ:
По-моему хорошей практикой является защита от CSRF всегда и везде

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

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

Худший ответ:
Зачем сносить. Сделайте через архивацию тома. В освобожденное место установите linux
Вопрос: Как сделать свой тоггл эффект?

Лучший ответ:
написать на css её дефолтные стили и с помощью toggle() добавить класс, c допустим active, в котором описаны изменения этого селектора, на css естественно

Худший ответ:
Написать свой класс для "широкого" состояния и с помощью .toggleClass() добавлять/удалять его.UPD: клик
Вопрос: Можно ли открыть JSON файл через JS без AJAX-а?

Лучший ответ:
Можно портировать в броузер обычным http.
Для этого есть хороший тег script, поскольку объект json суть есть объект JS. Поэтому в самом файле нужно назначить объект json глобальной переменной.
Файл:var fileJSON= {...}
Портирование в броузер:<script src="pathToFile.json"></script>
Использование:<script>
if(fileJSON) console.log(fileJSON);
</script>

Худший ответ:
Если файл лежит на сервере, то понятное дело что его придется как-то грузить в клиент. Как - зависит от вашего выбора, фантазии и задачи, способов множество. Если файл планируется читать и парсить локально, то в JS есть FileReader, это можно сделать с помощью него.
Вопрос: Как отсортировать элементы так, чтобы слева находились нечетные элементы, а справа — четные?

Лучший ответ:
Прочитайте про битовые операции. Если коротко, у нечетного числа в бинарном представлении последний бит всегда 1, например 3 это 11, 5 это 101  и тд.

Худший ответ:
2017 год. Вам не нужны std::binary_function и прочая устаревшая фигня. Да и можно заюзать лямбду, если этот компаратор нужен только в одном месте кода.
Судя по описанию задачи, Вам нужно не отсортировать массив -- Вам нужно сделать partition.
Воспользуйтесь стандартными алгоритмами std::partition (если относительный порядок чётных и нечётных элементов между собой не важен) или std::stable_partition (если нужно сохранить оригинальный порядок).
Пример:std::stable_partition(vec.begin(), vec.end(), [](int x) { return x % 2 == 1; });
Вопрос: Как построить изучение С++ после С#?

Лучший ответ:
БЕЗ материала для новичков
https://en.cppreference.com/w/Olsson Mikael. C++17 Quick Syntax ReferenceOlsson M. C++ 14 Quick Syntax ReferenceSwaminathan Jeganathan. Expert C++ ProgrammingModern C++ Programming Cookbook
Год издания: 2017
Автор: Bancila M.
Издательство: Packt Publishing
ISBN: 9781786465184C++17 STL Cookbook
Год издания: 2017
Автор: Jacek Galowicz
Издательство: Packt
ISBN: 9781787120495Clean C++
Год издания: 2017
Автор: Roth S.
Издательство: Apress
ISBN: 978-1484227923Arthur O’Dwyer. Mastering the C++17 STL: Make full use of the standard library components in C++17Meyers S. Effective C++ Digital Collection 140 Ways to Improve Your ProgrammingGregoire M. Professional C++ 2018Horton I., Van Weert P. Beginning C++17: From Novice to ProfessionalSmith R. (ed.) Working Draft, Standard for Programming Language C++ 2017C++ Notes for Professionals 2017

Худший ответ:
Какое-то базовое понимание относительно современной версии крестов на основе знаний о C# позволяет получить C++ Succinctly. Но это просто чтобы не путаться и начать понимать, чем языки друг от друга по своей сути отличаются.
Вопрос: Можно ли на js проверить поддержку href="tel:"?

Лучший ответ:
Так чекайте на предмет мобильного устройства с помощью https://github.com/hgoebl/mobile-detect.js
По поводу единичных случаев подмены userAgent, с этим не стоит бороться. Ваш алгоритм то предусматривает какое то разветвление и другое действие для не мобильных устройств. Дополнительная проверка на ширину устройства будет вообще ненадежным методом определения мобильного. Если говорить про исключения, то ведь есть еще планшеты с симками с установленными звонилками. Все не предусмотришь.

Худший ответ:
Можно проверить user-agent на мобилки, это же для них ссылка.
А узнать может ли девайс открыть эту ссылку через приложение через JS... не думаю. Да и какой в этом смысл?if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) )
Вопрос: Как в Python 3.6.5 вывезти список с нумерацией?

Лучший ответ:
items = ['молоко', 'сыр', 'творог', 'кефир', 'яблоко']
for i, item in enumerate(items):
    print(i + 1, item)

Худший ответ:
items = ['молоко', 'сыр', 'творог', 'кефир', 'яблоко']
length = len(items)
for i in range(length):
    print(str(i + 1), item[i])
Вопрос: Нет Windows forms в Visual Studio, можно установить?

Лучший ответ:
Скорее всего вы не включили C++/CLI во время установки Visual Studio 2017
1. При создании проекта жмем "Открыть установщик Visual Studio"
2. В установщике под Visual Studio 2017 Community жмем кнопку Modify
3. В открывшемся окне выбираем вкладку "Individual Components" (Индивидуальные компоненты)
4. Мотаем в низ пока не увидим "Поддержка C++/CLI", затем слева ставим галочку
5. После в правом-нижнем углу жмем кнопку Modify, готово!P.S. Если у вас установщик на русском, то названия могут отличаться.

Худший ответ:
Мне совет помог частично. Напрямую - нет, потому что указанная настройка уже стояла. Зато в левой колонке нашел "разработка классических приложений net". А вот там уже прописана возможность создания windows forms.
А создавать лезьте в Visual C#
Вопрос: Как защитить коммутатор от L2 петли без отключения избыточного линка?

Лучший ответ:
Придётся всю систему менять. Либо переделывать отдачу трафика на "анализатор" (вы, я так понимаю, строите IPS?) через маршрутизацию, т. е. выносить на уровень L3. Либо подавать на анализатор копию трафика через SPAN, а анализатор должен отстреливать spoofed-пакетами TCP RST в сторону клиента, прикидываясь сервером если соединение признано подозрительным. Тогда клиент будет сразу закрывать соединение.
Но отвечая на прямым образом поставленный вопрос -- защитить коммутатор от отключения избыточного линка можно настроив, например, port-channel на этих линках (между коммутаторами). Однако очевидно, что это не ваша история, и вам этот вариант не поможет. Так что остаётся только менять систему.

Худший ответ:
Обычно такие шарманки когда делают, входящий и исходящий трафик разводят по разным VLAN-ам. 
Насколько критично, что б он был в одном влане?
На Cisco Catalyst можно, то есть нужно написать на обоих портах switchport protected, а на аплинке такую строку не писать.
На порту 1 (для обработанного трафика) надо еще написать mac access-list, что б необработанный трафик не пер на него с аплинка. (unknown unicast будет так или иначе занимать полосу)
И вообще, если protected чем-то не подойдет - можно покурить тему private vlans.
Вопрос: Почему тормозит svg анимация?

Лучший ответ:
Анимации в svg не имеют аппаратного ускорения.
Выход - переписать на webgl
По сути шейдер будет не очень сложный.
Сначала отрисовываем первый фон в виде 2-х треугольников заполняющих весь вьюпорт. 
Потом отрисовываем анимированные треугольники, где в качестве текстурных координат используем координаты вершин в пространстве вьюпорта.
Дабы анимация вершин происходила тоже на GPU. Вершины треугольников нужно представить как координаты центра треугольника и отдельно смещение относительно центра.
Тогда в шейдер будет достаточно передавать только текущий скейл треугольников относительно времени анимации.

Худший ответ:
Вроде нормально все работает. Смотрел в лисе.
попробуйте почистить кэш
Вопрос: Как освободить порт 3000, занимаемый create-react-app?

Лучший ответ:
Вы можете отредактировать package.json , секция scripts и явно указать там другой порт:"start": "set PORT=3005 && react-scripts start"

Худший ответ:
Сначала Ctrl + C в консоли, потом только закрывать консоль)
Вопрос: Как запретить системе доступ к харддрайву?

Лучший ответ:
Вставляешь один диск - грузится одна система.
Вставляешь вместо него второй диск - грузится вторая система.
Полная изоляция.

Худший ответ:
Если системы разные, у них разные ОС - и они просто не будут монтировать неизвестные разделы.
Если системы одинаковые - запретить в самих ОС монтировать диски.
Вопрос: Как освободить место в root-разделе?

Лучший ответ:
Я к словам Дмитрия добавлю: 
Место закончилось - это сосем не повод добавлять его, а скорее повод провести анализ - почему закончилось.
Без такого анализа решение о добавлении пространства - это борьба с симптомами.

Худший ответ:
Посмотреть что занимает место: du -csh /* | sort -h
Создать раздел, перенести на него имеющиеся данные (например из /var), примонтировать новый раздел (например в /var).
Вопрос: Можно ли защитить KeePass (менеджер паролей) от KeeFarce (вирус основанный на DLL инъекции)?

Лучший ответ:
можно поставить виртуальную машину и запускать keepass в безопасной среде
еще один вариант, добавлять какой-нибудь символ в пароль, который не будет хранится в менеджере паролей, например пароль "123$€", в менеджере хранишь "123", в голове для всех паролей приставку "$€", тогда даже в случае утечки базы менеджера паролей, сохраненный пароль будет бесполезный..

Худший ответ:
берете открытый код keepass и меняете названия методов и файлов таким образом, чтобы вирус не мог менеджер паролей вообще обнаружить.
обфусицировать можно не только имена методов но и структуры данных, добавив в них свои поля, изменить типы имеющихся и т.п.
извините, но защита через сокрытие тут единственный метод защиты.
и в конце концов, при наличии администраторских прав, можно просто сэмулировать нажатие кнопок, вызвав меню экспорта базы в csv, мелькнувшее окно мало кто заметит.
Вопрос: C++: как унаследоваться одновременно от базового класса и «интерфейса» при этом если оба они имеют общий «интерфейс»?

Лучший ответ:
Виртуальное наследование

Худший ответ:
гугли виртуальное наследование.
Вопрос: Как на linux (centos) осуществить запуск/перезапуск процесса?

Лучший ответ:
Есть утилита pidof для Linux, возвращающая id процесса по имени.
Также одной из распространённых практик является сохранение id процесса при его запуске в постоянном файле /var/run/myprogram.pid
Если Centos 7, то процессами управляет SystemD, можно написать для него свой Unit.
Пример обёртки для запуска процесса с сохранением id в файле:#!/bin/bash
/path/to/mono /path/to/server.exe &
echo $! >/var/run/mono_server.pid

Худший ответ:
Можно зарегать свой сервер как сервис положив скрипт в init.d, и с помощью daemon   из libslack стартить/стопить плюсом будет еще авто-рестарт при падении.