Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Ка запускать контейнеры Docker по очерёдности?

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

version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

Худший ответ:
Вопрос очень сложный. Скорее всего, если Вы хотите зависимость по порядку запуска - Вы что-то делаете не так. 
Принципиально вариантов три
1. использовать костыли вроде wait-for-it.sh - которые будут держать контейнер в состоянии запущен, но сервис внутри не стартанул, пока зависимость не стартанет.
2. Вообще плюнуть на зависимости. Ну, рестартуется зависимый сервис - раз на пятый, когда зависимость стартанет, запустится. Лишь бы правильно перезапуск был сделан. Но это может быть неприемлемо, если в докере что-то тяжёлое, вроде джава машины, которая долго прогревается.
3. Использоваться внешние решения. Начиная от "давайте не будет использовать restart: always в докере и засунем docker-compose up в systemd юнит" и кончая скриптами или оркестраторами.
Вопрос: Как найти партнеров в команду стартапа в 2019 году?

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

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

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

Худший ответ:
Дд. Зависеть от того какие комплектующие используется, и сколько в общем будет жрать система в нагрузке, советую посмотреть рынок блок питания https://www.youtube.com/watch?v=a81PRb8EAA0
Вопрос: Как решить проблему с вводом двумерного массива?

Лучший ответ:
//переопределяю массив новыми размерами
    a[row][col];С чего вы сделали такой вывод? Это просто получение значения из массива a по индексам row и col.
Соответственно, массив у вас остаётся размером 1x1 и при записи в несуществующие адреса повреждается стек.
Как решить проблему?Изучить, как создавать массив динамически.

Худший ответ:
a[row][col]; Это не переопределение массива, а доступ к элементу с индексами row  и col.
Для создания динамичесго массива используйте указатели или std::vector.
Вопрос: Во VueJs при изменении переменной не срабатывает v-if, почему?

Лучший ответ:
V-if придуман не для стилей. прочитай Документацию вопрос отпадет

Худший ответ:
Вот здесь что вы пытаетесь сделать?watch: {
    search: function(filteredPolis, tipStrah) {
      this.filteredPolis.forEach(polis => {
      if (polis.tip.indexOf('dmc')) {tipStrah = true}
      else if (polis.tip.indexOf('omc'))  {tipStrah = false}
      return tipStrah
      })
      console.log(tipStrah)
      return tipStrah
    }
Вы же установили наблюдателя за search и любые изменения переменной search будут вызыватьsearch(val) {
     val // это значение переменой search в data
      })
Вопрос: Должен ли верстальщик писать логику, например калькулятора обмена валюты?

Лучший ответ:
Зависит от того что Вы прописали в договоре с заказчиком и в ТЗ

Худший ответ:
1. Верстальщик - делает разметку html5 и стили css3 (+подключает ресурсы: изображения и шрифты из макета).
2. Логику реакции объектов на события - пишет фронт-эндер на js.

"Сверстать калькулятор" - только вёрстка.
"Сделать калькулятор" - это вёрстка + фронт-энд кодер на js.
Вопрос: Почему указатель на char выводит всю строку, а не первый символ?

Лучший ответ:
Потому что вы выводите в cout указатель на char. Если хотите вывести только первый символ, передавайте его по значению:cout << *s;
//или
cout << s[0];

Худший ответ:
(для простоты опишем так)
Внутри перегруженной версии  operator<<
https://code.woboq.org/gcc/libstdc++-v3/include/st...template<typename _CharT, typename _Traits>
    inline basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
    {
      if (!__s)
        __out.setstate(ios_base::badbit);
      else
        __ostream_insert(__out, __s,
                         static_cast<streamsize>(_Traits::length(__s)));
      return __out;
    }
под капотом используется sputn
Writes count characters to the output sequence from the character array whose first element is pointed to by s. The characters are written as if by repeated calls to sputc(). Writing stops when either count characters are written or a call to sputc() would have returned Traits::eof().
где count это strlen(s);
P.S.
в C++ string literal это все таки const char*
в С++ есть std::string который является предпочтительным в С++
Вопрос: Почему не грузится bios???

Лучший ответ:
Странный вопрос! Несите обратно в тот сервис, который его в такое состояние привёл. Непонятно, зачем Вы его ещё и разбирали.

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

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

Ваше условие не очень понятно, но вот, как сгрупировать массив по датам:
st = 0; 
end = 0;
while (st < a.length) {
  end = st + 1;
  while(end < a.length && a[end].date == a[end-1].date) end++;
  console.log(a[st].date);
  for (st = st; st < end; st++) {
    console.log(a[st].id);
  }
}

Тут мы просто откусываем от массива кусок с одинаковыми датами, пока массив не кончится. Если вам нужна только последняя группа, то можно откусить только один раз с конца:
end = a.length - 1;
st = end - 1;
while (st >= 0 && a[st].date == a[st+1].date) st--;
console.log(a[end].date);
for (st = st+1; st <= end; ++st) 
  console.log(a[st].id);

Только учтите, этот код не работает на пустом массиве. Надо отдельно проверить этот случай.

Худший ответ:
я думаю сначала нужно найти минимальный и максимальный timestamp даты, затем попробовать бинарным поиском отсекать куски, запоминая последний курсор. с каждым отсечением следить за тем, чтобы мы не проскочили искомый период таймстемпов - если мы ищем 18 число, а предыдущий курсор был на 19 числе, а на текущем курсоре мы стоим на 17 числе - то период за 18 число проскочен, и берем тогда этот интервал, и продолжаем уже в нем бинарный поиск.

когда курсор будет на 18 числе в моем примере, начинаем идти от него вниз и вверх циклом for(..;..;..), пока не упремся в границы интервала с обоих сторон
Вопрос: Как вывести кириллицу в Python?

Лучший ответ:
Не знаю, что такое easygui, но скорее всего просто использовать Python 3 и позаботиться, чтобы скрипт был в кодировке UTF-8.

Худший ответ:
Попробуйте добавить в начале файла с исполняемым кодом строку
# -*- coding: utf-8 -*-
Это поменяет кодировку файла на utf-8. Вероятнее всего у вас символы переводятся автоматически в ascii или cp1251.
Вопрос: Почему не работает fdisk в debian 10 buster?

Лучший ответ:
dpkg -L fdisk покажет все файлы в пакете fdisk.which fdisk найдёт полный путь к fdisk по каталогам в $PATH.
Скорее всего нужный будет в /sbin/fdisk. И скорее всего не файл отсутствует, а в $PATH нет каталога /sbin.

Худший ответ:
Совсем недавно ставил Buster - fdisk работал.
Похоже у Вас система глюканула.
Вообще, чем дальше тем debian хуже. Кроме того что нормальный рабочий репозиторий есть лишь на крайний релиз, так и сама система все более глючная.
Например мне не удалось нормально установить firewall. Каюсь, ковырялся не очень долго.
Вопрос: Стоит ли открывать ИП или самозанятость для фриланса?

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

Худший ответ:
Про самозанятость не знаю, про ИП скажу. У самого банк Точка - всё очень удобно. Но потребуется докупить онлайн бухгалтерию (примерно 3,5к в год). На мой взгляд, оформлять стоит, очень большое кол-во клиентов хотят работать через ИП, особенно когда долгосрочные проекты. И если его не будет, то клиенты будут, в основном, мелковатые.
Вопрос: Как отключить логирование robots.txt в Nginx?

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

Худший ответ:
Спасибо Lynn «Кофеман» 
server {
    listen      172.67.196.42:443;
    server_name iherney.com www.iherney.com *.demo.iherney.com;
    ssl         on;
    ssl_certificate      /home/iherney/conf/web/ssl.iherney.com.pem;
    ssl_certificate_key  /home/iherney/conf/web/ssl.iherney.com.key;
    error_log  /var/log/apache2/domains/iherney.com.error.log error;
    root           /home/iherney/web/iherney.com/public_html;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass      https://172.67.196.42:8443;
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|odt|ods|odp|odf|tar|wav|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm)$ {
            root           /home/iherney/web/iherney.com/public_html;
            access_log     /var/log/apache2/domains/iherney.com.log combined;
            access_log     /var/log/apache2/domains/iherney.com.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location /error/ {
        alias   /home/iherney/web/iherney.com/document_errors/;
    }

    location @fallback {
        proxy_pass      https://172.67.196.42:8443;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include /home/iherney/conf/web/snginx.iherney.com.conf*;
}
Вопрос: Выбор hdd на программный RAID 1. Будет ли разница между RAID Edition и обычным десктопным?

Лучший ответ:
Когда есть возможность опереться на цифры - может стоит на них опираться? Что у нас всегда считалось за первоисточик? Правильно, даташит производителя.
Берем даташиты на диски Western DigitalGold (Enterprise Class)Red Pro (NAS Class)Blue (Desktop Class)
И начинаем неспешно и вдумчиво их сравнивать. Для сравнения берем модели емкостью 2TB - WD2005FBYZ из голдовой серии и WD20EZRZ - из синей. (Цены для сравнения - в Ситилинке WD2005FBYZ - 8090 руб, WD20EZRZ - 3990 руб)
Первая цифра - голдовый, вторая - синий
Data Transfer Rate - 200Mb/s / 147 Мb/s
То есть что - синий диск передает данные на четверть медленее в единицу времени. Нужно обьяснять, насколько это существенно? Я думаю нет. Что для программного рейда, что для аппаратного, что для просто диска
Cache - 128 Mb / 64 Mb
Тоже я думаю в комментариях не нуждается - больше кэш, быстрее операции
Performance Class - 7200 RPM / 5400 RPM 
(найти диски с одинаковым спинрейтом не удалось - похоже линейки hdd ужимаются в связи с тотальным переходом на ssd)
Понятно, что чем быстрее вращается пластина, тем быстрее с нее читаются данные (но требуется более точная и более надежная механика)
MTBF (Mean time between failures - наработка на отказ) - 2 500 000 / 650 000
Голдовый диск при прочих равных условиях проработает тупо в четыре раза дольше (параметр для синих WD не указал, взято в никсе)
Warranty time - 5 лет / 2 года
Есть там и менее нужные параметры - потребляемая мощность, ударные нагрузки etc - сами можете посмотреть. 
Ну а дальше - "думайте сами, решайте сами" - будет для Вас разница или нет...

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

Лучший ответ:
первый лучше конечно, 
в первом случае выберется 10 нужных элементов, по которым будет цикл each(), а во втором МИЛЛИАРД, и по всем будет цикл each()

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

Лучший ответ:
(item, i) => {
  if (i % 2 === 0 || i === 0) {
    `<li><a href="#" class="js-link">${item}</a></li>`
  }
}

Эта функция ничего не возвращает

Нужно 
(item, i) => {
  if (i % 2 === 0 || i === 0) {
    return `<li><a href="#" class="js-link">${item}</a></li>`
  }
}

Худший ответ:
Стрелочная функция тут не нужна, тут нужно читать документацию.
У тебя используется map который должен возвращять новый елемент массива, он у тебя ничего не возвращает. Кроме того если ты в map поставишь if он у тебя вернет или новый елемент массива или undefined что тоже поламает логику.
Стрелочная функция у тебя сработала потому что там в короткой записи не нужен return про который ты забыл.
Почитай про reduce а еще лучше тупо открой Фленегана и прочитай от корки до корки.
Вопрос: Запуск Angular приложения на сервере в фоне?

Лучший ответ:
Подозреваю что под "работающим Ангуляром" вы имеете ввиду development server Webpack'a который у вас запущен в консоли через npm-скрипт. Соответственно, когда вы закрываете консоль, dev-server останавливается.
Так вот, вы совершенно неверно поняли принцип работы node, Webpack и Ангуляра в целом, если считаете что все это так и должно работать в проде.
Ангуляр это не процесс и не программа, которую нужно запускать. Весь Ангуляр код компилируется в JavaScript который загружается вместе с HTML вебсайта который хостится на сервере.
Советую начать вам с документации по Ангуляру чтобы понять что это такое и как это работает - https://angular.io/docs

Худший ответ:
Ангуляр занимается динамическим рендером DOM и инструментами чтобы привязать сложную логику для рендера DOM. Для того, чтобы выполнять задачи в фоне существует https://developer.mozilla.org/en-US/docs/Web/API/W...
Тянуть работающий ангуляр это как? Вы хотите запустить nginx чтобы "сервить" статическую страничку сделанную на ангуляр? Или вы хотите открыть браузер, в котором будет работать приложение на ангуляр?
Что вы вкладываете в понятие "работающий ангуляр"?
Если речь идет о простом деплое приложения на продакшн, то вот 
https://angular.io/guide/deployment
А это как сделать докер файл, который будет собирать для продакшена и деплоить на докер
https://medium.com/@tiangolo/angular-in-docker-wit...
Вопрос: Могу ли я использовать свой ноут вместо микроконтроллера?

Лучший ответ:
Если у него есть GPIO то не вижу препятствий.
Если нет минимум купите TTL свисток. Но это уже дороже обойдется чем ардуино или 85sparkfun

Худший ответ:
Если этот ваш ноут старый, имеет на борту принтерный порт LPT, и количество управляемых устройств не превышает 8, то ответ положительный. Дело в том, что портом LPT легко управлять программно, причём знание всяких протоколов обмена информацией не потребуется. Надо просто записывать нули и единицы в определённые регистры порта (по фиксированным адресам, которые настраиваются в BIOS), и на восьми линиях порта будут появляться сигналы с уровнями +5 и 0 вольт. А как именно использовать эти сигналы, показано на этой картинке:Все остальные способы сильно сложнее, там без протоколов не обойтись.
Вопрос: Как реализовать облачное хранилище?

Лучший ответ:
Для реализации в простейшем базовом виде достаточно знать php и html. Чтобы все сделать более-менее удобно, надо еще JavaScript. База данных здесь не нужны, так как нагрузка у такого мини-сервиса будет минимальная.

Худший ответ:
Но я не понимаю где хранить изображения если я реализую облачное хранилище. 
Есть два варианта:
- хранить на "локальном" диске. При этом физически диск может быть не в локальном компьютере. Например, в AWS EC2 диски на самом деле не локальные.
- использовать API для управления удаленным storage
Что реализовывать? Для упражнения - оба варианта. 
В обоих вариантах это можно назвать облачным.
Вопрос: Не работает роутинг на github pages. Как исправить?

Лучший ответ:
Роутинг spa приложений предполагает что сервер на любые аадреса будет отдавать index.html запускающего приложение роутинг которого уже будет рендерить страницу соответствующую маршруту. gh-pages такое не умеет поскольку является хостингом статики. Для разрешения проблемыd в корне вашего приложения создайте файл с именем 404.html и поместите в него следующий код - 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Single Page Apps for GitHub Pages</title>
    <script type="text/javascript">
        // Single Page Apps for GitHub Pages
        // https://github.com/rafrex/spa-github-pages
        // Copyright (c) 2016 Rafael Pedicini, licensed under the MIT License
        // ----------------------------------------------------------------------
        // This script takes the current url and converts the path and query
        // string into just a query string, and then redirects the browser
        // to the new url with only a query string and hash fragment,
        // e.g. http://www.foo.tld/one/two?a=b&c=d#qwe, becomes
        // http://www.foo.tld/?p=/one/two&q=a=b~and~c=d#qwe
        // Note: this 404.html file must be at least 512 bytes for it to work
        // with Internet Explorer (it is currently > 512 bytes)
        // If you're creating a Project Pages site and NOT using a custom domain,
        // then set segmentCount to 1 (enterprise users may need to set it to > 1).
        // This way the code will only replace the route part of the path, and not
        // the real directory in which the app resides, for example:
        // https://username.github.io/repo-name/one/two?a=b&c=d#qwe becomes
        // https://username.github.io/repo-name/?p=/one/two&q=a=b~and~c=d#qwe
        // Otherwise, leave segmentCount as 0.
        var segmentCount = 1;
        var l = window.location;
        l.replace(
            l.protocol + '//' + l.hostname + ( l.port ? ':' + l.port : '' ) +
            l.pathname.split( '/' ).slice( 0, 1 + segmentCount ).join( '/' ) + '/?p=/' +
            l.pathname.slice( 1 ).split( '/' ).slice( segmentCount ).join( '/' ).replace( /&/g, '~and~' ) +
            ( l.search ? '&q=' + l.search.slice( 1 ).replace( /&/g, '~and~' ) : '' ) +
            l.hash
        );
    </script>
</head>
<body>
</body>
</html>

Кроме того помнине что в случаи отсутствия домена все внутренние ссылки  (переходы\картинки и т.п.) должны включать имя вашего репозитория.

Худший ответ:
Если ещё актулально, то надо изменить BrowserRouter на HashRouter.
Здесь человек рушает такую же проблему
https://dev.to/zenulabidin/how-not-to-deploy-a-rea...
Вопрос: Как реализовать кастомный тип данных в c++ без использования нативной системой типов?

Лучший ответ:
На самом деле такое возможно единственным методом: через ассемблерные вставки. Чем-нибудь типаmov ecx, [data]
mov byte ptr[ecx], 5
Штатные типы позволяют, в числе прочего, интерпретировать те или иные байтовые данные разными методами. Вернёмся к одному байту. Он может быть…
• числом
• восемью флагами
• четырёхбитовым числом и четырьмя флагами

Худший ответ:
На самом деле такое возможно единственным методом: через ассемблерные вставки. Чем-нибудь типаmov ecx, [data]
mov byte ptr[ecx], 5
Штатные типы позволяют, в числе прочего, интерпретировать те или иные байтовые данные разными методами. Вернёмся к одному байту. Он может быть…
• числом
• восемью флагами
• четырёхбитовым числом и четырьмя флагами
Вопрос: Как программировать stm32?

Лучший ответ:
В  вашем случае никак

Худший ответ:
Слишком объёмный вопрос.

Во первых, какую задачу Вы решаете? От этого много зависит.
Установленные библиотеки - это далеко не всё.
Программирование современных контроллеров это в большой степени программирование периферии.
Если Вам чужды понятия прерывания и хендлеры - то нужно с ними подружиться.
Иначе будет крайне сложно.

Если прям нужно IDE - есть онлайн решение. Хоть с MACOS заходи, хоть с линукса.
mbed
Интегрированное сразу с репозиторием, уймой библиотек, примеров и готовых решений.

Ассемблер - точно не проще.
Вопрос: Какое обучение выбрать для освоения веб-разработки?

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

Худший ответ:
Стоит обратно починить Google, так как именно он даёт всю нужную вам информацию.
Сделайте пару учебных проектов, идей в интернете полно: примитивный to-do лист, библиотека фильмов / аудиокниг. Затем попробуйте с этими проектами найти стажировку на лето либо работу джуниором, что будет сложнее, но также вполне реально. Цепляйтесь за каждый шанс.
Из платного обучения — любые курсы, но понимайте, что всю информацию из них можно найти и бесплатно, главное научиться это делать.
Вопрос: Где ошибся в JS?

Лучший ответ:
Ошиблись Вы вот тут:
i14.value.length // i14.value строка.
Соответственно, Вы смотрите не на число, а на количество введённых в поле ввода символов. Нужно преобразовать в число.
Number(i14.value)

А вот решение по проще от меня:
snippet

Худший ответ:
Ошибся здесь i14.value.length

Бонусом полезная функция
function createArray(n) {
	return Array(n).fill(1);
}
Вопрос: Mikrotik, как настроить маршрутизацию между локальными сетями?

Лучший ответ:
В файрволе разрешён форвард между сетями?
1-й порт - 192.168.0.0/24
2-й порт - WAN-инет
3-й порт - 192.168.29.0/24
1-й и 3-й порт объединены в бридж
Нафига бридж между портами, если они у вас разные сети держат? У вас там есть адекватные люди которые хотя бы вики микротика могут открыть почитать или только неадекваты которые такую хрень делают?

Худший ответ:
Экспортируйте конфигурацию и выкладывайте.

export
Вопрос: Как изменить внешний код товара в битрикс?

Лучший ответ:
Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Информационные блоки
Настройка параметров модуля, поставить галку "Показывать код загрузки из внешних источников:"

Худший ответ:
Через редактирование элемента: https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
Если вы не видите нужного поля, проверьте не применены ли пользовательские настройки к форме https://dev.1c-bitrix.ru/learning/course/index.php...
Вопрос: Есть ли какая-нибудь книга по php mysqli?

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

Худший ответ:
На английском, https://phpdelusions.net/mysqli_examples
Но я тоже порекомендую ПДО, как более удобный в работе и универсальный инструмент. 
Вот только мануала совсем недостаточно. ПДО - очень гибкая и удобная библиотека, но хомячки используют не больше 5% из её функционала, низводя до замены mysql_query/while(mysql_fetch_array()). Просто потому что мануал - это не учебник а справочник. 
Начать изучение ПДО можно отсюда: phpfaq.ru/pdo
Вопрос: Зачем ботов заворачивают во Flask (как пример)?

Лучший ответ:
От http вы получите много готовых решений. Таких как, масштабирование, балансировку, мониторинг,  следовательно стабильность, производительность, ускоренное решение проблем.

Худший ответ:
Api разное используют, если без http сервера, то используете longpoll апи и сами опрашиваете сервер на доступные события.
А если используете http сервер, то это callback api, там сервер сам присылает на ваш сервер запрос, когда происходит какое либо событие. Как по мне просто отличие в api.