Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как защитить авторизацию в реакте от ручного добавления левого токена?

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

Худший ответ:
Если будет левый токен, то при навигации по закрытым страницам вы же все равно какие то данные запрашиваете. Токен передается серверу в каждом таком запросе в хедере (данные закрытых страниц должны быть защищены на сервере), и если токен левый вам сервер вернёт ошибку 401, и если вы ее получили то делайте редирект на логин страницу или на страницу ошибки 401 и удаляйте токен.
Вопрос: Как отредактировать сообщение с помощью aiogram?

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

from datetime import datetime, timedelta

import config as cfg
from aiogram import Bot, executor, types
from aiogram.dispatcher import Dispatcher
from apscheduler.schedulers.asyncio import AsyncIOScheduler

bot = Bot(token=cfg.token, validate_token=True, parse_mode="HTML")
dp = Dispatcher(bot)
scheduler = AsyncIOScheduler()
scheduler.start()


@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def send_msg(message: types.Message):
    msg = await message.answer("Тик")
    date = datetime.now() + timedelta(minutes=3)
    scheduler.add_job(edit_msg, "date", run_date=date, kwargs={"message": msg})


async def edit_msg(message: types.Message):
    await message.edit_text("Так")


if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)
Please note, that it is currently only possible to edit messages without reply_markup or with inline keyboards.
Нельзя редактировать только сообщения с обычной клавиатурой (возможно временно)

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

Лучший ответ:
По умолчанию Gmail требуется OAuth, нужно разрешить небезопасные приложения в настройках аккаунта Google.

Худший ответ:
Так есть try, а где except?
Всё же, лучше понимать, что пишешь.
Вопрос: Какая структура сети в торговом центре?

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

Худший ответ:
За все ТЦ конечно не скажу, да и давненько подключать не приходилось., но кое-что сказать могу:

Обычно ТЦ делятся на два типа - те, в которых несколько провайдеров и те, которые еще при строительстве "продались" какому-то одному (я с этим столкнулся однажды, когда подключал магазин в одном очень крупном городском ТЦ - он продался РТК, а тот работал разумеется... как всегда :) )
Начинается все, как правило с обращения в администрацию ТЦ - вполне может быть, что она все сделает сама. 
Если же нет, узнать у нее, какой пров есть в здании и обратиться к нему.
Если пров не устраивает - снова обратиться к администрации с вопросом - пустят ли другого прова - запросто могут отказать. 
Если отказали - тут либо хавать, что дают, либо менять ТЦ (что редко бывает возможно)
Правда подключение через другого прова, если его в здании нет может быть существенно дороже
Вопрос: Как логически организовать защиту от удаления чужих записей?

Лучший ответ:
Есть такая штука - авторизация, и есть такое понятие как овнершип (владение) и ACL/RBAC. Во всех скриптах проверяется кто владелец файла, или кто может его изменять/удалять. Если у пользователя есть права на изменение/удаление объекта - скрипт отрабатывает, если нет - выдает ексепшн или иначе оповещает о неудачном завершении.

Худший ответ:
У Вас на бэкэнде пользователь остаётся залогинен даже при POST запросах из JS. В запросах на удаление указывайте только ID удаляемой записи. При его обработке, на бэке, смотрите по залогиненому пользователю, принадлежит ли ему удаляемая запись. Если да - удаляйте, нет - возвращайте сообщение об ошибке.
Вопрос: Что подправить в решении задачи с циклом?

Лучший ответ:
def salary(month, start_salary=5000, complex_percent=3.0):
    return start_salary * pow(1 + complex_percent / 100, month - 1)

total = sum(print(f'{salary:.2f}') or salary for salary in map(salary, range(1, 12 + 1)))

print(f'Я заработал {total:.2f}')

Худший ответ:
mne = 5000
mesyc = 0
procent = 0.03

i = 0

while mesyc != 12:
    mesyc += 1
    mne += mne * procent
    print(f'{mesyc} {mne:.2f}')

print(f'Я заработал за год {mne:.2f} руб')

# 1 5150.00
# 2 5304.50
# 3 5463.64
# 4 5627.54
# 5 5796.37
# 6 5970.26
# 7 6149.37
# 8 6333.85
# 9 6523.87
# 10 6719.58
# 11 6921.17
# 12 7128.80
# Я заработал за год 7128.80 руб
Вопрос: Как получать котировки акций на Java?

Лучший ответ:
Вопрос слишком общий.
Ответ тоже общий:
1. Выбирается источник данных.
2. Изучается формат данных, либо API.
3. Ищется инструмент для данной среды разработки для чтения данного формата, либо обращения к API.
4. Ищется инструмент визуализации полученных данных, либо используются встроенные компоненты.

Худший ответ:
Вот, простой пример совершения http запроса и парсинга данных из xml (DOM Parser) для валют
https://github.com/azerphoenix/cbar-currency
Котировки акций по такой же аналогии делаются
Вопрос: Как вы делаете Real-Time приложения на Laravel?

Лучший ответ:
Правильно ли это?Да.Может, есть способ проще для этой цели?Кому-то и ajax — real-time. Если ты из этих «кому-то», то да, есть.

Худший ответ:
Проще - некуда:
1. IFRAME + META REFRESH
2. setInterval/setTimeout + fetch
Вопрос: Какую CMS выбрать для цветочного интернет-магазина (OpenCart или Joomla)?

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

Худший ответ:
Можно не изобретать велосипед и брать специализированные системы для цветочного бизнеса: INSPIRO, PosiFlora, FloraPoint.
Если интересно, то можете почитать сравнительную статью с плюсами и минусами каждой из систем
Вопрос: Скрыть железо от виртуалки?

Лучший ответ:
И тебе не хворать.

Информацию о том, какая система виртуализации, мы, конечно же угадать должны?

Худший ответ:
если виртуализация qemu 
список доступных виртаульных процессоров:  qemu-system-x86_64 -cpu ?
Вопрос: С каждым прыжком увеличивается сила прыжка объекта, как исправить?

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

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

Лучший ответ:
Ненормально ничему обучаться ни по каким курсам. Учебники и официальная документация - единственное качественное и действенное средство.

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

Лучший ответ:
С помощью Selenium.

Установка производится так:
pip install selenium

Скудная документация есть по ссылке.

Так же есть серия статей на Хабре "Selenium для Python" от 2015 года:

Глава 1. Установка
Глава 2. Первые шаги
Глава 3. Навигация
Глава 4. Поиск элементов
Глава 5. Ожидания
Глава 6. Объекты страницы


Дальше сам.

Худший ответ:
pip install requests-html

from requests_html import HTMLSession

session = HTMLSession()
url = 'https://toster.ru'
r = session.get(url)
r.html.render()

Источник
Реозиторий библиотеки
Вопрос: Оплата со всего мира на мультиязычном сайте, как лучше?

Лучший ответ:
специализированное для SaaS - https://paddle.com/features/payment-processing/ список валют и языков ограничен, но доступно даже физлицу из РФ без компании

платежи картой в 30+ валютах с возможность встроить в свой интерфейс и самим сделать нужную локализацию на российское ООО/ИП https://developers.cloudpayments.ru/#skript-checkout

платежи картой  почти во всех валютах + есть какие-то другие способы оплаты, с возможность встроить в свой интерфейс и самим сделать нужную локализацию, нужно регистрировать компанию в другой стране  (список стран есть на сайте, но функционал может отличаться от страны)
https://stripe.com/payments/elements
компанию в США можно открыть через них же https://stripe.com/atlas

платежи во множестве локальных способов оплаты и валютах для разных стран,  нужно иметь компанию в другой стране
https://www.adyen.com/payment-methods

Худший ответ:
Очень рекомендую STRIPE . Сам подключал на нескольких проектах. очень доволен. Просто настроить мультивалюту. Есть и подписки и разовые платежи.
Вопрос: Существует ли автоматический VPN для Chrome?

Лучший ответ:
Frigate. 
 но сайты самому вбивать надо)

Худший ответ:
VPN для браузера не существует, все подобные расширения используют разные типы прокси

Вам нужно использовать PAC-файл
Вопрос: Можно ли к серверу, который написан на node.js подключить бд черех php?

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

Худший ответ:
Если имеется ввиду подключиться к mysql(к которой ранее был доступ через пхп), то вариант mysql2
Вопрос: Можно ли создать социальный проект(мобильное приложение), с облачной разработкой?

Лучший ответ:
Опенсурс и базарная разработка - это не выкармливание чужих идей.
Суть опенсурса - в привлечении к развитию твоего продукта людей, которые заинтересованы в его развитии.
Продукта, а не идеи. Развитии, а не написании с нуля.
"Гениальных идей" у любого студента полна голова, их тем больше, чем меньше реальных знаний.
Если ты не готов реализовать свои идеи сам - с какого перепуга их кто-то возьмется реализовать за тебя?

Худший ответ:
Облачной разработки не существует. Когда говорят про облака то в первую очередь это провижнинг ресурсов, не более. Для стартапа облака еще и дорого выходят, если нет архитектора (или очень дорого если деньги есть, но требования высокие)
Вопрос: Ошибка syntax 'foreach'?

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

Но если уж пытаться спасти этот ужас, 
public static function act_page($data, $key) {
      if ($key && isset($data[$key])) {
          self::$path .= '/act/'.$key;
          self::display_page($data[$key]['title']);
      } else {
          self::display_error(404);
    }
}

Худший ответ:
У вас структура switch нарушена. case внутри foreach не может быть в данном случае. Вы как будто в текстурах застряли :)
Вопрос: На чем сегодня лучше разрабатывать GUI для Win7/Win10?

Лучший ответ:
Библиотеки для чего? Если для интерфейсов, то QT, например.
MFC, пусть и мертворождённый, но до сих пор жив. И до сих пор такой же неудобный, как и 30 лет назад.

Худший ответ:
Можно использовать и WPF плюс C++/CLR или WinForms плюс C++/CLR.
Вопрос: В каком виде я должен отправлять сайт заказчику?

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

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

и отдавай готовый сайт в виде zip-архива
каждую версию
Вопрос: Как сравнить имена по их части (или производной) в python?

Лучший ответ:
Самый хороший вариант найти какую не будь библиотеку для сравнений. Первое что нашел поиск https://antonz.ru/difflib-ratio/

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

Для создания таблицы имен можно использовать обыкновенный список. Например:
names = [
       ('Саша', 'Александр'), 
       ('Георгий', 'Жора'), 
       ('Лена', 'Леночка', 'Lena')
]

name1 = 'Жора'
name2 = 'Георгий'
for x in names:
    if name1 in x and name2 in x:
        print(name1, name2, 'same')
Вопрос: Почему мерцает изображение на мониторе (пробовал менять на другой..)?

Лучший ответ:
Попробовать подключить по не VGA.
Попробовать с другим монитором.

Худший ответ:
Есть цифровой выход? (DVI, HDMI, Display Port) Бывают наводки на кабель.
Вопрос: Оставляет ли пиратская винда следы в Bios?

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

Худший ответ:
В BIOS - нет, но есть куча других способов определить лицензионность Windows, например ввести в командной строке slmgr –ato, если во всплывающем окне будет какое-либо сообщение об ошибке - Windows пиратская.
Некоторые активаторы устанавливают свой загрузчик, тот-же KMS Auto устанавливает в планировщике задач свой процесс.
Вопрос: Как сделать, чтобы MySQL обрабатывал нижнее подчеркивание как текст?

Лучший ответ:
Убрать подчеркивание.
Или LIKE ESCAPE

s_t_u_v_w и нажимаю найти, мне должно вывести все строгие совпадения с этим ником
SELECT * FROM teleg WHERE nik = 's_t_u_v_w'
Или
SELECT * FROM teleg WHERE nik LIKE 's!_t!_u!_v!_w' ESCAPE '!'
В данный момент из-за того что символ _ заменяется, я не могу найти ники с его участием. SQL сервер ничего не заменяет.

поставил в ячейках ентеры, из-за этого ничего не находило
SELECT * FROM teleg WHERE nik = 's_t_u_v_w' + CHAR(13)
Или
SELECT * FROM teleg WHERE REPLACE(nik, CHAR(13), '') = 's_t_u_v_w'

Не во всех ячейках есть какой-то символ (или что это такое).
SELECT CONVERT(VARCHAR, CAST(nik AS binary), 2) FROM teleg
Находите ваш неправильный символ. Например, CHAR(13) или CHAR(0x0D) и удаляете его
UPDATE teleg SET nik = REPLACE(nik, CHAR(0x0D), '')
TRIM не срабатывает, так как пробел CHAR(0x20) не последний символ.

MySQL:
SELECT HEX(nik) FROM teleg
UPDATE teleg SET nik = REPLACE(nik, CAST( 0x0D AS CHAR ), '')

Худший ответ:
А старый "детовский" способ экранирования религия не позволяет применить?
$str_like = str_replace(['_', '%'], ['\_', '\%'], 'Alex_ey');

$sql = "SELECT * FROM `table` WHERE `field` LIKE '".$str_like."'";
Ну канеш про sql-инъекции не забываем...выше запрос не безопасен, если $str_like приходит хз от кого...это уже другая тема...

P.S.: Почитал комменты к предыдущему ответу...там походу дело в самом подходе и хранении данных...
Вопрос: Как работает MX DNS запись?

Лучший ответ:
SMTP-сервер (не IMAP) перед отправкой письма на xxx@example.com получает все MX-записи домена example.com и пробует подключиться к указанным в этих записях SMTP-серверам в порядке приоритета. Если подключение установлено, то перебор записей заканчивается. Если ни с одним сервером соединения не было, то отправка письма откладывается на заданный в настройках интервал.

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

Лучший ответ:
HTML. Сайт, состоящий из одной страницы, тоже является полным сайтом. Далее, по мере изучения, добавьте на сайт css, потом js...

Худший ответ:
Просвещайся.
Вопрос: Alias в сценариях linux?

Лучший ответ:
Алиасы работают только в интерактивном режиме шелла.

При запуске в скриптах они работать не будут.
Если вам нужно, пользуйтесь функциями - они могут и алиас заменить и в скриптах будут работать

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

Это потому, что это только для выполнения текущего, в данный момент заданного.
После перегруза, всё слетает.

А чтобы добавилось (см. мой ответ и статью), надо сделать так:
echo -e "alias ll='ls -l'" >> ~/.bashrc
а потом, чтобы не перезагружать систему и изменения вступили в силу, обязательно:
. ~/.bashrc
Пробуем запустить сценарий.
Всё должно работать...
Вопрос: Есть ли особая разница при выборе дистрибутива для ВЕБА?

Лучший ответ:
Сидел на бубунте - что мешает сидеть дальше? Центос сейчас ставить смысла не имеет - он готовится уйти в небо...

Худший ответ:
Судя по вопросу, разницы нет.
Вопрос: Опен соурс альтернатива truecrypt?

Лучший ответ:
Так собственно наследник TrueCrypt - VeraCrypt

Худший ответ:
Если под Win, то VeraCrypt или DiskCryptor
Вопрос: Как оптимизировать работу в JupyterNotebook?

Лучший ответ:
Первым делом посмотрите, как используется память:
df.memory_usage(deep=True)

А дальше оптимизируйте тип каждой колонки:

Для категориальных данных:  
df['object'].astype('category')

user_id и days, например, должны быть int type
ну и  float64  вам скорее всего тоже не нужен. Достаточно  float32 , а иногда и  float16 


Худший ответ:
Изменил тип одной из колонок с float64 на int через df.step_id.astype(int) и использование памяти уменьшилось с 4gb+ до 3,4gb . Правда комп был  абсолютно неработоспособным 15 минут, пока выполнялись операции по изменению типа столбца
Вопрос: Возможно ли нативными средствами css перекрасить картинку вставленную через img (png) в другой цвет?

Лучший ответ:
если через фильтр и к примеру синий цвет. то вот вариантsnippet
PS: угол подбираете самостоятельно!

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

Лучший ответ:
Вроде бы понятно, что префиксы(--i, ++i) быстрее постфиксов(i--, i++)

В циклах никакой сколь либо ощутимой разницы, если вы проводили действительно тесты, они не могли этого не показать.

Когда-то и где-то читал, что лучший пробег - это с конца до начала, используя конструкцию:

for(let i = array.length - 1; i >= 0; --i)


И что, ваши тесты это подтвердили? Похоже на полную чушь. Какая разница языку отнимать единицу или складывать?

По факту самый быстрый конечно
for(let i = 0; i < array.length; ++i) let value = array[i]

for... of медленнее процентов на 30

forEach медленнее в разы

Точные цифры зависят от реализации в конкретных браузерах и меняются в процессе их развития.

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

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

Худший ответ:
Если заостряться в оптимизации скорости циклов, то я js/php придерживаюсь двух правил:
1) Если количество элементов в массиве на протяжении всего цикла не предполагает изменения, то количество элементов лучше посчитать заранее. Так мы избежим обращения к length при каждой итерации, если интерпретатор совсем туп.
2) Если к i-му элементу идет много обращений в течении одного хода цикла, то этот элемент лучше вытащить отдельным указателем на него.
Все остальное - экономия на спичках.
var item_count = array.length; // считаем заранее кол-во
for(var i = 0; i < item_count; i++)
{
  var item = array[i]; // вытаскиваем ссылку на элемент для простоты доступа
  ...
}
Вопрос: Как сделать выполнение php кода, когда пользователь закрыл вкладку?

Лучший ответ:
На JS ловить window.blur или window.unload (точно не помню), по этому событию слать в API запрос, по запросу выполнять нужное действие. Можно пойти от противного: слать hearbeat запросы раз в 30 секунд, если пропустили - значит, вкладка закрыта или интернета нет, соответственно, выполняем функцию.

Худший ответ:
Посылать запросы на unload/beforeunload события, как рекомендует Алексей Николаев - не очень хорошая идея
Асинхронный запрос будет оборван в произвольное время, и может не дойти до сервера. Синхронный - заблокирует вкладку и создаст неприятный пользовательский опыт.

Специально для таких случаев есть navigator.sendBeackon, который работает асинхронно, но не обрывается при закрытии вкладки (даже если сервер будет держать запрос пол часа - будет работать все ок, я проверял)
Правда если нужна поддержка IE или старых сафари (iOS10 и старее), то все же придется вернутся к синхронным запросам для этих браузеров
Вопрос: Подкинете идей для диплома (Сбор или/и анализ больших данных)?

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

Худший ответ:
Доучиться до магистра и не уметь придумать темы для СВОЕГО диплома, а ждать, когда незнакомые люди что-нибудь насоветуют, не зная даже, а по какой специальности-то диплом. Жесть!
Впрочем, что касается Big Data - то все очевидно. Нет у вас ни больших данных, ни ресурсов для работы с ними. И никогда не будет. Если вы слово "Big Data" все-же слышали в своем универе, то вас либо плохо учили, либо вы плохо учились, если этого так и не поняли.
Ну и наконец. У вас есть научный руководитель диплома. Почему не обратиться к нему?
Вопрос: На чем писать бота для вк сообщество с аудиторией 1 миллион подписчиков?

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

Худший ответ:
Вообще, все зависит от количества сообщений в секунду и от типа бота. Если бот работает с медиафайлами, то желателен асинхронный язык, например nodejs.
А вообще у вас мощный сервер, поэтому PHP потянет даже 20 запросов в секунду на callback, можете использовать эту библиотку:
https://github.com/digitalstars/simplevk
Единственная проблема написания ботов на PHP - это маленькая скорость работы с медиафайлами в longpoll при большом количестве сообщений. Если есть мощный сервер и можно использовать callback, то тогда PHP даже для бота работающего с медиафайлами сгодится
Вопрос: Как реализовать свою JS библиотеку и предоставить API?

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

API (программный интерфейс приложения, интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай][1]) — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.

API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована. 

Если программу (модуль, библиотеку) рассматривать как чёрный ящик, то API — это множество «ручек», которые доступны пользователю данного ящика и которые он может вертеть и дёргать. 

https://ru.wikipedia.org/wiki/API

Худший ответ:
это должна быть просто небольшая библиотека с набором методов для рисования линейных графиков?
Да!

И что значит здесь АPI - сам внешний интерфейс для работы с библиотекой или что-то более сложное
Просто интерфейс для работы.

Кто-то может сталкивался с таким?
Я писал библиотеку для создания popup окон. Необходимо было написать простой api и достаточно гибкий api для работы с ней. Сам api я описывал с помощью class'ов и на вход принимал объект. Так же реализовывал функциональное (функциональный подход) api