Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Где можно найти лёгкие макеты .psd для новичка в вёртке?

Лучший ответ:
Подпишись на рассылку от htmlacademy

Худший ответ:
Сходите на psdrepo.com. Там много приятных глазу макетов (часть из них была замечена в рассылке htmlacademy). Есть целые страницы, есть просто наборы элементов интерфейса.
Вопрос: Почему неожиданно перезагружается сервер Windows Server 2012R2?

Лучший ответ:
Криптопровайдер на сервере есть?
"Внезапная перезагрузка сервера 2012R2 Standart!"
Ключевая строка для поиска
"Путь сбойного модуля: C:\Windows\system32\schannel.dll"
"Победил откатил ВСЕ обновления, и накатил заново! ПОБЕДА"

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

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

Худший ответ:
Нужен софт для работы со сканером в  zyxel keenetic omni 2, что вряд ли получится. Даже на "Малине" это проще реализовать чем на роутере. Если в роутере не заявлена работа со сканерами - то ничего не получится.
Вопрос: Что можете сказать про вакансию «социальный хакер»?

Лучший ответ:
Вероятно, это должность, которая реализует "право на забвение", т.е. хотят, чтобы человек убеждал руководителей поисковых систем\сайтов, чтобы они удаляли неугодную информацию. В общем, сомнительная должность, ибо хакер (человек, который что-то взламывает) ведет свою деятельность вне закона, а судя по вакансии работодатели ожидают, что человек действительно сможет взламывать какие-либо ресурсы ради удаления требуемой информации. Ну и про SERM почитайте в гугле. Лично я бы не стал связываться - удалять отзывы о дерьмо-компаниях очень сомнительное удовольствие.
Как вы можете видеть, Anton197 с первым ответом на тостере уже подскочил оттуда. :D

Худший ответ:
Прикольно- даже не подозревал что такое бывает.)
Но вот удалить инфу из интернета - серьёзно?
Вопрос: При скролле подключаем скрипт?

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

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

Лучший ответ:
"Умная" розетка:
https://mysku.ru/blog/aliexpress/16275.html

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

Лучший ответ:
В первом случае у вас объект уничтожается раньше ссылки.
Во втором случае время жизни ссылки и объекта одинаково, так что это рабочий пример.
Нет никаких временных объектов. Есть стек и есть куча. Понимание разницы эти двух областей памяти отвечает на 90% вопросов в C++.

Худший ответ:
В стандарте есть правило, по которому при создании константной ссылки на автоматически управляемый объект его время жизни расширяется до времени жизни константной ссылки. Однако это не относится к оператору return и есть особое правило для списков инициализации (подробнее  тут). Соответственно, в следующем примере функция getRef некорректна, но функция foo реализована корректно.const std::string &getRef() {
    std::string tmpObject = "123";
    return tmpObject;
}

void foo(){
    const std::string& ref = getRef();
    std::cout << ref; // Выведет 123
}
В любом случае, использование такого подхода не имеет смысла - можно просто полагаться на оптимизацию возвращаемого значения и писать так:std::string getStr() {
    std::string tmpObject = "123";
    return tmpObject;
}

void foo(){
    std::string str = getStr();
    std::cout << str; // Выведет 123
}

// На крайний случай можно так - это точно корректно, но лучше не нужно - иначе кто-нибудь 
// может случайно удалить const, что приведёт к проблемам. 
void bar(){
    const std::string& ref = getStr();
    std::cout << ref; // Выведет 123
}
Вопрос: С чем может быть связана такая статистика?

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

Худший ответ:
Зайдите в Гугл вебмастер и посмотрите сами
Вопрос: Как сделать предзаполняемое поле в модели django?

Лучший ответ:
Делаешь вью, которое будет отправлять запрос гуглу
Аяксом его запрашиваешь
Или также аяксом запрошиваешь апи гугла напрямую, а не с сервера

Худший ответ:
Решил таким образом:
- добавил, через переопределение шаблона админки, кнопку рядом с полем ввода города
- повесил функцию запроса координат:(function($) { $(document).ready(function() {
	$("#id_to_city").after('<input type="button" value="Запросить координаты" onclick="get_geo(el(\'id_to_city\').value)"/>');
});
})(django.jQuery);
- написал саму функцию:function get_geo(city) {
	var x = new XMLHttpRequest();
	var api_key = "google_api_key";
	var result = '';
	x.open("GET", "https://maps.googleapis.com/maps/api/geocode/json?address="+city+"&key="+api_key, true);
	x.onload = function (){
		result = JSON.parse(x.responseText);
		el("id_to_lat").value = result.results[0].geometry.location.lat;
		el("id_to_lng").value = result.results[0].geometry.location.lng;
	};
	x.send(null);
}
Теперь пишу город, жму кнопку и через мгновение у меня координаты города на нужном месте.
Всем спасибо! идея об аяксе меня навела на это решение.
Вопрос: Где может применится такая штука?Область применения?

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

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

Лучший ответ:
При работе с PHP можно использовать отладчик, например xdebug, и какую-нибудь IDE поддерживающую отладку через него, тогда уровень отладки будет примерно таким же.

Худший ответ:
От себя добавлю еще print_r($_REGUEST) или var_dump($_REGUEST) выводит что приходит get`oм и post`ом
Вопрос: Современный подход к разработке MVC фреймворка на PHP (REST, безопасность, производительносить и т.д.) — что почитать?

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

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

Лучший ответ:
У computed свойств можно делать (а вам в данной ситуации и нужно) и сеттеры:dateStart: {
  get() {
    return moment().subtract(1, this.selectedPeriod).toDate();
  },
  set(value) {
    // ну, тут вам виднее, какой должен код быть
  },
},

Худший ответ:
Ну как бы достаточно ясно намекают, что идет присвоение к dateStart, но неопределен setter, должно быть что-то типа:dateStart: {
      get: function () {
       return moment().subtract(1, this.selectedPeriod).toDate()
      },
      set: function (v) {
        // set here
      }
    }
Вопрос: На что ругается питон в этом случае?

Лучший ответ:
Что-то я не понял, зачем у вас так много string.ascii_uppercase + string.digits
Данный код генерирует строку из букв и цифр длиной n символов (подробнее тут [ENG], ну или в комментарии напишите, что именно нужно сгенерировать)import random
import string
a=''.join(random.choice(string.ascii_letters + string.digits) for x in range(n))
print(a)
Ну и вторая часть вопроса:Генерация букв/цифрГенерация букв любого регистра - string.ascii_lettersГенерация букв нижнего регистра - string.ascii_lowercaseГенерация букв верхнего регистра - string.ascii_uppercaseГенерация цифр - string.digitsГотовый пример генерацииA-Za=''.join(random.choice(string.ascii_uppercase) for x in range(n))
a-za=''.join(random.choice(string.ascii_lowercase) for x in range(n))
0-9a=''.join(random.choice(string.digits) for x in range(n))Не забудьте указать n, а также импортировать модули random и string

Худший ответ:
вторая часть вопроса:import random
def GenCharNum():
   return random.choice('QWERTYUIOPASDFGHJKLZXCVBNM')+random.choice('0123456789')token=GenCharNum()
print (token)
Вопрос: Не понимаю почему не работает for правильно?

Лучший ответ:
const arr = ["воз", "киборг", "корсет", "ЗОВ", "гробик", "костер", "сектор"];
const map = new Map();
const result = [];

arr.forEach(item => map.set(item.toLowerCase().split("").sort().join(""), item));

for (let item of map.values()) result.push(item);

console.log(result); // ["ЗОВ", "гробик", "сектор"]

Худший ответ:
arr — исходные строки.
arr2 — сортированные.
Исходные строки, скорее всего, не будут совпадать ни с одной из сортированных — потому arr2[i]==sarr[j] во втором фрагменте, скорее всего, не выполнится.
Я бы поступил таким образом. Сделал бы индексированный список сортированных строк и порядковый массив исходных. Поиск сортированной строки в индексированном списке. Если не обнаружена — сортированную в индексированный, исходную в порядковый.
Что в JS будет индексированным списком — просто не знаю. Вероятно, можно обойтись массивом, присвоив sortedList[arr2[i]] = 1. Вот только как найти то, есть ли?
UPD. Можно также воспользоваться хранилищем «ключ-значение»: ключом будет сортированная строка, значением — исходная. iamevg_ так и поступил. Единственная засада (которая хороша или плоха, в зависимости от задачи) — портит порядок строк.
Вопрос: Как скачать приложение на android, если нет интернета?

Лучший ответ:
Окей гугл: как скачать apk из google play? Скачиваете apk, скидываете по usb на планшет, потом вкл установку из неизвестных источников.

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

Лучший ответ:
Как писали выше, да, можно и айфрэйм, но у него есть недостаток. Он может неработать не на всех клиентах. 
На счет скрипта, я считаю это самый оптимальный вариант, хоть  и сложнее.
Мы однажды реализовывали виджет, только немного другой. Опишу как это делали мы.
Пользователь должен был разместить некий div куда должен был подгружаться наш виджет. И подключал один файл js, который за все отвечал. То есть он добавлял свои стили, проверял на странице jquery и если нету, то подключал, 
Так же он подключал я.карты. 
В тот div, который разместили изначально постепенно наполнялся нужным нам видом.
И В общей картине генерировался целый виджет.
Так же предусмотрели вирсионность виджета, что бы у пользователей, которые уже поставили виджет ничего не снеслось после обновления кода.
Да, достаточно не легко, но сделали и работает.

Худший ответ:
Айфрейм, в котором отображается нужная страница с вашего сервиса. 
Можно, конечно, упороться, и рисовать JS-ом весь интерфейс на лету через загружаемый с вашего сервера скрипт, но это довольно муторно. Поэтому айфрейм.
Вопрос: Как создать свой JavaScript plugin?

Лучший ответ:
Вот статья от Кена Вилера - того самого, кто создал slick. В ней он на примере модального окна детально рассказывает как создать свой плагин на javascript. Мне очень помогло.

Худший ответ:
Slick - это плагин для Jquery.
Попробуйте обратится к официальной документации Jquery: https://learn.jquery.com/plugins/basic-plugin-creation/
Вопрос: Какие нюансы работы на удаленке?

Лучший ответ:
1. Можно на белую, можно работать как ИП.
2. Реально. Где-то еще и премии платят. Многие компании оплачивают отпуск/больничный/выходные сотрудникам работающим через ИП.
3. Можно обсуждать задачи через Google Meet или в Slack. Код ревью. Какие еще подводные камни могут быть у такой работы?
В нормальной компании никаких.

Худший ответ:
Подводные камни у любого формата работы могут быть самые разнообразные.
Вопрос: Как можно обойти защиту от блокировщика рекламы?

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

Худший ответ:
Вариант 1: Заблочить сторонние/инлайновые скрипты. uBlock/uMatrix в помощь.
Вариант 2: есть специальные списки вроде Adblock Warning Removal List для блокировщиков.
Вариант 3: Так званая "блокировка" контента - ни что иное, как блок с z-index: 999!important, т.е. елементарно убирается пипеткой любого блокировщика.
Вариант 4: поиграться с селекторами блокировщика. Удивитесь сколько вещей можно ними виртуозно заблочить.
Вопрос: Как реализовать редактирования данных из бд по кнопкам?

Лучший ответ:
Это называется CRUD, достаточно правильно погуглить  и Вы найдете множество вариантов

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

Лучший ответ:
Как вариант:https://jsfiddle.net/edalis/fruryxyv/

Худший ответ:
Углы делаются при помощи псевдоэлементов(4шт.) + трансформ+бокс-шедоу. Простая задачка, на самом деле.
Вопрос: Как задать фон блоку в котором есть картинка?

Лучший ответ:
.insert img{
    Ваш код
}

Худший ответ:
Если хотите через CSS, то ждите внедрения селекторов 4го уровня. Можно будет сделать так:.inherit:has(> img) {
  background: white;
}
Вопрос: Куда записывать события по клику в ES6 javascript?

Лучший ответ:
НАПРИМЕР вот как событие по клику реализовано в стандарте ES5
ES5 тут не при чем, это синтаксис jQuery
в ES5/ES6 на DOM-ивенты подписываются методом target.addEventListener(type, listener[, options]);
где type - тип ивента,
target - объект реализующий EventTarget интерфейс (например Element),
listener - коллбэк который вызывается после ивента.

Худший ответ:
Так же как и в es5
И почему у вас в конструкторе нет прототипов? 
Если бы были, было бы видно, что и куда.
Функции, относящиеся напрямую к конструктору - должны быть в прототипе (то есть в методе, если в es6)
Вопрос: Как сделать, что-бы вместо id выводилось,например, значение name этой таблицы?

Лучший ответ:
Используйте запрос объединяющий результаты из нескольких таблиц, т.е. JOIN
https://dev.mysql.com/doc/refman/5.7/en/join.html

Худший ответ:
SELECT *.`table`, `users`.`name` AS 'username' 
FROM `table` 
INNER JOIN `users` ON `users`.`id` = `table`.`studentid`table - имя таблицы с полем studentidusers - имя таблицы со студентами
думаю с подстановкой своих значений проблем не возникнет
В результате поле name будет доступно по ключу username
Вопрос: Что делает оператор «||» при присвоении?

Лучший ответ:
Будет присвоена первая переменная, если ее нет то вторая.
https://developer.mozilla.org/ru/docs/Web/JavaScri...

Худший ответ:
Эквивалентноvar URL
if (window.URL) {
  URL = window.URL
} else {
  URL = window.webkitURL
}
Вопрос: Можно ли узнать имя владельцп домена, если в хуиз указан приват?

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

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

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

Худший ответ:
клиентов можно и продать
Вопрос: Как реализовать нейронную сеть для распознавания символов?

Лучший ответ:
Для начала проще всего реализовать что-то, разобравшись с готовой библиотекой. Например, ConvNetJS. 
Вот пример распознавания символов MNIST на JS.

Худший ответ:
вообще canvas
html2canvas.hertzen.com/documentation.html#how-it-works
но вряд ли это хорошее применение для js
Вопрос: Почему в IT так много индусов?

Лучший ответ:
Коммерческая IT индустрия в Индии исторически началась гораздо раньше, чем в СНГ. В 80-х они уже аутсорсили и иммигрировали в штаты.
В 1991 в Индии департамент электроники провел огромную работу и реформировал ИТ отрасль, которая к тому времени уже существовала.
В 1991 году он основал STPI - государственную корпорацию, которая занималась вопросом экспорта ИТ услуг зарубеж (консультации, разработку, интеграцию) на уровне, недоступном ранее частным компаниям для всех зарегистрированных инженеров и компаний. Офисы STPI были во всех крупных городах Индии. Спутниковый интернет предлагался частным компаниям для удаленной работы. С 1994 года частные компании могли даже свой спутниковый инет заполучить.
Уровень работы был высокий - заказчик мог просто обратиться в STPI и получить для себя инженеров практически любого уровня. С сертификатами, с гарантиями и так далее.
Нигде в мире на тот момент не было такой господдержки для развития ИТ сектора, как в Индии.
Ну и сейчас, 2018 год, это уже почти 30 лет опыта разработки, поддержки, развития и конечно люди с их знаниями.
* Общее образование в индии уже десятки лет включает гораздо более адекватные базовые знания информатики, чем в СНГ, где среднестатистический преподаватель информатики линукс от виндовс не всегда отличает.
* Для заинтересовавшихся полно учебных заведений с приличными программами
* Население Индии очень большое, зарплата ИТшника гораздо больше, чем средняя по стране.
Ну а "плохой индусский код" - потому что как и везде, в ИТ ломятся все подряд, поэтому хочешь нанять дешевого индуса - получишь макаку. Хочешь нанять нормального индуса - заплати... все равно не слишком много - гораздо дешевле чем американца или европейца.

Худший ответ:
отсутствие вариантов для заработка, нищета. 
типа Белоруссия - только в 100 раз больше по населению.
соответственно на фрилансе индусов больше чем белорусов раз в 100.
Вопрос: Точно и подробно про защиту от инъекций в php, mysql?

Лучший ответ:
$login = trim($_GET['login']);
  $login = strip_tags($login);
  $login = mysqli_real_escape_string($mysqli, $login);
Почему вы думаете, что нужно менять логин пользователя, если она захотел именно такой? хочет быть <script> - пусть будет. Не ограничивайте.
нужно различать sql-инъекцию и xss-атаку
т.е. если мы пишем в базу, то
 $login = mysqli_real_escape_string($mysqli, $login);
query( insert into ... );
Далее выводим на страницу
$login = query( select from ... );
echo  htmlspeialchars($login);
И все счастливы.Если у вас будет время, напишите, пожалуйста, как бы Вы написали данный код. Мне просто интересно, посмотреть на правильно реализованный код.
Код писать лень, хотя я там выше  в принципе его уже написал =) только вместо mysqli_real_escape_string в реальном коде я бы использовал подготовленные выражения (и PDO вместо mysqli, хотя тут наверное, дело вкуса).

Худший ответ:
$login = trim($_GET['login']);
  $login = strip_tags($login);
  $login = mysqli_real_escape_string($mysqli, $login);
Почему вы думаете, что нужно менять логин пользователя, если она захотел именно такой? хочет быть <script> - пусть будет. Не ограничивайте.
нужно различать sql-инъекцию и xss-атаку
т.е. если мы пишем в базу, то
 $login = mysqli_real_escape_string($mysqli, $login);
query( insert into ... );
Далее выводим на страницу
$login = query( select from ... );
echo  htmlspeialchars($login);
И все счастливы.Если у вас будет время, напишите, пожалуйста, как бы Вы написали данный код. Мне просто интересно, посмотреть на правильно реализованный код.
Код писать лень, хотя я там выше  в принципе его уже написал =) только вместо mysqli_real_escape_string в реальном коде я бы использовал подготовленные выражения (и PDO вместо mysqli, хотя тут наверное, дело вкуса).
Вопрос: C#. Как правильно получить список файлов из папки в нужном порядке?

Лучший ответ:
В Windows уже есть готовая функция, которая выполняет натуральное сравнение строк, лучше использовать её. Эта функция разбивает строку на числовые и строковые части и ищет эти части друг с другом, причём числовые части сравнивает как числа, а строковые - алфавитно.var testFiles = Directory.EnumerateFiles(solutionDirectory + @"\samples");

var sortedTestFiles1 = testFiles.OrderBy(x => x, new NaturalComparer());
// или
var sortedTestFiles2 = testFiles.ToList();
sortedTestFiles2.Sort(new NaturalComparer());

/// <summary>
/// Натуральное сравнение строк
/// </summary>
public class NaturalComparer : IComparer<string>
{
    /// <summary>
    /// Вызов WinApi-функции для натурального сравнения строк
    /// </summary>
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    private static extern int StrCmpLogicalW(string psz1, string psz2);

    /// <summary>
    /// Натуральное сравнение строк
    /// </summary>
    /// <param name="x">Первая строка</param>
    /// <param name="y">Вторая строка</param>
    /// <returns>Сравнивает две строки, возвращая -1, 0 или 1</returns>
    public static int Compare(string x, string y)
    {
        return StrCmpLogicalW(x, y);
    }

    /// <summary>
    /// Натуральное сравнение строк
    /// </summary>
    /// <param name="x">Первая строка</param>
    /// <param name="y">Вторая строка</param>
    /// <returns>Сравнивает две строки, возвращая -1, 0 или 1</returns>
    int IComparer<string>.Compare(string x, string y)
    {
        return StrCmpLogicalW(x, y);
    }
}

Худший ответ:
C# сортирует строки лексикографически, а проводник использует Natural Sort. Вот что за минуту нагуглил по Natural Sort в C#:public static IOrderedEnumerable<T> OrderByAlphaNumeric<T>(this IEnumerable<T> source, Func<T, string> selector)
{
    int max = source
        .SelectMany(i => Regex.Matches(selector(i), @"\d+").Cast<Match>().Select(m => (int?)m.Value.Length))
        .Max() ?? 0;

    return source.OrderBy(i => Regex.Replace(selector(i), @"\d+", m => m.Value.PadLeft(max, '0')));
}
Вопрос: Верно ли я обращаюсь к файлу по адресу?

Лучший ответ:
на скрине один "ONU-Manager" через дефис, другой через пробел
кроме то, используйте синтаксис, который позволит вам скопировать путь из проводника
StreamReader fr = new StreamReader(@"D:\C# Projects\ONU-Manager\ONU Manager\bin\Debug\check.txt");
ps используйте как пример к размышлениюusing System;
using System.IO;

namespace mypath
{
    class Program
    {
        static void Main(string[] args)
        {
            var p = Environment.CurrentDirectory;
            Console.WriteLine(p);
            Console.ReadKey();
            p += @"\..\..\App.config";
            var appcfg = File.ReadLines(p);
            foreach(var l in appcfg)
                Console.WriteLine(l);
            Console.ReadKey();
        }
    }
}

Худший ответ:
Используйте класс Path и AppDomain:string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "check.txt");
Получим полный путь до папки, от куда была запущена программа и прибавим туда наш файл.
Вопрос: Заблокирован S3 — что делать?

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

Худший ответ:
Сменить площадку.
Вопрос: Font Awesome. Почему осталась старая иконка или почему не очищается кэш шрифтов?

Лучший ответ:
Может кому полезно будет... При открытом DevTools делаем клик с удержанием (~1c) и вот дальше скрин в общем:)

Худший ответ:
На самом деле получилось так, что два раза подключался шрифт и во втором случае со старой версией.
Вопрос: Не подскажете софт по созданию animated Gif?

Лучший ответ:
Если я правильно понял вопрос, то вам подойдёт LICEcap

Худший ответ:
В голову приходит только, запись видео конвертнуть в GIF и потом подправит в фотошопе.
Вопрос: Какой командой расшифровать ключ зашифрованный в base64?

Лучший ответ:
Очевидно, что "командой" KEY = base64.b64decode(ENCODE_KEY)

Худший ответ:
ответ здесь:  документация модуля base64