Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Почему разная высота блока с текстом в chrome на mac и windows?

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

Худший ответ:
Пользуйся rem em, у px есть различия в браузерах
Вопрос: Не понимаю как именно Retrofit парсит json с GSON и как с этим работать?

Лучший ответ:
При созднии объекта Retrofit Вы добавили конвертер для десериализации приходящих данных (в данном случае Gson). Этот конвертер реализуется через GsonConverterFactory.
.addConverterFactory(GsonConverterFactory.create())
В интерфейсе API Вы указали тип приходящих данных, завёрнутый в объект вызова Retrofit (Call):

Call<List<MyModel>> getData();

В итоге в метод onResponse() придёт List уже распарсенных данных (MyModel). Именно конвертер, который вы указали (Gson), по приходу данных десереализовал их в объекты того типа, которого Вы указали в интерфейсе API.

Худший ответ:
Здравствуйте!
Скидываю вам пример кода, в данном случае я использую Retrofit c Jackson (вместо GSON)

public interface LfkServerAPI {
    @GET("rest/categories/list")
    Call<List<CategoryDTO>> getAllCategories();
}

@Data
public class Category {
private Long categoryId;

    private String categoryName;

    private String categoryDescription;

}

@Getter
@Setter
public class CategoryDTO {

    private Long categoryId;

    private String categoryName;

    private String categoryDescription;

}

public class ApiClient {

    public static Retrofit retrofit = null;

    public static Retrofit getApiClient() {

        if (retrofit == null) {

            retrofit = new Retrofit.Builder()
                    .baseUrl(Constants.BASE_URL)
                    .addConverterFactory(JacksonConverterFactory.create())
                    .build();

        }
        return retrofit;

    }

}

Обратите внимание на этот участок кода:
LfkServerAPI lfkServerAPI = ApiClient.getApiClient().create(LfkServerAPI.class);
Call<List<CategoryDTO>> allCategoriesListCall = lfkServerAPI.getAllCategories();

allCategoriesListCall.enqueue(new Callback<List<CategoryDTO>>() {
    @Override
    public void onResponse(Call<List<CategoryDTO>> call, Response<List<CategoryDTO>> response) {

        if (!response.isSuccessful()) {
            Log.d(LOG, "Ответ сервера: " + response.code());
            return;
        }

        // Вызываем метод body() из полученного ответа, где будет наш pojo
        List<CategoryDTO> categoryDTOS = response.body();

        if (categoryDTOS != null) {

        	categoryDTOS.forEach(categoryDTO -> {
				Category category = new Category();	
                category.setCategoryId(categoryDTO.getCategoryId());
                category.setCategoryName(categoryDTO.getCategoryName());
                category.setCategoryDescription(categoryDTO.getCategoryDescription());
                category.save();
        	});

        }
    }

    @Override
    public void onFailure(Call<List<CategoryDTO>> call, Throwable throwable) {
        Log.d(LOG, throwable.getMessage());
    }
});
Вопрос: Процедурная генерация случайного мира из 100 на 100 клеток?

Лучший ответ:
Интуитивно можно действовать так:
1. Капнуть разными красками в N начальных точках, выбранных случайно.
2. Выбрать цвет для покраски следующей точки (случайно или последовательно).
3. Найти точку выбранного цвета, с которой еще не работали (нужно выходить из цикла если отработали все точки).
3.1. Если непокрашенных соседей нет, то запоминаем, что работали с этой точкой, идем опять на шаг 3 (или на шаг 2, можно случайно выбирать).
4. Выбрать у этой точки непокрашенного соседа (случайным образом).
5. Покрасить соседа выбранным цветом.
6. Запомнить, что работали с точкой, выбранной на шаге 3. Перейти к шагу 2.
7. Кончились точки с которыми не работали - скорее всего пора выводить результат.

Худший ответ:
Вот упрощённый вариант "на пальцах":
import cv2
import numpy as np
from PIL import Image
from itertools import product

N = 42
W = 200
H = 200

def distance(p1, p2):
    y1, x1 = p1
    y2, x2 = p2
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

canvas = np.zeros((H, W, 3), dtype=np.uint8)
centers = np.unravel_index(np.random.randint(0, W * H, N), canvas.shape[:2])
canvas[centers] = np.random.randint(0, 256, (N, 3))
centers = list(zip(*centers))

for x in range(0, W):
    for y in range(0, H):
        cy, cx = min(centers, key=lambda center: distance(center, (y, x)))
        canvas[y, x] = canvas[cy, cx]
Результат:

Для получения невыпуклых многоугольников можете случайным образом пообъединять смежные области. Например, берёте случайный центр, ищете ближайший к нему (или один из ближайших), закрашиваете области одним цветом, в списке центров вместо двух вставляете один. И так далее.
Вопрос: Как автоматизировать настройку grub?

Лучший ответ:
При установке пакета установщик обнаружил, что у же есть конфигурационный файл в системе и он отличается от файла в пакете. И что бы не сломать этим обновление Вашу систему, он предлагает вам самостоятельно разрешить эту зависимость. Что бы пропускать такие вопросы необходимо добавить ключ --force-confdef.
man dpkg
confnew:  If a conffile has been modified and the version in the package did change, always install the new version without prompting, unless the --force-confdef is also specified, in which case the default action is
              preferred.
you should set DEBIAN_FRONTEND=noninteractive, this will stop debconf prompts from appearing.
After that, add force-confold and force-confdef to your /etc/dpkg/dpkg.cfg file. then use the -y option
sudo apt-get -y update && sudo apt-get -y upgrade
or use this command
apt-get -o Dpkg::Options::="--force-confnew --force-confdef" --force-yes -y upgrade
and if it doesn't work try
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -y upgrade

Худший ответ:
Не надо редактировать конфиги из пакета. Для этого всегда есть каталоги вида grub.conf.d, куда необходимо класть свои изменения. Для grub есть /etc/default/grub.d/
Вопрос: Использование переменной self для this — это уже костыль?

Лучший ответ:
Не всегда. Иногда, вам внутри контекста бывает нужно получить доступ к this (текущий контекст) и к внешнему контексту. В этом случае придется внешний сохранять в переменную.
Если же такой необходимости нет, то удобнее использовать стрелочные функции и отказаться от self.

Худший ответ:
Это плохая практика и не стоит так делать, вместо этого можно объявить стрелочную функцию которая возьмет контекст того уровня где объявлена или сделать .bind(this), но лучше все же стрелочной функцией, только надо учесть что если требуются старый браузеры то нужно собрать код под них используй babel + webpack/parcel и тд.
Вопрос: Как блокирует роскомнадзор?

Лучший ответ:
Провайдеры не блокируют сами, список блокировок ведёт РКН а ркн в базу добавит то, что постановит суд.

Худший ответ:
Что в постановлении суда будет - то и добавит. Будет урл - добавит урл. Будет сайт - добавит сайт. Обычно видеохостинги, если не хотят блокировок, просто удаляют спорный контент. А "нету тела - нету дела"...
Вопрос: Почему значения меняются?

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

У вас есть 2 вариант.
1. Простой - выделить массив в main, передать его в getMas. Из getMas уже можете ничего не возвращать, только заполняете там массив.
2. Выделяете динамический массив в getMas с помощью malloc. В main не забудьте освободить память, выделенную для массива. Это плохой вариант, т.к. память выделяется на одном уровне программы, а освобождается на другом. Но в вашей простой задаче можно пока на это не обращать внимания.

Худший ответ:
Вы возвращаете висячий указатель, поэтому возникает неопределённое поведение
Вопрос: Зачем лого сайтов пишут в svg?

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

Худший ответ:
Вообще в целом почти все изображения должны быть в svg так как:
1. Почти всегда они легковеснее PNG и иногда даже JPG
2. Их можно просто анимировать
3. На их прорисовку тратится меньше ресурсов
4. Они маштабируются без потерь в качестве
...
100500. На них почти полностью можно воздействовать используя CSS или JS
Вопрос: Как взаимодействовать в vue js с БД?

Лучший ответ:
На сервере у вас должен быть какой-то API. И vue обычным fetch или ещё чем должен обращаться к этому API

Худший ответ:
Жжете. 

Ну держите

const  apiUrl = 'https://server.api/api/users'
let response = await fetch(url + '/42');

if (response.ok) { // если HTTP-статус в диапазоне 200-299
  // получаем тело ответа (см. про этот метод ниже)
  let json = await response.json();
} else {
  alert("Ошибка HTTP: " + response.status);
}
Вопрос: Как потестировать два VPS/VDS провайдера?

Лучший ответ:
А вот теперь самое интересное: Как считается скорость?) Может просто один из серверов дальше и дело просто в доставке трафика?
А про VDS: клиенту он действительно нужен? то есть у него требования к железу по безопасности? если нет то VPS и вперед (разницы ощутимой не будет, но дешевле)

Худший ответ:
был такой проект https://twitter.com/ServerBear
новый так и не запустили, какие-то следы есть
https://www.lowendtalk.com/discussion/85392/buildi...
Вопрос: Самозанятые.рф vs Мой налог. Что выбрать?

Лучший ответ:
Пользуюсь "Мой налог". Это официальное приложение от ФНС. Остальное использует их API. Для удобного просмотра статистики и формирования чеков на компьютере используйте ваш личный кабинет.

Худший ответ:
Мой налог удобен тем, что у него мобильное приложение.
В каком месте это преимущество? У вас компьютера нет?
Вопрос: Почему не работает file_get_contents?

Лучший ответ:
Есть. Используйте cURL.upd. На самом деле очень мало сайтов сейчас просто могут отдать контент страницы без контекста. Как минимум им нужны всякие куки, юзерагенты и так далее. Теоретически можно и в file_get_content передать контекст запроса, но в cURL с этим справляется лучше и проще.

Худший ответ:
Парсить лучше через https://github.com/Imangazaliev/DiDOM там можно получить страницу по http. Если нужно больше функциональность при работе с http - https://github.com/guzzle/guzzle
Вопрос: Как полноценно работать с Linux без интернета?

Лучший ответ:
Это стандартная конфигурация во многих учреждениях.
Нужно поднять локальные репо для пакетов системы и pip (https://packaging.python.org/guides/hosting-your-o...).
Вопрос только в обновлениях. Простейший способ - раз в неделю, например, обновлять вручную с флешкой.
Иногда делают автоматически, если разрешают - ставят машину с двумя интерфейсами во внутр. и внешнюю сеть. Но интерфейсы подключаются не одновременно - то один, то другой.

https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%B7%D...

Худший ответ:
В Gentoo можно переопределить команду скачивания пакета (FETCHCOMMAND), чтобы она вместо скачивания пакета с исходниками выводила в список ссылку на него вместе с именем файла, которое ожидает emerge. Потом список записывается на флешку, файлы скачиваются на компе с интернетом, а потом переписываются в каталог distfiiles, и emerge их видит.
Я не могу сказать, может быть аналогичный способ можно применить и к другим дистрибутивам, чтобы не качать весь репозиторий целиком? У Gentoo репозиторий делится на две части, дерево portage и distfiles, portage это индексная часть, которая отвечает за информацию о том, как собирать пакеты и какие между ними зависимости, и имеет сравнительно небольшой размер, около 200 Мб или 50 Мб в сжатом архиве, а distfiles это просто файлы с архивами исходников, которые могут весить много. У Debian обе части хранятся в одном дереве. Можно было бы скачивать только индекс (Packages.gz), а пакеты только по необходимости, как описано выше, через переопределение команды загрузки.
Если компьютеров в сети с одинаковой конфигурацией Gentoo много (архитектурой, use флагами, параметрами сборки, зависящими от процессора), то пакеты собираются на одном по указанной схеме (надо ещё прописать FEATURES="buildpkg" для формирования бинарных пакетов), а на остальных прописывается PORTAGE_BINHOST, указывающий на этот компьютер, чтобы ставить из бинарника, а не собирать на каждом.
https://wiki.gentoo.org/wiki/Binary_package_guide
Если конфигурация на разных компьютерах разная, то можно просто сделать общую директорию distfiles по NFS, чтобы не копировать файлы вручную.
Вопрос: Нормально ли грузить HTML по AJAX?

Лучший ответ:
Может, пришло то самое время, когда нужно полностью разделить фронт и бек и связать их через api? 

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

Но блин, этот замес из монолита и js-рендера вас утомит.

Худший ответ:
1. Попробуйте использовать js framework, например, vue. Таких мелочей при вашем подходе может всплыть масса. И, как уже вам советовали, стоит подумать о разделении проекта на front и back. Либо внедрить vue в yii2.
2. Если же это вам не нужно и вы хотите идти своим путём можно в контроллере сделать примерно так:

if (Yii::$app->request->isAjax) {
            return $this->renderPartial('_list', [
                'dataProvider' => $dataProvider,
                'checker' => $this->checker
            ]);
        } else {
            return $this->render('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
                'checker' => $this->checker,
                'futureCount' => $futureCount,
                'pastCount' => $pastCount,
                'myCount' => $myCount,
            ]);
        }
index.php
<div class="box-body">
            <div id="search-content">
                <?= $this->render('_list', [
                    'dataProvider' => $dataProvider,
                    'checker' => $checker
                ]) ?>
            </div>
        </div>

Таким образом, там, где идет загрузка от yii2 - там выводится index.php в котором рендерится_list.php, там где вы обновляете страницу без перезагрузки контроллер вам выдаст только структуру в _list.php. После добавлении записи - просто перезагружаете страницу ajax.
Вопрос: Как протянуть ячейки на определенное кол-во строк без мыши?

Лучший ответ:
1 - Выделяешь ячейку с формулой
2 - Тянешь выделение на нужный размер (клавиши стрелка при нажатой shift) 
3 - Получается выделенная область с активной ячейкой там где формула
4 - Нажимаешь F2 - режим правки (в ячейке с формулой появится курсор)
5 - Нажимаешь Ctrl + Enter и Ваша Формула скопирована на все выделение.

Худший ответ:
Макрос ниже:Sub AutoFillRange()
    ActiveCell.AutoFill Destination:=Range(ActiveCell, Cells(ActiveCell.Row + 187, ActiveCell.Column)), Type:=xlFillDefault
End Sub
растягивает формулу на (199  - 12) ячеек вниз.
Для использования нужно поставить курсор на ячейку и запустить макрос на выполнение.
В дальнейшем можно установить и запускать макрос комбинацией клавиш.
Также можно автоматизировать растягивание формулы во всей колонке таблицы одной кнопкой, но предварительно нужно смотреть структуру таблицы.
Вопрос: Как пофиксить странный клик?

Лучший ответ:
Клавиша Shift заедает на клавиатуре

Худший ответ:
Я купил новую оптическую клавиатуру..
И в одно время я удалил описанный в вопросе CarambaSwitcher, но видимо не полностью или одну из его установленных версий. Я редко перезагружаю комп, обычно он спит у меня. 
И вот стал замечать, что опять этот баг появился, я подумал, клавиатура новая с этим не может быть проблем.
Поглядел в трее задач а у меня оказывается включен CarambaSwitcher.
В этот раз я его отрубил и полностью удалил с ПК. Пронаблюдав отсутствие бага в течении 2 недель, могу с уверенностью сказать. Всему виной был CarambaSwitcher он есть БАГ!

Переключение было записано в CarambaSwitcher на двойное нажатие Left Shift.
Возможно какие-то траблы у него с виндой. Изучать я это не стал. Но как уже ранее писали в ответах если зажать Left Shift и начать нажимать по ярлыкам запуска уже открытых программам, будут открываться новые окна тех самых программ.
Вопрос: Недавно купленный м.2 перестал работать, что делать?

Лучший ответ:
Несите по гарантии сдавать, чего мучиться-то?

Худший ответ:
м.2 запустился! Да. Просто давайте вашим пк больше времени отдохнуть. Так просто. Но на самом деле думаю, что твердотельник после парочки жестких выключений, немного прифигел и пошел выстраивать таблицы, а я ему не давал времени "починиться". Короче мораль басни такова: не выключайте с кнопки пк, а тем более не выдергивайте шнур питания. Если же м.2 выпал в ошибку, дайте ему просто спокойно прийти в себя, пусть компьютер отдохнет выключенным или поработает в холостую на другой винде, да и сами отдохните. Спасибо всем, кто откликнулся.
Вопрос: Можно ли заряжать аккумуляторы GP 2700 зарядным liitokala lii-500?

Лучший ответ:
Да, среднее напряжение работы Ni-Mh аккумуляторов 1.2в, но заряжать их нужно до 1.5в, всё ок

Худший ответ:
На аккумуляторах написано напряжение 1.2 вольтаДа, это рабочее напряжение Ni-Mh аккумулятора.
Рабочее - 1,2 вольта.
Напряжение без нагрузки полностью заряженного аккумулятора - 1,4 вольта.

Следовательно чтобы зарядить аккумулятор напряжение заряда должно быть более 1,4 вольта.
Вопрос: С чего начать выполнять задание ASP.NET?

Лучший ответ:
1. создать проект
2. создать модели
3. создать вьюшки
4. создать Area для аутентификации (это уже есть просто щелкните несколько раз)
5. грамотно настроить заполнение первичными данными
6. реализовать корзину с использованием React, Angular, VUE
7. админку для управлениями пользователями
8. админку для отчетов о покупке, в соответствии с ролью пользователя в системе
9. добавьте  тестов
10. заполните appsettings.Development.json etc

Худший ответ:
Запускаем Visual studio. Новое решение. Тип Asp.Net или Asp.Net Core и вуаля.
Вопрос: Существует ли простой и элегантный способ добавить информацию о позиции в синтаксическое дерево с взаимно-рекурсивными типами?

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

Набросал пример с добавлением аннотаций на эти выражения: https://repl.it/@ICRainbow/RoundHuskyExabyte
Fix2 не нужен, но надо чётко понимать чем будет являться функтор и неподвижная точка в каких выражениях. Это не сложно, но нужна практика.

Худший ответ:
Вроде такого способа нет.

А почему второй вариант неудобен?
См, например, haskell-src-exts, там у каждого типа есть доп. элемент типа l, в котором может быть позиция или что-то ещё.
В ghc сделано аналогично, но чуть иначе - некоторые конструкторы обёрнуты в Located
Вопрос: В каких сферах перспективно использовать C#(сравнение с python)?

Лучший ответ:
Владислав Лысков Аноним 
Рука лицо. C# и в особенности его модификация core это язык общего назначения, с отличной поддержкой, огромной кодовой базой, легкостью интеграции с windows инфраструктурой  и легаси кодом. 
По скорости работы и разработки он на одном уровне с java и  php. 

@wideShift

Хорошая  штука, у вас сразу куча мелких приятностей и поддержка со всех сторон. Web, Mobile, Desktop  из коробки и на высоком уровне.  Впрочем для веба нужно выбрать фронт, возможно angular или  vue в связке с net core

Худший ответ:
C# лучше заточен под разработку: десктопных приложений, мобильную разработку, game dev.
Python в основном, из перичисленного, используют в вэб-разработке, хотя и в играх он присутствует.
Вопрос: Нужен ли ID в базе mysql?

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

Худший ответ:
Во-первых - правило хорошего тона.
Во-вторых, попробуй редактировать данные в базе из SQL навигаторов прям в таблице. MySQL Workbench опирается на поле id
Ну и в-третьих - попробуйте разбросать по разным таблицам e-mail пользователя, их пароли, которые, возможно, захотите принудитпльно менять раз в месяц и чтоб не повторялись. И связи между таблицами сделайте.

Ответ придёт сам собой.

Или же:
Мсье знает толк в извращениях.
Вопрос: Какое направление выбрать для дипломной?

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

Следуешь рецепту
Пишешь диплом на основе реального опыта
PROFIT


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

Лучший ответ:
Как вариант русскую локаль поставить:import ru from 'vuetify/es5/locale/ru'
export default new Vuetify({
  lang: {
    locales: { ru },
    current: 'ru'
  }
})

Худший ответ:
https://vuetifyjs.com/en/components/data-tables
В разделе API выбрать v-data-footer, увидеть там items-per-page-all-text, items-per-page-text и page-text
Вопрос: Как организовать совместную работу по наполнению ИМ картинки, описание и т.д?

Лучший ответ:
Возможно вам поможет trello.
https://trello.com

Худший ответ:
Task-tracking system?
Ну то есть jira, redmine, mantis...
Вопрос: Как передать массив с одной формы в другую (c#)?

Лучший ответ:
1. Статический глобальный массив
2. Передача массива через конструктор
3. Сохранение в настройках
4. Сохранение в файл
5. Очередь сообщений.

Худший ответ:
или же как передать datagridview в другую форму
Вопрос: Можно ли достать данные компонента снаружи в нужный момент?

Лучший ответ:
Родитель
<v-component ref="component" />
Потом когда совершаем какое то действие в родителе можно обратиться к ребенку
sendForm() {
const chlidData = this.$refs.component.$data 
}
Берем нужные данные, сам не пользовал, но кажется во vuetify видел что то подобное

Худший ответ:
Можно при изменении данных во внутренних компонентах - передавать все данные в одном объекте родителю. А уже при нажатии кнопки - обраватывать этот объект.
Пример:

Родительский компонент:
<template>
<div>
  <component :is="currentTab"  @updated="updateHandler" />
  <button @click="send">Send</button>
<div>
</template>

<script>
...
data: () => {
  return {
    currentFormData = {}
  }
}
methods: {
  updateHandler: function(formData) {
    this.currentFormData = formData;
  },
  send: function() {
    console.log(this.currentFormData);
  }
}
</script>

Код компонента вкладки:

<div>
  <form @change.prevent="onChange">
    <input/>
    <input/>
    <input/>
  </form>
</div>
<script>
...
methods: {
  onChange: function() {
    let myFormData = {
      kekw: this.kekw,
      pepeHand: this.pepeHands...
    };
    this.$emit('updated', myFormData);
  }
},
mounted() {
  this.onChange();
}
</script>
Вопрос: Какой атрибут в HTML5 ставит текст по середине страници?

Лучший ответ:
<div style='text-align:center;'>Текст</div>

Худший ответ:
На html есть тег <center>текст</center>, который крайне редко используется, но знать его все же нужно раз вы html изучаете. 

https://codepen.io/5h4dy_s/pen/NWqQRbd
htmlbook.ru/html/center
Вопрос: Стоит ли учить python на Hexlet? Да и вообще, какие годные курсы по python на сегодня можете посоветовать?

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

Худший ответ:
Из всех курсов что видел только на OTUSe понравились
Вопрос: Как поместить ссылку в input?

Лучший ответ:
Что за бред. Просто в форме добавь ссылку. 
<form>
<input type='text'/>
<input type='password'/>
<a href='#'>Забыл пароль</a>
<button type='submit'/>
</form
Если нужно чтобы оно отображалось на input то сделать это можно с помощью позиционирования.

Худший ответ:
Относительно позиционируй ее
Вопрос: Python чат бот,как отправлять сообщения из базы sqlite3?

Лучший ответ:
Советую начать с книги «Изучаем Python» М.Лутц.

Худший ответ:
1. Python чат бот,как отправлять сообщения из базы sqlite3
2. Первая ссылка