Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как жить после php?

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

Худший ответ:
На самом деле, php не так уж и удобен. Вот смотри:
Открыл консоль, написал 
apt install nodejs
 через минуту написал 
npm init -y
toche index.js
code .
И все, пошел программировать. Настройка окружения закончена.
Круто что ты знаешь php, тебе будет легче начать изучать другие языки, вот js это просто сокровище для меня
Вопрос: Как запретить обновление всех пакетов в Ubuntu?

Лучший ответ:
Отключите автоматическое обновление и не парьтесь.
dpkg-reconfigure unattended-upgrades


Худший ответ:
Закомментировать все репозитории в /etc/apt?
Вопрос: Какой антивирус лучше ставить на планшет на андроиде?

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

Худший ответ:
Посмотри это видео, такие же антивирусы есть и на Android

- Рейтинг лучших бесплатных антивирусов на русском в 2017: Касперский, Аваст, AVG, 360, Avira: https://www.youtube.com/watch?v=gqPyYafw1s4
Вопрос: Как убрать такой заусенец? Не получается соединить точки?

Лучший ответ:
Если такое происходит, когда вы пытаетесь соединить точки, то это одно. Если просто во время рисования - другое.
Первый вариант: выделите две точки, которые необходимо соединить и нажмите одно из сочетаний, подходящих вам лучше всего:
Ctrl+J - между точками будет проведена прямая линия, редактирование направляющих, как всегда, доступно при помощи инструмент Anchor Point Tool (Shift+C);
Shift+Ctrl+J - точки будут соединены вместе, место соединения зависит от контура;
Shift+Ctrl+Alt+J - точки будут соединены вместе по середине расстояния между ними.
Второй вариант: редактируйте направляющие инструментом Anchor Point Tool (Shift+C).

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

Лучший ответ:
Все что я скажу ниже мое ИМХО. Итак индустрии нужны не мудаки. Так уж сложилось что нужен английский. Определенный склад ума. Базовые знания алгоритмов, желателен опыт. HR просто ищет по ключевикам в резюме. Менеджеры кстати тоже нужны, в нормальных компаниях есть программа развития как по горизонтали так и по вертикали. Так что вам возможно стоит войти в компанию на менеджерскую позицию и мигрировать в разработку или в бизнес аналитику. Подумайте

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

Или скажи что учился на IT-специальность, никто все равно не будет провеять, важны только твои навыки
Вопрос: Я начинающий и в процессе работы у меня довольно часто происходят ошибки в коде, это бесит, буквально каждую минуту косячу и туплю, как быть?

Лучший ответ:
Постоянно гуглю ошибки, лезу в документациюпохвальноэто отнимает много времени, бывает полчаса над ошибкой сижу...нормальноКогда это закончится?никогдаСколько лет пройдётПройдет после смерти
А если у вас будет много кода, которым пользуются, то и смерть не будет гарантировать ничего Чтоб ты всё понимал, что происходит и вообще ошибок не было никогданедостижимо
Замечу, что ошибки должны со временем меняться и ошибки, которые вы допускаете сейчас через год у вас не должны появляться
Вам нужен опыт и наработка памяти на стандартные конструкции

Худший ответ:
Выучите нормально основы, а ошибки у вас всё равно будут, сколько бы вы не учились.
Вопрос: Почему не получается переписать функцию под С++?

Лучший ответ:
ToBytes делает что-то не то. 
Оба ответа не похожи на правду. Попробуйте воспользоваться любым онлайн калькулятором md5 для проверки.
www.zedwood.com/article/cpp-md5-function этой штукой можно сразу получить ответ.

Худший ответ:
По-моему оба варианта функции какие-то странные.
Если вам нужно шестнадцатеричное представление, то на C# это будет примерно так:string s = "876c0e09-70f7-4190-ab3a-254b6e5f461e";
byte[] data = Encoding.Unicode.GetBytes(s);
byte[] hash = new MD5CryptoServiceProvider().ComputeHash(data);
StringBuilder sb = new StringBuilder();
foreach (var b in hash)
{
   sb.Append(b.ToString("x2"));
}
string outVAR = sb.ToString();
Console.WriteLine(outVAR);
а на c++ так:string ToBytes(const wstring& str) {
    const char* d = reinterpret_cast<const char*>(&str[0]);
    string result(d, d+str.size()*2);
    return result;
}

int main() {
    wstring data = L"876c0e09-70f7-4190-ab3a-254b6e5f461e"; // на винде это будет UTF-16 строка, как и в C#
    cout << md5(ToBytes(data)) << endl;
    system("pause");
}
результат будет одинаков (по крайней мере на винде)d1206f6bcf6d9b31860482123c288650
Но если вам прям так нужен результат точь-в-точь как в C#,  то попробуйте этот код:spoilerstd::string WinMD5(const void * data, const size_t data_size)
{
    HCRYPTPROV hProv = NULL;

    if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
        return std::string();
    }

    HCRYPTPROV hHash = NULL;
    BOOL hash_ok = CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
   

    if (!hash_ok) {
        CryptReleaseContext(hProv, 0);
        return std::string();
    }

    if (!CryptHashData(hHash, static_cast<const BYTE *>(data), static_cast<DWORD>(data_size), 0)) {
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        return std::string();
    }

    DWORD cbHashSize = 0, dwCount = sizeof(DWORD);
    if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&cbHashSize, &dwCount, 0)) {
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        return std::string();
    }

    std::vector<BYTE> buffer(cbHashSize);
    if (!CryptGetHashParam(hHash, HP_HASHVAL, reinterpret_cast<BYTE*>(&buffer[0]), &cbHashSize, 0)) {
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        return std::string();
    }

    std::ostringstream oss;

    for (auto item: buffer) {
        oss << static_cast<unsigned int>(item);
    }

    CryptDestroyHash(hHash);
    CryptReleaseContext(hProv, 0);
    return oss.str();
}

string ToBytes(const wstring& str) {
    const char* d = reinterpret_cast<const char*>(&str[0]);
    string result(d, d+str.size()*2);
    return result;
}


int main() {
    wstring data = L"876c0e09-70f7-4190-ab3a-254b6e5f461e";
    cout << WinMD5(data.data(), data.size()* sizeof(wchar_t));
    system("pause");
}
результат:2093211110720710915549134413018604013480
Вопрос: Как правильно сделать редирек внешних ссылок?

Лучший ответ:
Бред. Не нужно никаких редиректов если ставите ссылки на качественные ресурсы.

Худший ответ:
Добрый день!
Ссылки на официальные сайты ПО нет смысла закрывать от роботов. 
Также Джон Мюллер из Google открыто об этом заявил, вот источник - https://www.searchenginejournal.com/googles-john-m... 
Прописывать тег nofollow для всех исходящих ссылок – стратегия, которая не только не даст преимуществ в ранжировании, но и может навредить в долгосрочной перспективе. Ресурсы со ссылками, не закрытыми тегом nofollow, могут ранжироваться лучше, так как такой способ выглядит более натуральным.
Вопрос: Немного изучил CSS, HTML, Python. Можно ли создать сайт сейчас?

Лучший ответ:
Нет, ФЗ номер 121 «О создании сайтов» запрещает создание веб-ресурсов веб-мастерами, не достигшими уровня html в 80%, css в 65%, а python в 71%. 

Продолжайте учиться.

Ну а если серьезно — просто попробуйте. Начнете сталкиваться с конкретными вопросами и будете их параллельно изучать. Нельзя что-то выучить не практикуясь.

Худший ответ:
Нет. Сначала выучи все коды.
А лучше брось это дело.
Вопрос: Какая логика обфускации php кода под доменное имя?

Лучший ответ:
обфускация никак не спасет от попадания на варезники, любой опытный дев без особых проблем "полечит".
помочь могут энкодеры вроде ioncube. но ровно пока ваш продукт не станет популярным и востребованным.
единственный действенный способ оградить код – не отдавать его, а запилить saas.

Худший ответ:
https://github.com/pk-fr/yakpro-po
(или ionCube, но там проблема в просадке производительности кода и не всегда всё гладко... у меня - куплен он)
Параметры на DNS-сервере, для каждой площадки: IP, hash-подпись, домен (или regex-маска).
На PHP - просто их читаете с DNS через обфусцированный PHP-код и если хеш для текущего сервера отличается (от того, что на DNS), то пишите, что "низя так!".
Вопрос: А вы правда умеете программировать?

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

Слово "алгоритм" ни в вопросе, ни в многочисленных ответах не встретилось ни разу. 

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

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

Вообще, я тут подумал что разница между программистом и таким вот "рисовальщиком" (как мне правильно попеняли в комментах, я обижаю своим сравнением настоящих ухдожников) очень простая - рисовальщик боится не запомнить все функции, а программист пишет свою. Как только ты написал свою первую функцию, чтобы избежать рутинного повторения в стандартной операции - ты сделал первый шаг к тому, чтобы стать программистом. И опа - ты уже можешь забыть десяток стандартных функций, посольку у тебя уже только одна, которая выполняет работу тех десяти. собственно, работа программиста и стстоит, в каком-то смысле, в том, чтобы не использовать (и - соответственно - не запоминать) стандартные функции. У него есть библиотека своих функций

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

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

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

Есть какие-либо базовые знания, которыми вы должны владеть в зависимости от вашего уровня, специализации
Вопрос: Как сверстать такое обтекание?

Лучший ответ:
сам же сказал "обтекание" т.е float

Худший ответ:
Все правильно выше сказано https://codepen.io/anon/pen/pXGeNg
Вопрос: Когда учить паттерны проектирования?

Лучший ответ:
Когда станете middle, а может, и позже. Паттерны не для джунов.
Паттерны, в основном, используются в ООП, если вы его не используете, то стоит понять, почему. Если не знаете - изучайте, а там и паттерны уже. Если просто негде, то забейте пока.

Худший ответ:
Я разрешаю прочесть вам книгу https://ru.wikipedia.org/wiki/Design_Patterns
Кроме того не запрещаю применять их и искать в коде
Вопрос: Как Как округлить целое число в большую сторону?

Лучший ответ:
До десяток
=ОКРУГЛВВЕРХ(A1/10;0)*10
До чётного
=ОКРУГЛВВЕРХ(A1/2;0)*2
До пятерок
=ОКРУГЛВВЕРХ(A1/5;0)*5
и т.п.

Худший ответ:
Помогло
=A2+(ОСТАТ(A2;10)>0)*(10-ОСТАТ(A2;10))
Вопрос: Как готовые CMS продвигают сайт в поисковых системах?

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

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

Лучший ответ:
Бит - минимальная единица информации. Он имеет два состояния, включено/выключено, истина/ложь, чёрное/белое, 0/1 и т.д.
Для того, чтобы закодировать N разных состояний необходимо ⌈log2N⌉ битов.
Таким образом, 13 состояний клетки потребуют ⌈log213⌉ = 4 бита.
Цвет клетки можно получить из её позиции на доске, отдельного бита для хранения при этом не требуется.

Худший ответ:
Если в клетке шахматного поля может хранится 13 возможных вариантов состояния (12 разных фигур + отсутствие фигуры),
Адресовать в памяти можно только байты. Но можно обращаться к отдельным битам байта.
для 13 возможных состояния понадобится 4 бита, при этом будет еще два варианта неиспользуемых.
Итого на 64 клетки можно обойтись 32 байтами.

Но если у вас всего 12 разных фигур, то не проще хранить координаты 12-фигур, на что нужно 6 бит на каждую фигуру? Можно округлить и хватит 12 байт на 12 фигур, или 24 байта на 24 фигуры, что еще меньше, чем 32 байта.
Вопрос: Поиск данных в html с помощью регулярных выражений?

Лучший ответ:
Здравствуйте.

Есть такой вариант регулярного выражения https://regex101.com/r/KRX5Qe/1
Ищет числа с минусом и без него, целые и вещественные, с разделителем "точка" и "запятая".
Если необходим код на php, то в меню слева есть инструмент "Generated Code"
Для python достаточно убрать ревнивые квантификаторы https://regex101.com/r/KRX5Qe/3

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

Худший ответ:
Составил регулярку: [0-9,.]{1,}

Но есть одно "но" - игнорируются знаки + и -

То есть, число 0.12 или 0,12 находится, то -0,12 - нет

Как это исправить?

А ларчик то просто открывался -
-?[0-9,.]{1,}

Эта регулярка корректно работает
Вопрос: Как сделать быстрый редирект?

Лучший ответ:
Обычные методы Location ... медленные, то есть успевает прогрузиться страница, частично
Ну что поделать, жизнь такая.
Правда location nginx обрабатывает не то что до отдачи страницы, а ещё до решения как и откуда ее отдавать. Но кого это волнует ?

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

Лучший ответ:
2000 ячеек, каждая по 20
это не одно и тоже , что 200 по 200 или 20 по 2000,
хотя в байтах объём будет одинаков.
так понятно?

Худший ответ:
Для примера текущие системы различают на 32 и 64 бит, соответственно машинное слово равно битности системы 32 бит и 64 бит
Ps были и другие  кратные 2 в степени x
Вопрос: Какой интерфейс (API) использовать для обмена по raw socket между сервером и железкой (stm32)?

Лучший ответ:
Json уже не в моде?

Худший ответ:
AT команды, ИМХО не самый удобный формат - для человека читаемость плохая, а для контроллера - текст он и есть текст.
Варианта 1 - варианты на тему текстовых протоколов - JSON, SOAP и т.п. - SMT32 достаточно быстрая, чтобы парсить такое.
Вариант 2 - бинарный протокол - для работы с контроллером это рациональнее. (но если у вас есть большой запас по производительности, то нет смысла так этим заморачиваться).
Вопрос: Как разрабатывать оконные приложения на С++ в Visual Studio 2019?

Лучший ответ:
Самым простым решением для разработки GUI-приложений в среде MSVS2019 будет использование Qt. Собственно, для этого тебе потребуется Qt. Но разработку вести ты cможешь в VS.

Вторым решением будет чуть более сложное: использование C++/CX вместе с UWP / Windows Forms.

Третьим решением, еще более сложным, будет использование уже чистого C++ при поддержке MFC или WTL.

И самым сложным решением будет прямое использование WinAPI.

Помимо всего этого еще можно воспользоваться библиотекой wxWidgets и на ее базе разработать GUI для своего приложения.

Худший ответ:
Существует несколько методов разработки оконных приложений с использованием языка программирования C++. Если вы хотите использовать конструктор, то QT Creator для вас. Существуют библиотеки для C++, и все они с открытым исходным кодом, https://www.reddit.com/r/cpp/comments/babfl5/a_pre... перейдя по этой ссылке, вы можете увидеть их все.
Вопрос: Как подключиться к stm32f205?

Лучший ответ:
Gnd еще должно быть. 
Залить прошивку в камень можно через bootloader, без программатора.

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

Лучший ответ:
Есть переменная QUEUE_PRIO, принимающая значения от стандартного 0 до 10. Перед вызовом Queue можно установить приоритет абоненту, где 10 будет наивысший. same => n, SetVar(QUEUE_PRIO=10)

Худший ответ:
Queue(queuename[,options[,URL[,announceoverride[,timeout[,AGI[,macro[,gosub[,rule[,position]]]]]]]]])
Последний параметр - позиция при помещении в очередь.
Вопрос: С чего начать изучение IT?

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

На изучение того, что вы описали, уйдут годы.

Худший ответ:
Можете начать отсюда: stolyarov.info/books/programming_intro
Вопрос: Как сделать отображение сайта поисковиком?

Лучший ответ:
Расширенные результаты со структурированными данными

Худший ответ:
Яндексу не важно что под капотом движка вашего сайта. Главное - что теги <title>, <meta description> и контент страницы не создаются динамически яваскриптом (ajax-сайты Яндекс не индексирует).
Поисковики анализируют и индексируют присланный сервером html-код страницы, а каким образом сервер её создал - никто никогда не узнает.

"Небольшая навигация снизу" - в Яндексе это называется быстрые ссылки - там описаны условия их формирования.
Вопрос: Можно ли не прописывать переменные в функцию если их нет?

Лучший ответ:
ну так задай параметры по дефолту
function delitem($iditem, $login, $kolvo, $linefile, $catalog, $effect34 = null, $effect33 = null)

Худший ответ:
Можно передавать в функцию в качестве параметра массив, в котором уже определять необходимые переменные:

function myFunc( $a, array $b = [ ] ) {
...
  ...$y = $b[ 'varY' ] ?? 'defaultValue';
...
}

myFunc( 1, [ 'var2' => 2, 'var3' => 3, ... 'varX' => 'X' ] );

Через массив передавать список только нужных переменных.
Вопрос: Как отследить нажатие 1 раз?

Лучший ответ:
Почитайте документацию - и используйте хотя бы keyboard.hook вместо keyboard.is_pressed

Худший ответ:
Опытным путём установил что что у меня реакция не как у Джет-а Ли) получается что пока кнопка нажата вызывается эта функция keyboard.is_pressed и с не очень маленькой скоростью поэтому у вас в файл и записывается много значений как вариант могу предложить следущий код с использованием задержки что бы вы успевали отпустить клавишу
from time import sleep
import pyautogui
import keyboard

ENTER = "enter"
ESCAPE = "escape"

def writing_data_file():
    if keyboard.is_pressed(ENTER):
        sleep(0.5)
        cursor_position = pyautogui.position()
        print(cursor_position)
        with open("cursor_position.txt", "a") as file:
            file.write("{0}\n".format(cursor_position))
    if keyboard.is_pressed(ESCAPE):
        quit()

while True:
    writing_data_file()
А так решений можно много найти, просто не совсем понятно с какой частотой вам нужна позиция курсора)
И да как посоветовал  Владимир Куц  читайте документацию перед использованием библиотек
А то я пока экспериментировал чуть HDD не форматнул))))
Вопрос: Как сделать такой список как на картинке?

Лучший ответ:
вместо тысячи слов

snippet

Худший ответ:
https://jsfiddle.net/vkorotenko/df0qehm1/
<ul>
  <li><span>Стоимость:</span><span class="price">47250&#8381;</span> 
67400 &#8381;
</li>
  <li><span>В рассрочку:</span><span>3938&#8381;/мес</span>.</li>
  <li><span>Скидка:</span><span class="discount">50%</span></li>
</ul>

ul{
  list-style: none;
}
ul > li{
  margin: 1rem;
}
ul > li > span:first-child{
  display: inline-block;
  width: 150px;
}
.discount {
  background: #ffd873;
  padding: 4px;
  border-radius: 4px;
  color: blue;
}
Вопрос: Как на сайте сбрасывать кеш файлов при выходе их новой версии?

Лучший ответ:
У веб-сервера есть нужный функционал.

Почитай про http заголовки last modified, etag, как их задействовать в твоем веб сервере и в целом про кеширование.

Худший ответ:
Через GET- параметр, например, так:
style.css?v=12
PS: Кэш оптимальнее всего включать на паблик максимум на 1 неделю.
Вопрос: В каких случаях использовать ajax, а в каких websocket?

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

Худший ответ:
Отрицательная сторона вебсокета - отсутствие гарантий доставки. Посылка может затеряться, соединение может разорваться, а стороны и не заметят. ajax дает гарантии доставки на уровне протокола.
Вопрос: Возможен ли парсинг на GPU?

Лучший ответ:
Определенно, возможен.
Вот например: https://github.com/antonmks/nvParse

Худший ответ:
Попробуй Nvidia Cuda, позволяет решать задачки на гпу, и ты вполне сможешь что-то распарсить.
Вопрос: Каким образом можно в один exe всунуть музыку вне зависимости от наличия той на пк?

Лучший ответ:
Вопрос простой. Добавить файл в ресурсы и читать его из ресурсов.

Худший ответ:
Выбираешь нужный файл в Solution Explorer и устанавливаешь значение "Build Action" в "Resource". Теперь к файлу можно обратиться по относительному пути.
Вопрос: Как перевести в семеричную систему счисления число больше 6?

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

Худший ответ:
Я сам нашел решение https://www.cyberforum.ru/python-beginners/thread2...
def dec_to_base(N, base):
    if not hasattr(dec_to_base, 'table'):        
        dec_to_base.table = '0123456789ABCDEF'       
    x, y = divmod(N, base)        
    return dec_to_base(x, base) + dec_to_base.table[y] if x else dec_to_base.table[y]
Вопрос: Плохо ли использовать data атрибуты?

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

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

Лучший ответ:
Конечно JSON, даже не сомневайся. 
Архитектура правильная, чуть шлифануть:{
   "id": "1", //  всё отлично
   "title": "Какой формы земля?", // можно question
   "type": "buttons", // Если это стиль отображения, тогда сделай массив. Если тип вопроса - всё ок
   "answers" {
      "correct": "Плоская"
      "incorrect": ["Круглая", "Квадратная", "Ромбовидная"]
   }
}
Для ответов обновил иерархию, неправильные ответы в массив. Правильные ответы хорошо бы тоже в массив.UPD2:А где правильнее хранить json файл?
Если вопросы добавлять редко, то локально. Ради потенциальной возможности исправить ошибку мучать http не стоит)

Худший ответ:
Если из предложенных вами вариантов - я бы выбрал JSON
Если предполагается в дальнейшем наворачивание параметров на элементы  - то тут надо БД и я бы выбирал Realm