Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: В чём прикол использования Map (и прочих подобных) в JS против for?

Лучший ответ:
Функция все же несколько иная по типу действия и как следствие применимости, нежели чем for. Основное и самое главное отличие, это новый-независимый контекст работы с элементом массива при каждом проходе(функция обратного вызова), с моментальным сбором результатов в новый массив. Да, в for все это тоже можно организовать, но кода потребуется несколько больше, а тут получается очень кратко. И еще, при переборе массива, не нужно указывать индекс элемента массива, как это делается в for. В общем map действительно хорош, но применять его понятное дело надо там - где это уместно.

Также в условиях решения одинаковой задачи(простого перебора массива):
+ Быстрое написание кода
+ Код более читабелен, в том числе теми кто будет потом работать с вашим творением

Худший ответ:
Функция все же несколько иная по типу действия и как следствие применимости, нежели чем for. Основное и самое главное отличие, это новый-независимый контекст работы с элементом массива при каждом проходе(функция обратного вызова), с моментальным сбором результатов в новый массив. Да, в for все это тоже можно организовать, но кода потребуется несколько больше, а тут получается очень кратко. И еще, при переборе массива, не нужно указывать индекс элемента массива, как это делается в for. В общем map действительно хорош, но применять его понятное дело надо там - где это уместно.

Также в условиях решения одинаковой задачи(простого перебора массива):
+ Быстрое написание кода
+ Код более читабелен, в том числе теми кто будет потом работать с вашим творением
Вопрос: Как перенести DokuWiki на телефон с Android?

Лучший ответ:
Решилось установкой на DokuWiki плагина "Site Export Plugin", экспорт всей вики в html, открытие полученных файлов в обычном браузере без киких-либо веб-серверов.

Худший ответ:
«Докувики» написана на PHP, значит нужен сервер. Ставите приложение сервера, устанавливаете вики, копируете папки data и media.
Вопрос: Как лучше разместить сетевое оборудование в коммутационном шкафу (небольшая организация)?

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

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

Худший ответ:
Небольшая организация на 200 линков по свичам? (ну в принципе кто как считает)
Имхо, надо начинать с того как у вас медь по рабочем местам раскидана и оттуда смотреть как лучше это все сгруппировать в шкафу.
Но я бы всетаки между патчпанелями и свичами насовал органайзеров, потому как по правильному линки делаются с хорошим запасом (на каждое место минимум по 2 конца, в каждый кабинет по максимально расчетному количеству мест), а свичей с ходу достаточно только на активные, да и потом в друг кому захочется ставить POE телефоны и проч., делать какую коммутацию между панелями или ставить другие свичи
Вопрос: Важен ли опыт разработки казуальных игр(типа «три ряд» и "ферма") чтобы устроиться в студию геймдизайнером где делают ААА-проекты?

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

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

Вот об этом и нужно говорить на собеседовании при трудоустройстве.

Весь предыдущий опыт - идёт только бонусом (об этом не нужно "кричать" и делать на это упор во время собеседования).
Вопрос: Как вставить в текст переменную с текстом?

Лучший ответ:
who = "Вайтишники"
what = "гуглить"
print("{0} даже не пытались {1}".format(who, what))

Ну как? Разгадали ребус?

Худший ответ:
1) вместо %имя_переменной используйте %s для строк, %d для чисел и так далее;
2) вариант с f-string
3) format (массив или словарь)
подробнее здесь -> https://realpython.com/python-string-formatting
Вопрос: Как настроить подсеть?

Лучший ответ:
Я извиняюсь, у вас Нетис в режиме маршрутизатора? Т.е. там поднят NAT и подсеть 0.1 за натом?
Ну так и не получится ничего. 
Отключите нафиг на нем DHCP-сервер и NAT, переведите вай-файных клиентов в ту же 1.1 и проблема решена. Т.е. сделать из точки доступа "тупо свич для беспроводников".
Ну или отключайте NAT, на DHCP настраивайте для клиентов 0.1 маску 255.255.0.0 с гейтвеем туда же куда у 1.1 а для парней из 1.1 руками добавляете роут к 0.* на 0.1...  но первый вариант проще :)

Худший ответ:
Можете на Netis сделать проброс портов, если у вас специфичная служба на телефоне.
К примеру, вам нужен только 80 порт (веб морда какого-то приложения в телефоне). Телефону выдаете статичный ip, к примеру 192.168.0.200, и настраиваете проброс порта с к примеру 8080 на 192.168.0.200:80. Далее в основной сети у Netis ip  к примеру 192.168.1.50, тогда стучитесь на 192.168.1.50:8080 - и попадаете на 192.168.0.200:80. Как-то так.
Вопрос: Как исправить AttributeError: 'NoneType' object has no attribute 'to_dict'?

Лучший ответ:
Заходим в переводчик и вбиваем туда ошибку. На выходе получаем: AttributeError: объект 'NoneType' не имеет атрибута 'to_dict'.
То есть, вы пытаетесь вызвать у "Ничего" функцию to_dict.

И это не полный код, и лог ошибки.

Худший ответ:
А как у вас код в принципе запустился и дошел до 56 строчки, если здесь он выкидывает ошибку?

rele1 = types.InlineKeyboarButton(text="Ввести имя пользователя", callback_data="6")

Пользуйтесь редакторами кода
Вопрос: Можно ли какие то истории из жизни постить на хабре?

Лучший ответ:
Пишите, такое на Хабре встречается.

Хабр пинок не даст, если укажете подходящие хабы.
А вот минусы в карму... Это уж как напишете. :)

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

Лучший ответ:
Ну, в данном случае, есть возможность создавать экземпляры класса с заранее заданным query. Тоже самое конечно можно сделать и через замыкание. Для такого функционала нет необходимости создавать класс, гораздо проще использовать функцию, а query передавать во время вызова функции. 
Но когда в вашем классе появится дополнительный функционал, например пагинация, то тут уже будет проще использовать класс, т.к. он проще расширяем. Но если реализовывать пагинацию внутри класса Search, то это уже нарушает принцип единственной ответственности, и я бы вынес функционал пагинации в отдельный класс. 
Но если как раз рассматривать саму пагинацию, то там удобнее использовать классы, вот примерно такую структуру я бы создал
(пример на TypeScript)class Pagination {
    private currentPage: number;
    private countPages: number;
    public goToPage(page: number): void;
    public goToNext(): void;
    public goToPrev(): void;
    // ну, можно всякие геттеры для приватных полей.
}
Можно конечно легко обойтись и функциями, храня поля в замыкании, но тут чисто на любителя, кому-то больше нравится ООП подход, кому-то больше функциональный.

Худший ответ:
Ну, в данном случае, есть возможность создавать экземпляры класса с заранее заданным query. Тоже самое конечно можно сделать и через замыкание. Для такого функционала нет необходимости создавать класс, гораздо проще использовать функцию, а query передавать во время вызова функции. 
Но когда в вашем классе появится дополнительный функционал, например пагинация, то тут уже будет проще использовать класс, т.к. он проще расширяем. Но если реализовывать пагинацию внутри класса Search, то это уже нарушает принцип единственной ответственности, и я бы вынес функционал пагинации в отдельный класс. 
Но если как раз рассматривать саму пагинацию, то там удобнее использовать классы, вот примерно такую структуру я бы создал
(пример на TypeScript)class Pagination {
    private currentPage: number;
    private countPages: number;
    public goToPage(page: number): void;
    public goToNext(): void;
    public goToPrev(): void;
    // ну, можно всякие геттеры для приватных полей.
}
Можно конечно легко обойтись и функциями, храня поля в замыкании, но тут чисто на любителя, кому-то больше нравится ООП подход, кому-то больше функциональный.
Вопрос: Как удовлетворить зависимости?

Лучший ответ:
всегда иду вниз в таком случае..т.е. шаг дальше попробовать поставить libssl1.0-dev и т.д.

Худший ответ:
Пакету требуется более новая/старая версия libssl-dev. Или репозитории криво подключили.
Самое оптимальное скачать исходники пакета и пересобрать под целевую систему. Остальное ненужные танцы с бубнами.
Вопрос: Какие знания программирования нужны чтобы попасть в google или facebook?

Лучший ответ:
В таких компаниях берут не тех у кого "знания программирования", а тех кто умеет думать и решать серьезные задачи.

Худший ответ:
любые, там не по конкретным языкам берут
вот, если интересно. https://habr.com/ru/post/499394/
Вопрос: Обращение к классам CSS. Как правильнее?

Лучший ответ:
Можно .more_text { ... }, главное чтобы класс был уникален. Также, если имеется вложенность, то при добавлении media-запросов необходимо будет повторять полную вложенность.

Худший ответ:
Не смотря на то что css - это каскадная таблица стилей, этот самый каскад рекомендуется использовать по минимуму. Ознакомьтесь с методологией БЭМ или стилевыми модулями.

Почему так - например блок лого, лежит в блоке хедер. Но лого решили переместить в блок мейн. Придется менять и стили. А если обращаться к классу элемента без каскада, то стили трогать не придется
Вопрос: Как решить user.User.is_superuser: (models.E006) The field 'is_superuser' clashes with the field 'is_superuser' from model 'user.user'.?

Лучший ответ:
PermissionsMixin уже есть в AbstractUser

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

Лучший ответ:
Надо для начала почитать книги про ООП, особенно первые главы, где описывается для чего вообще нужно ООП.
Какие книги по ООП ты читал?
Предвижу ответ - никакие.

Худший ответ:
Самый действенный способ - влиться в разрабатываемый в стиле ООП проект open source. Или устроится разработчиком (стажером) в коммерческую фирму, где такие проекты разрабатываются.
Вопрос: Как в C++ создать процесс с именем Load.txt?

Лучший ответ:
CreateProcess всё равно какое расширение у исполняемого файла, если оно не в списке расширений исполняемых файлов. Так, что можно переименовать любой .exe в load.txt и запустить функцией CreateProcess.

Худший ответ:
В стандарте С++ нет понятния процесса.
Вопрос: Как натянуть многостраничный сайт на WordPress?

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

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

Лучший ответ:
Блоки расставьте нормально и всё увидите сами.

Худший ответ:
А почему sum это процедура, а не функция. Она же считает 1 значение. И тогда можно так
Sum(n1,m1,f1) + Sum(n2,m2,f2)
Также не понятно зачем Sum1. И что там происходит... S3 она не выводит. Да и для сложения двух результатов вряд-ли нужна отдельная процедура.
Вопрос: Mikrotik RB2011iL к нему подключено два свитча с VLan-ми. Как настроить чтобы все всех видели?

Лучший ответ:
Bridge VLAN Filtering.официальное руководство с примерами 

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

Лучший ответ:
Для начала научитесь выражать всё словами.
Что такое "эквивалентность"? Это значит, что оба операнда (A и B) равны, то есть либо оба они равны единице, либо оба равны нулю. 
Оба операнда равны единице: A∧B
Оба операнда равны нулю: ¬A∧¬B
Общее выражение: A∧B ∨ ¬A∧¬B
Избавляемся от дизъюнкции: ¬(¬(A∧B) ∧ ¬(¬A∧¬B))
Остаётся составить таблицу истинности и проверитьA | B | ¬(¬(A∧B) ∧ ¬(¬A∧¬B))
0 | 0 |           1
0 | 1 |           0
1 | 0 |           0
1 | 1 |           1
Во втором случае утверждение будет "из A следует B и из B следует A".
(A→B) ∧ (B→A)
Остаётся избавиться от конъюнкции
¬((A→B) → ¬(B→A))

Худший ответ:
Самый универсальный вариант - составить таблицу истинности, а по ней составить СКНФ или СДНФ
Вопрос: Оценить сборку ПК для игр, бюджет 30т?

Лучший ответ:
Лютая дичь, собранная из отборного хлама.

Худший ответ:
нет-нет нет, пожалуйста, выкиньте блок питания такой, возьмите что-то подороже-получше, thermaltake например, или seasonic. Денег потратите не сильно больше, но по надежности будет получше.
Есть неплохое правило - не покупать блоки питания, заканчивающиеся на "cool"
Вопрос: If с проверкой присвоения — приемлемо?

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

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

Приоритет у оператора ! один из самых низких, и в любом случае ниже чему у оператора = 
Поэтому вполне можно использовать в таком контексте

Непонятно только, зачем условие растянуто на три строчки.
Форматирование кода должно помогать его читать, а не усложнять чтение. поэтому написать
if (!$user_bank = self::findOneBy('`user_id` = ?', [$id]))
{

хотя опять же, для читабельности, лучше разнести на две строчки
$user_bank = self::findOneBy('`user_id` = ?', [$id]);
if (!$user_bank)
{
Вопрос: Как можно защитить XML файл от открытия любым человеком?

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

Худший ответ:
Не класть файл в открытый доступ.
Отдавать скриптом, который принимает в параметре имя файла, проверяет авторизацию и отдает файл с соответствующими заголовками
"как отдать сгенерированный РНР скриптом ХМЛ файл" в гугле можно найти чуть более чем дофига примеров
Вопрос: Как можно разбить строку на подстроки в django templates?

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

Худший ответ:
Можно написать свой фильтр для этого:@register.filter
def split(value, delimiter):
    return value.split(delimiter)
Вопрос: Интервал (setInterval) очень сильно тормозит работу. Что можно сделать, чтобы оптимизировать?

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

Худший ответ:
Зачем ты используешь setInterval, если во вью есть watch или computed
Вопрос: Стоит ли создавать сообщество начинающих программистов?

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

Планируется ещё создать обучающий материал.
Который будет по определению хуже существующих учебников и официальной документации.

Худший ответ:
Придумайте проект на Laravel, который будет интересен не только вам, и выложите его разработку в открытый доступ. Тогда у вас есть шанс, что кто-то будет заинтересован в нем поучаствовать, и вы сможете пообсуждать не сферу в вакууме, а этот конкретный проект.
Впрочем, если быть реалистом, то стоит признать, что искать этого кого-то все равно нужно вам самому.
Вопрос: Кто/Как отвечает за синхронизацию объявлений между “.cpp” и “.h” файлами?

Лучший ответ:
Если функция объявлена, но не определена, то будет ошибка линковки. Если даже не определена, или нет подходящих сигнатур, то ошибка компиляции.
За синхронизацию изменений отвечает сам программист. Помогать ему в этом могут разные средства разработки, например IDE. Многие IDE строят модель кода, и могут показывать сообщения об ошибках ещё до сборки программы. Помимо этого, IDE обычно предоставляют всевозможные варианты рефакторинга: хотите что-то переименовать, используйте соответствующую функциональность среды разработки. В этом случае, имя функции изменится корректно везде или почти везде.
На практике, если вы что-то забыли, то получите ошибку сборки программы (на одном из этапов). Если проект большой и сложный, то он может и собраться, но работать очень неожиданным образом, например если линковщик нашёл где-то символы, но не там где нужно :)
Ну и рекомендую почитать любую книгу по C++, всё что я написал выше, будет в первых главах книги.

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

Лучший ответ:
Этим должен заниматься человек, который руководит командой и знает обе части системы. Если такого нет то надо садиться вместе и обсуждать это. Результатом подобной работы, как правило, является документ OpenAPI (Swagger). Можно прямо у них на сайте и набросать

Худший ответ:
Делаете таблицу:
1. URL вызова функции API
2. Назначение
3. Метод вызова
4. Параметры запроса
5. Коды ответа
6. Примеры ответов при удачном исходе
7. Примеры ответов при ошибках

Этим должен заниматься разработчик (архитектор) приложения.
Бэкендщик - только проверяет и корректирует.
Оба - договариваются об общении между сервером и приложением между собой.
Вопрос: Что станет с VPS если закончится память?

Лучший ответ:
сработает oom-killer и прибьёт какой-либо из процессов, освободив часть памяти.

Худший ответ:
VPS можно проапгрейдить - добавить ОЗУ, сколько требуется.
Вопрос: Как сделать бекап сетевой папки через VEEM?

Лучший ответ:
1) Да, можно. Только он бекапит не сетевые папки, а сервера. Если сервер физический ставьте агента Veeam, если виртуальный, то поддерживается Hyper-v и Vmware виртуализация. До 10 VM можно бекапить бесплатно, только для этого надо ставить Veeam Backup & Replication Community Edition.
2) Нет. Делает полные и инкрементные.

Худший ответ:
Бекап сет.шар планируется в 10й версии.
Вопрос: Ссылка или импорт шрифтов?

Лучший ответ:
Загрузите шрифты к себе на сайт, и подключайте их в css

Худший ответ:
2 вариант оптимальнее думаю будет.
Вопрос: Ошибка при конвертации python в exe. Как решить?

Лучший ответ:
Не получается создать процесс, Вы с какой ОСи пытаетесь преобразовать? если Windows, попробуйте запустить командную строку от имени администратора, если linnux, то добавляете ли sudo?

У меня была похожая проблема с pyinstaller, при этом cx_freeze собирал без проблем. Помогла установка предварительной версии 4.х. 
pip install https://github.com/pyinstaller/pyinstaller/archive...

Худший ответ:
1) Как вариант опробуй pip uninstall pyinstaller, а затем снова pip install pyinstaller. Старая добрая переустановка....
2) Или попробуй сохрани это как скрипт или из ide заюзай
import os
import shutil
import PyInstaller.__main__

exe_file_dir = r'A:\only_exe'    # куда сохранить экзешник
script_address = r'A:\Python\self\script.py'    # путь до скрипта твоего и имя скрипта

PyInstaller.__main__.run([
    '--onefile',
    '--noconsole',
    '--specpath', exe_file_dir,
    '--workpath', exe_file_dir,
    '--distpath', exe_file_dir,
    script_address
])


all_file_dir = os.listdir(exe_file_dir)
for file in all_file_dir:
    file_name, file_extension = os.path.splitext(file)
    if file_extension[1:].lower() != 'exe':
        path = exe_file_dir + '\\' + file
        if os.path.isfile(path):
            os.remove(path)  # remove the file
        elif os.path.isdir(path):
            shutil.rmtree(path)  # remove dir and all contains
Вопрос: Как грамотно назвать общую страницу для входа / регистрации / восстановления пароля?

Лучший ответ:
auth
И не лисапедить

Худший ответ:
Сделал такую схему - вроде аккуратно звучит :)

/аккаунт/вход
/аккаунт/регистрация
/аккаунт/восстановление-пароля
Вопрос: Как сделать отправку смс?

Лучший ответ:
Без регистрации - никак.
Есть куча сервисов, которые отправляют смс через своё API.
Гугл в помощь

upd:
Если ты думаешь, что тебе тут дадут код, который будет отправлять смс бесплатно, - тебе не сюда!

Худший ответ:
А вот на С# можно)))))
using System.IO.Ports;
static SerialPort port;
port = new SerialPort();
private static void OpenPort()
        {
            port.BaudRate =2400; // еще варианты 4800, 9600, 28800 или 56000
            port.DataBits = 7; // еще варианты 8, 9

            port.StopBits = StopBits.One; // еще варианты StopBits.Two StopBits.None или StopBits.OnePointFive         
            port.Parity = Parity.Odd; // еще варианты Parity.Even Parity.Mark Parity.None или Parity.Space

            port.ReadTimeout = 500; // самый оптимальный промежуток времени
            port.WriteTimeout = 500; // самый оптимальный промежуток времени

            port.Encoding = Encoding.GetEncoding("windows-1251");
            port.PortName = "COM5";

            // незамысловатая конструкция для открытия порта
            if (port.IsOpen) 
                    port.Close(); // он мог быть открыт с другими параметрами
            try
            {
                port.Open();
            }
            catch (Exception e) { }
   }
  port.WriteLine("AT \r\n"); // значит Внимание! для модема 
  System.Threading.Thread.Sleep(500);
  port.Write("AT+CMGF=1 \r\n"); // устанавливается текстовый режим для отправки сообщений
  System.Threading.Thread.Sleep(500);
port.Write("AT+CMGS=\"+375123456789\"" + "\r\n");
System.Threading.Thread.Sleep(500);
port.Write("Hello from modem!" + char.ConvertFromUtf32(26) + "\r\n");
System.Threading.Thread.Sleep(500);
port.Close();
port.DataReceived += SerialPortDataReceived;
}
Вопрос: Как сделать всплывающую панель как на андроиде?

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

Делаем блок контейнер с минимальной высотой во весь вьюпорт.
Делаем в нём 2 "слота". Первый - верхний, где рисочка, за которую пользователь будет тянуть. Второй - сам контент.
Позиционируем его фиксированно так, как больше нравится - вообще не видно, видно только рисочку, видно часть контента.
На рисочку добавляем обработчик нажатия и тача. В момент, пока опущенна кнопка мыши или палец не оторван от экрана отслеживаем на документе позицию курсора\пальца.
Ну и собственно по факту смещения указателя меняем позицию нашего контейнера.
Чтобы у этого "окошка" были состояния стоит добавлять проверку. Например, если текущее состояние "закрыто\открыто" и передвинули вверх\вниз более чем на N пикселей, то менять состояние на противоположное.
Не забываем снимать обработчики с документа когда кнопка мыши отжимается или палец убирается от экрана.
В целом - профит.


Таким образом, состояния отвечают за то, как отобразить элемент. Спрятанным или раскрытым. При смене состояния меняется отображение.
Таким образом, не обязательно будет всё время открывать окошко пальцем. Сменили переменную состояния - оно открылось\закрылось.
Состояния можно хранить в css классах элемента.

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