Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как делать такого рода постеры?

Лучший ответ:
Где найти такие карты городов, стран в высоком качествеOpen vector maps
Естественно под свои нужды доработать "напильником"

Худший ответ:
Где найти такие карты городов, стран в высоком качествеOpen vector maps
Естественно под свои нужды доработать "напильником"
Вопрос: Как проверить значения массива на схожесть?

Лучший ответ:
Еще одно решение - вычислить расстояние Левенштейна между строками https://www.php.net/manual/ru/function.levenshtein.php

Расстояние Левенштейна - это минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2. Сложность алгоритма равна O(m*n), где n и m - длины строк str1 и str2 (неплохо по сравнению с similar_text(), имеющей сложность O(max(n,m)**3), но все же довольно много).

echo(levenshtein('abcdefg', 'amcdehg'));
Если расстояние между строками равно 2, значит нужно вставить, заменить или удалить 2 символа, соответственно строки похожи.

Функция для работы с русским языком: https://gist.github.com/shankao/b0d92e15c65852fda481

Пример:
$lines = [
  'Продам клинок демона +6 / Солнцеликий плащ +2 тьма',
  'Продам клинок демона +6, Солнцеликий плащщ +2тьма',
  'Акция! Продам клинок демона +6, Солнцеликий плащ +2тьма',
  'Продам клинок ангела +3, Луноликая куртка +4свет',
  'Продам клинок ангелла +3, Луноликая куртка +4свет',
  'Акция ! Продам клинок ангела +3, Луноликая куртка +4свет',
  'тест акции',
  'проверка демона',
  'проверка ангела',
];

$res = [];
$allSimilar = [];

foreach ($lines as $line) {
    $similarLines = [];

    if(in_array($line, $allSimilar)) {
        continue;
    }

    foreach ($lines as $line1) {
        $lev = mb_levenshtein($line, $line1);
        $maxDistance = (int)(0.2 * max(mb_strlen($line), mb_strlen($line1)));

        if($lev <= $maxDistance) {
            $similarLines[] = $line1;
            $allSimilar[] = $line1;
        }
    }

    $res[$line] = $similarLines;
}

print_r($res);
Похожими считаются фразы, которые отличаются менее чем на 20% их длины.

Худший ответ:
Можно попробовать сравнивать похожесть строк https://www.php.net/manual/ru/function.similar-text.php, и если % схожести больше n-значения убирать одно из них
Вопрос: Как проверить отсутствие интернета и показать заглушку?

Лучший ответ:
Предположительно так:https://developer.mozilla.org/en-US/docs/Web/API/N...if (navigator.onLine) {
  console.log('online');
} else {
  console.log('offline');
}

Худший ответ:
https://www.npmjs.com/package/react-detect-offline
попробуй это
Вопрос: Посмотрите и оценить сборку пк, подходят ли комплектующие друг к другу, правильно ли выбраны компании комплектующих, все ли правильно?

Лучший ответ:
Я бы добавил ещё 16Gb оперативки и поменял SSD с SATA на NVMe.

Худший ответ:
Подождите новое поколение видеокарт
Вопрос: Как установить Linux на флешку из под MacOS?

Лучший ответ:
Проблем добавляет новый linux дистрибутив eXternOS
Ну так в топку его, это очередная васянская поделка, которая проживёт пару месяцев.

Возьмите VirtualBox, подрубите туда флешку и накатите на неё Linux. Всё.

Худший ответ:
Идете https://unetbootin.github.io и  загружаете утилиту записи iso образов дисков linux на usb, затем качаете netboot версию интересующего вас linux (обычно это образ на несколько десятков мегабайт), записываете и перезагружаетесь с этой флешки. Затем проходите установку по сети, на эту же флешку, в очень простом текстовом интерфейсе.
Вопрос: Xcode. Как запустить приложение на физическом устройстве (без аккаунта разработчика)?

Лучший ответ:
Эээээ... Может я отстал от жизни, но для того чтобы дебажить на реальном устройстве аккаунт разработчика _нужен_.
Не обязательна подписка за те самые сакральные $99, но сам аккаунт разработчика (бесплатный) нужен чтобы подписать.
Многие путают аккаунт разработчика, который заводится бесплатно, и энролл на платную программу, которая нужна для публикации в AppStore, которая стоит $99 в год.

Худший ответ:
Запускать приложения на девайсе без аккаунта уже давно можно. Ищите проблему.
Возможно вы компилируется апп с новой версией ios, а не девайсе старая.
Вопрос: Что выбрать: информационную безопасность или программирование?

Лучший ответ:
Yoonji,Что выбрать: информационную безопасность или программирование?не могу выбрать направление. 
Вот смотрите, вы выбрали себе два направления, но ВУЗ вы не выбрали, экзамены пока еще не сдали.
  На основе имеющихся данных, можно сказать так: Поступайте на очное туда, куда сможете поступить на основе того что у вас будет. ЕГЭ с высоким баллом, деньги, знакомые.
  Перевестись (по смежным специальностям), если хорошо будете учиться, начиная со второго курса не проблема. Заодно поймете, а надо ли оно вам.

Худший ответ:
Хорошего безопасника сложно найти. Специалиста по Check Point например. Востребованность высокая, проблем с тем чтоб найти работу и З\П будет меньше. ИМХО.
Вопрос: OpenVPN подключение «по цепочке»? Возможно ли?

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

Худший ответ:
ХМ, Единственное что может смотреть куда ходят пользователи, это прокси. Например squid, но я не уверен точно, что им можно замутить такую маршрутизацию. Надо про него почитать.
Вопрос: Может ли отсутствие заземления компьютера влиять на его компоненты?

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

Худший ответ:
Может ли отсутствие заземления компьютера влиять на его компоненты?Да. Ведь вместо неё используется нейтраль. Поэтому все приборы вокруг (например, микроволновка) оказывают на компьютер влияние. Попробуйте повернуть вилку.
Проводка: для стиральной машины электрик должен был с заземлением провод подвести, отдельный автомат и УЗО.
Вопрос: Как получить одинаковые хеши на разных ОС?

Лучший ответ:
Но из за разных кодировок не выходит
Использовать одну и ту же кодировку

Худший ответ:
Как получить одинаковые хеши на разных ОС?Хэшировать одинаковые данные по одному алгоритму.

Но из за разных кодировок не выходит.Если не выходит, значит либо данные не одинаковые, либо алгоритм хэширования разный.
Вопрос: Почему при подключении к серверу-донору VPN показывает настоящий IP?

Лучший ответ:
Потому, что для возможности маршрутизировать ваш трафик через VPN, ваша таблица маршрутизации вынуждена исключать адрес самого VPN-шлюза, иначе она не сможет соединиться с VPN-шлюзом.
Если вам необходимо сокрытие адреса и на этом сервере, этого можно добиться подключением с другого места, т.е. либо перенеся VPN-сервер на другую ноду, либо используя сторонние прокси, либо используя Tor.
Ещё можно подключаться к серверу по SSH по его внутреннему IP в этой приватной сети, а затем входить на сайт через local port forwarding, настроив его, например, на 1234:127.0.0.1:80, а затем открывая у себя в браузере 127.0.0.1:1234. В этом случае в логах сайта подключения будут происходить с 127.0.0.1. 
Возможные нюансы: 1) ссылки на сайте должны быть относительными, а не заполнены полным доменным именем, иначе в браузере они все будут выглядеть не как 127.0.0.1:1234/something/, а всё-время переключать на основной домен; 2) сам сайт для этого должен разрешать приём подключений без указания домена, иначе случится несовпадение location/vhost и сайт таким способом не откроется.

Худший ответ:
Если я не ошибаюсь, то надо отказаться от MASQUERADE в пользу SNAT
То есть удалить строки, где openvpn трафик засовывается в MASQUERADE, а вместо этого прописать:iptables -t nat -I POSTROUTING -s 10.10.15.0/24  -j SNAT --to-source БЕЛЫЙ_IP_VDS
Кстати,  SNAT быстрее работает, чем MASQUERADE
Вопрос: Почему скорость моего SSD на записи, вместо 500 мб/с, есть 1-8 мб/с?

Лучший ответ:
Потому что указывается максимум в идеальных условиях.
Т.е диск в принципе способен показывать при чтении блоков  4кб  55000 IOPS.
Это возможно - но только в определенных условиях, далеко не всегда.Во первых это скорость чтения. А если там будет смешанный режим  чтение и запись, все будет гораздо хуже.Во вторых это скорость при активном кэшировании - кэш кончился и все, скорость упала в разы.В третьих  это скорость при чистом диске, а если там фоном выполняется сборка мусора - опять же в разы падает.  В четвертых эта скорость только при длинной очереди, если очередь меньше 32 он так не сможет. 
Так же многое зависит от ФС, как именно ФС работает с диском.
Вообще все  NAND SSD показывают хорошие IOPS только в режиме большой очереди.  Без очереди - там гигантские задержки и они все портят. (по сравнению с hdd задержки мизерные, но для таких скоростей гигантские)
Если нужны реально большие IOPS смотрите в сторону 3dXpoint памяти от интела и микрон.

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

Лучший ответ:
Узнать запрсы по которым переходили на сайт очень просто - зарегистрируйте сайт в Яндекс и Google вебмастерах и Метрике с Аналитикой (кроме запросов найдете еще огромную кучу полезной информации). А по поводу мест в выдаче - есть огромное количество различных сервисов (единственный минус - они платные).

Худший ответ:
Лучше всего увидеть по каким запросам показывается сайт это Google search console и Яндекс вебмастер. 
Запросы из Гугла в аналитике вы не увидите из-за not provide, а метрика покажет только свои запросы из Яндекса.
Вопрос: Как завершить процесс при движении мыши?

Лучший ответ:
Первое, что приходит в голову, создать свой screen saver, который будет запускаться при простое и будет отдельным процессом запускать синхронизацию. При движении мыши screen saver будет закрываться попутно убивая процесс синхронизации.

Худший ответ:
Такое через AutoIT можно провернуть. Получаем координаты мыши. через  минуту сверяем с новыми. если они равны значит неактивность прользователя. Запускаем процесс. и дальше сверяем координаты мыши.
Вопрос: Как реализовать систему хранения и использования паролей?

Лучший ответ:
"Незнакомый компьютер без драйверов" с удовольствием стырит ваш пароль с токена по пути до его поля для ввода в LastPAss

Худший ответ:
Если это для себя - то купи себе ноут, и в нем сделай виртуалку где будеш использовать ЛастПасс в изолированной среде.
За ЛастПасом сейчас много малвари охотиться. поэтому если у тебя в нем например, хранятся логины и пароли в Банкинг (финансы), то лучше его прятать в доверенную среду (виртуалку) где будет установлен один браузер для входа на сайты. В этой виртуальке лучше не открывать Ворд, ПДФ файлы. 
Ну если хочеться всетаки с USB флешкой с паролем, ну ок. Но ведь содержимое флешки ведь надо бекапить ? как и куда ты будеш это делать ? Если этот вопрос не решить - есть большой риск все потерять.

Вообще сейчас подобного рода Модель Рисков надо проектировать с учем методики "Zero Trust". т.е. надо исходить из предположения что доспустим ЛастПасс тебя подведет - пароли рано или поздно "утекут" (или они исчезнут, не важно как, потеряеш флешку или ключ мастер доступа). Тогда важнее предусмотреть - как быстро я могу заблокировать логины, збросить, восстановить их?  Какой вред мне могут нанести если Злохакер получит доступ в мой гмайл \ учетку ? Как я об этом узнаю ?  как минимизировать этот ущерб ?
Вопрос: Где находится файл конфигурации OPcache?

Лучший ответ:
На вопрос может точно ответить phpinfo()
Смотрите секции Loaded Configuration File, Additional .ini files parsed

Худший ответ:
В директории где установлен "OPcache".
Вопрос: Как стать топовым WEB разработчиком?

Лучший ответ:
стать топовым WEB разработчиком на фрилансе/удаленке?
Сразу возникает вопрос, где та оценка качества по которой вы хотите стать топ разработчиком. Вы берете одну из самых низкопороговых ниш, и пытаетесь стать "царем горы".
Знаю HTML, CSS, Bootstrap 3,4, верстал на них, сейчас освоил FlexBox, знаю как адаптивно верстать.
С таким даже на работу не берут, без знания хотя бы js\php - всё сложно, будете перебиваться мелкими заказами и демпинговать.
Желание делать сайты под ключ, дизайны сайтов, приложений и разработка.
Готовьтесь к огромной конкуреции среди таких же "топовых разработчиков"

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

Сейчас неплохие деньги будет делать тот, кто 10 лет нарабатывал своё портфолио, обзавелся клиентами, и чем ваши навыки в виде "знаю чуток, верстал на них, сейчас освоил flexbox" - рынку Вы с такими темпами пригодитесь лет через 5, когда освоите пару фреймворков, либо 4-5 cms + php.

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

Лучший ответ:
Можно попробовать перевести дату и время по отдельности к типу str, затем через пробел сделать конкатенацию, после чего полученное выражение подать на вход функции pd.to_datetime, которая вернет полноценный datetime формат искомых значений.

В случае, если изначальные даты у вас в формате datetime сделать так:
pd.to_datetime(df['start_date'].dt.date.astype(str) + ' ' + df['start_time'].dt.time.astype(str))

А если изначальные даты в строковом формате, то опустить "dt.date" и "dt.time" части.

UPDATE

Еще можно сделать так, например:
date = pd.to_datetime('start_date')
time = pd.to_timedelta('start_time')
date + time 
Чтобы получить datetime формат следует сделать следующее:
(date + time).to_pydatetime()

Худший ответ:
Можно так (если колонка 'start_time' имеет нормальный тип datetime, а не просто строку)
df['new_time'] = df['start_date'].combine(df['start_time'], lambda x,y: datetime.datetime.combine(x, y.time()))
Вопрос: Правильно ли при клике остановить таким образом Timeout?

Лучший ответ:
Нет. 
Утрируя: скобочки после имени функции - это вызов этой функции прям сейчас, вон там где ты это написал. 
Обработчиком на клик в данном случае, соответственно, назначается то, что функция возвращает. А clearTimeout у нас не возвращает ничего. 
В итоге прямо в момент запуска кода cityRemoveTime будет остановлен, а на каждый клик у нас будет происходить ничего.

Худший ответ:
Нет. 
Утрируя: скобочки после имени функции - это вызов этой функции прям сейчас, вон там где ты это написал. 
Обработчиком на клик в данном случае, соответственно, назначается то, что функция возвращает. А clearTimeout у нас не возвращает ничего. 
В итоге прямо в момент запуска кода cityRemoveTime будет остановлен, а на каждый клик у нас будет происходить ничего.
Вопрос: Можно ли использовать старые версии Windows для комфортной разработки?

Лучший ответ:
Денис Гребенюк 
 Asus Vivobook 15 x542UN

Хм только в починку.  Впрочем я бы попробовал переставить windows, удалив все свистелки и перделки. 
Плюс возможно что забилась система охлаждения или засохла термо паста. 
Ноут достаточно хороший, так что разбирайтесь с софтом

Худший ответ:
На сайте Асуса для этого ноута лежат драйвера под windows 10 (Вы их кстати устанавливали?). Значит десятка на нём должна работать. И проблема не в ней.
Вопрос: В какую разработку еще можно успеть войти помимо web?

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

Худший ответ:
Что ужасного в веб разработке? Если ты толковый программист то быстро найдешь приличную компанию и вольёшься в коллектив который работает над большим качественным проектом. Ну а если ты так себе то да - на тебя повесят пару сайтов на Вордпрессе и еще Опенкарт какой-нибудь, которые ты будешь лечить от вирусняков и прочих заражений раз в пол года, сидя ночами перед компом в режиме "Рожа в мыле жопа в поте", или прикручивать к ним бредовые фичи которые выдумала левая пятка коммерческого директора.
Вопрос: Как найти сумму элементов массива в С?

Лучший ответ:
Cумму находят сложением.

Худший ответ:
"Фрилансим" немного по другой ссылке.
Вопрос: Здраствуйте, у меня возникла проблема с воспроизведением звука в коде?

Лучший ответ:
У вас в системе не установлена утилита say, которую пытается использовать скрипт.

Худший ответ:
Я нашел утилиту say для Linux .
Вот ссылка:
https://askubuntu.com/questions/501910/how-to-text...
Я прописал в консоле : sudo apt-get install gnustep-gui-runtime
и проверил командой : say "Hello" и все заработало правда на русском пока не воспроизводит , тут надо чуть поискать . Спасибо за помощь.
Вопрос: Как пушить только безошибочный код?

Лучший ответ:
Пользоваться code review системами.
Github, bitbucket, gerrit, gitolite и др.
Ставишь, настраиваешь доступ к гиту через эту систему, запрещаешь прямой коммит в master или release бренч, чотбы все разработчики делали свои feature ветки и разрабатывали в них, а потом создавали пулл реквест на мерж в мастер.
И тестирование работы проверяли до мержа на своей ветке. Мержить - только после проверки.

Худший ответ:
Использовать WebStorm. При отправке в репозиторий, по-умолчанию, WebStorm проводить проверку кода.
Вопрос: NULL в полях БД, а нужно?

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

Худший ответ:
ИМХО, NULL штука полезная. Да их нужно учитывать везде. Но Вы же сами проектируете БД и пишите запросы - проверяйте производительность.
Вопрос: Увеличивается ли износ SSD в данном случае?

Лучший ответ:
Лучше всего он будет себя чувствовать в выключенном состоянии, но Вы же не для этого его брали. Сейчас очень многие хостинги даже на SSD перебрались. Да и на заборах информации очень много пишут. Я с одним ssd постоянно лет 5 работал, пока ноут не продал. Сейчас последнему ssd уже года 2 тоже. Из этих 2-х лет мб часа 4 ноут не был включен. Полет нормальный.

Худший ответ:
Много читал,что на срок службы ssd влияет количество циклов перезаписи.Да, и не только на ssd, но так же и на HDD. Но обращать внимание на это не стоит - в домашнем использовании вы в это не упретесь точно.Подскажите кто-нибудь если использовать его для постоянной круглосуточной раздачи,однажды на него залитых файлов,насколько это вредно для устройства?Работать вообще вредно, от работы кони дохнут.
А по поводу вреда-  это так же вредно как включать телевизор, или разогревать еду в микроволновке.
Они от работы тоже портитятся постепенно.
Вопрос: Как поступить, если оказалось два аккаунта Upwork, очень старый и новый?

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

Худший ответ:
Старость аккаунта не влияет. Я бы новый оставил.
Вопрос: Стоит ли переквалифицироваться в android разработчика?

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

Худший ответ:
Из раздражающего:
1) Пожалуй самый раздражающий фактор это переход с Java на Kotlin потому что не все проекты переходят на Kotlin, а разработчики языка Java в добавок обещают внедрить фичи похожие на котлиновские в новых версиях и тогда не понятно будет обратный переход или нет.
2) появляется понемногу Kotlin native который тоже отличается от Java и по сути требует ручного управления памятью.
3) приложение можно написать на react native и опять же знания java не нужны в таком случае, но поскольку ты андроид разработчик то должен быть в курсе как там обстоят дела, чтобы в случае необходимости написать на react native.
Вопрос: Как перевернуть массив в си?

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

Худший ответ:
В цикле до половины массива, в цикле 2 счетчика: счетчик с начала массива увеличивающийся и счетчик с конца уменьшающийся. На каждой итерации меняешь местами элементы массива индексируемые счетчиками.
В случае не четного количества элементов, центральный элемент остается на месте.
Вопрос: С# — что стоит изучать, чтобы попасть на первую работу?

Лучший ответ:
Можно пойти на хэдхантер и посмотреть какие технологии просят рядом с c#. На мой взгляд самый большой спрос на фулстек разработчиков. Это значит c# + asp.net + EntityFramework + TSQL +js. За год можно «нахвататься» на джуна, если будете стараться, забудете про досуг и развлекухи. А потом после устройства на работу еще нужно будет по вечерам дотягивать пару лет точно.

Худший ответ:
js стоит изучать, всегда удивляло "знаю html/css" - знать мало, нужно понимать как устроены бэм,кроссбраузерная вёрстка, адаптивная вёрстка, т.к. все это требуют на постоянной основе. С c# вам понадобится не один год чтобы просто понять как работать, т.к. вы банально js не знаете,а он не язык не строгой типизации, в отличии от c#.
Вопрос: Софт для сканера. Что есть?

Лучший ответ:
а чем вам Scanitto Pro не угодил? Я весь офис на него подсадил , все сканеры с ним работают без проблем

Худший ответ:
Scan2PDF 
Мне, ёё функционала хватает для базового сканирования
Вопрос: Как расположить блок в строке таблицы?

Лучший ответ:
1. Дополнительные строки в таблице (которые открывать по клику), геморрно и тебе придется считать на JS размер 3х строк, чтобы под них кинуть плашку с тенью.
2. 8-й TD с обтеканием. И принудительным отображением не как ячейка таблицы (старый добрый хак для адаптивных таблиц). Очень давно не применял, поэтому могу ошибаться на счет исполнения, гугл поможет.
3. Не использовать таблицы.

Худший ответ:
Ну, на самом деле это всё можно решить довольно просто, без разрушения связности строк в таблице. Но для этого необходимо добавить разметки в структуру таблицы
https://codepen.io/Strelok011/pen/wvKZadJ

Иными словами:
1. чтобы сделать тень вокруг строки - вам нужно завернуть каждую строку в tbody, для раскрытого элемента добавлять ей класс с тенью
2. добавляете в tbody еще строку tr>td(colspan=число колонок), внутри верстаете в диве весть выпадающий контент.
Вопрос: Как оптимизировать рисование линий в WPF?

Лучший ответ:
От нескольких тысяч все что угодно будет тормозить
Направление указали уже вам, дополню:
Чтобы не скушать всю оперативу и проц
читайте про BitmapCache 
https://docs.microsoft.com/ru-ru/dotnet/api/system...
и RenderTargetBitmap 
https://docs.microsoft.com/ru-ru/dotnet/api/system...
в UWP кеширование на более верхнем уровне реализовано, там попроще, но в WPF тоже можно сделать хорошо.
Алгоритм вкратце:
2 слоя - верхний -там где тыкаете мышкой
и нижний - кеш
Добавили линию (на верхнем слое) - рендерите в картинку (верх+низ) - отрисовываете эту картинку на нижнем слое (например через ImageBrush), линию на верхнем удаляете.
Т.е. как только пользователь закончил фигуру/действие - кешируете.
Если нужен интерактив на уже нарисованном (например узлы точек подсвечивать), тут сложнее, но тоже возможно (запоминать коодридинаты узлов и при нахождении там мыши - создавать Xaml объект.) 
С интерактивом в подобных алгоритмах как правило много математики.
Т.е. у вас в оперативной памяти всегда 1 картинка + сколько-то объектов - полилиний.
К слову, через кеширование кроме рисования можно делать довольно производительные анимации, производительный зумминг, производительный скролл…
Есть еще вариант: реализовать рисование на DirectX на C++ и поместить контрол. Более нативно и производительнее.
P/S
свойсвто IsHitTestVisible 
https://docs.microsoft.com/ru-ru/dotnet/api/system...
позволяет не реагировать объекту на мышь (т.е. отключает интерактив) это полезно для объектов фона, сильно бустит производительность.
(т.к. по умолчанию WPF определяет все события интерактива на всех объектах, а их может быть бесчисленное множество, и далеко не на всех нужно иметь реакцию на нажатие/OnMouseMove)

Худший ответ:
Тормозит наверное потому что на on paint перерисовываете все объекты (как минимум при добавлении новой?) Рисуйте линии в битмап однократно и уже его на on paint отрисовывайте.