Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: 12500h или 6800h?

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

Худший ответ:
Крайне малое сравнение прикрепил снизу.
Но на своём опыте выбрав Intel не прогадал, на день работы заряда мне спокойно хватает, а с драйверами проблем не испытываю, в отличие от своего знакомого. Но опять же, характеристики снизу говорят о преимущества AMD. Бери эти все нюансы в расчёт и делай свой выбор.
Удачного приобретения!
Вопрос: Можно ли взять браузер, вывести в нем стартовой страницей свой сайт, назвать это приложением и залить в app store?

Лучший ответ:
Можно. Но сторы это не пропустят

Худший ответ:
можно но сторы это не любят. 
У меня отдельная срочка в услугах заливать приложения кордова.
Вопрос: Как лучше объединить 2 hdd в 1?

Лучший ответ:
Для получения 5TB надо делать RAID0 или JBOD. Какими средствами - непринципиально. Всё равно при выходе одного HDD из строя с большой вероятностью потеряете всю информацию.

Худший ответ:
програмными в винде
рейд 1 делает дублировние
нужен рейд 0 - при выходе из строя 1 диска данные буду не читаемы
Вопрос: Что такое ROM и зачем она нужна?

Лучший ответ:
Не все программы и ос хранятся на hdd

Есть еще такая BIOS и вот она нужна для того, чтобы запустить все остальные.

Центральный процессор слишком просто устроен для того, чтобы общаться с hdd и читать с него файловую систему.

Поэтому с древних времен на материнские платы ставят специальный чип, который содержит эту BIOS и хранится она в ROM

Точнее, в древние времена хранилась. Потом стало достаточно дешево ставить туда ROM, которую можно стереть ультрафиолетом, потом EEPROM, которую можно перезаписывать электрически.

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

Лучший ответ:
Полный алик таких модулей (искать arduino mic), но со стороны это выглядит как проблема X-Y. Если нужно ловить именно телефонный звонок, можно

1) поставить на телефон приложение - уведомлятор
2) использовать GSM-модуль, который явно передаст информацию о звонке в контроллер.

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

Вероятной причиной может быть некорректная обработка вами полученного сигнала в коде или ошибки в монтаже, а не "низкая чувствительность"

Худший ответ:
Кстати, много есть на сайте производителя микрофонов. И акустика, и калькулятор звукового давления по расстоянию, и типовые схемы.
Вопрос: Какой программатор должен стоять при прошивке Arduino Nano?

Лучший ответ:
Никакой. Точнее сказать, не важно, что в этом пункте выбрано. Вы же не используете программатор.
Возможно в пункте "Процессор" следует выбрать "ATmega328P (Old bootloader)"

Худший ответ:
Не важно, эта настройка для внешнего программатора через SPI (шестиконтактная колодка).
Если ардуинки брали давно, рекомендую попробовать выбрать Процессор > ATMega328P (Old Butloader)
Вопрос: Как написать приложение на c++?

Лучший ответ:
если вам нужно чистое c++, то любая os предоставляет api: просто вбиваете в поисковик что-то вроде
"c++ windows create window" и получаете пачку ссылок на официальные мануалы и популистические статьи.

но это на самом деле путь в бездну. от себя могу порекомендовать фреймворк qt (он кроссплатформенный и его интерфейсы гораздо более соответствуют языку c++ (интерфейсы OS слииишком сишные))

а иконка на рабочем столе -- это просто специальный файл, говорящий выполнить определённую команду (как правило -- запуск экзешника) можете поэкспериментировать и руками посоздавать иконки на рабочем столе к вашим консольным играм.
Если же вас интересует, как сделать установщик -- то именно такие слова и рекомендую вбить в поисковик.
Я для своих плюсовых проектов обычно использую InnoSetup.

Худший ответ:
win32 api 
но вот прям сейчас есть явно более легкие варианты
Вопрос: Касперский принимает Logitech GHub как вирус. Что делать?

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

Худший ответ:
Спрашивайте или у логитеча или у каспера, скорее всего случайно задетектил
А так хз, я антивирями не пользуюсь, кроме виндового встроенного
Вопрос: Как найти настоящего эксперта по ML (для консультаций), а не выпускника «курсов дата-саенсов» с бэкграундом копирайтера?

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

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

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

Худший ответ:
можно найти курсы не по вэб-разработке Любые курсы это не более чем один из множества способов "честного отъема денег у населения". 

мы не рассматриваем образование в ВУЗе А зря, серьезный "разработчик прикладного ПО" это в первую очередь серьёзное ВО.

Требуется научиться реализовывать простенькие программы с GUI Это навык практически любого десятиклассника, который добросовестно выполняет задания по информатике. К разработке прикладного ПО это не имеет никакого отношения.

книги пробовал, не пошло Ой! А вот и ваша проблема. Программист ПИШЕТ!!!!! программы, а всем известно что тот кто не в состоянии читать писать не способен.
Вопрос: Почему простой цикл на c++ выполняется медленнее, чем на golang?

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

Худший ответ:
С добавлением полезной нагрузки в цикл и флага оптимизации -O2 при компиляции на плюсах получились такие результаты
c++
#include <iostream>
#include <chrono>

int main(){
    auto start_time = std::chrono::steady_clock::now();
    long long c = 0;
    for(long long i = 0; i < 1000000000; i++){
        c+=c xor i;
    }

    auto end_time = std::chrono::steady_clock::now();
    auto elapsed_ns = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
    std::cout << elapsed_ns.count() << " ms\n";
    std::cout << c << std::endl;
    return 1;
}

go
package main

import (
	"fmt"
	"time"
)

func main(){
	var f int64 = 0
	var i int64 = 0
	start := time.Now()

	for i = 0; i < 1000000000; i++{
		f+=f ^ i
	}
	duration := time.Since(start)

	fmt.Println(duration)
	fmt.Println(f)
}



Всё дело в оптимизации
Вопрос: Возможна ли связка React JS + sequelize (библиотека Node JS)?

Лучший ответ:
Еще как можно. Как вариант SSR -> Next.js + sequelize (БД)

Худший ответ:
Связка невозможна, так как это фронтенд. Требуется написать сервер. Если это пет проект, то напишите простейший сервер на node.js/express и добавьте к нему sequelize
Вопрос: Как поймать ошибку в NodeJS?

Лучший ответ:
Проблема оказалась внутри библиотеки SocksProxyAgent. Уже не помню где читал, но где-то на GitHub писали, что такая ошибка вываливается как uncaught, потому что не висит обработчик на событии ошибки для tls.connect.
В итоге исправил 
return tls.connect({
    ...omit(opts, 'host', 'hostname', 'path', 'port'),
    socket,
    servername
});

На следующий код
const tlsConnection = tls.connect({
    ...omit(opts, 'host', 'hostname', 'path', 'port'),
    socket,
    servername
});
tlsConnection.on('error', () => {
    return null;
});
return tlsConnection;

Возможно имеет смысл ещё покопаться с библиотекой в поисках более изящного решения. Пока что не работает даже если выкидывать ошибку через throw new Error(). Если найду другое решение, отпишу в комменты

Худший ответ:
а это не поможет? 

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
Вопрос: Invalid drive D:\ решение?

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

но можно обойтись малой кровью
и сделать его снова D:\

ПКМ на значок start (win+R diskmgmt.msc)> Управление дисками
если дисководу присвоен D:\
выделяем дисковод (обычно он под буквой D, если нет, то другой раздел)>изменить букву диска > изменить>ставим любую
выделяем диск E:\ > изменить букву диска > изменить > ставим D:\

Худший ответ:
Нажимаете WIn+R, пишем diskmgmt.msc , потом выбираете свой диск(Е) в списке слева сверху  , ПКМ -> Изменить букву диска или путь..... и там дальше понятно, при этом если буквы D там не будет, то вам нужно будет его найти в списке менеджера дисков и удалить.
Вопрос: Как понять в коде сложность алгоритма?

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

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

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

Мозги свои, к сожалению не вложишь, поэтому если чел уже зомбирован - нужно какое-то сильное потрясение, чтобы "прошивка" сбросилась :)

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

Лучший ответ:
Вот никогда не захожу в вопросы "Почему это не работает?", "Что с кодом?", "Ошибка!!!" и т.д. Сейчас просто ради спортивного интереса заглянул в очередной бессмысленный вопрос "Как реализовать подобное на python?" Что "подобное"? Неужели так трудно вместо "Как реализовать подобное на python?"  прямо написать: "Как программу заставить ждать определенное событие и запустить скрипт python?"

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

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

from my_awesome_module import my_awesome_function
from flask import Flask, request, Response, abort

app = Flask(__name__)

@app.route('/', methods=['GET'], defaults={'path': ''})
@app.route('/<path:path>', methods=['GET'])
def serve(path):
  result = my_awesome_function(path)
  if result == 0:
    return Response("OK")
  else:
    return abort(500)

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=123456)
Вопрос: Хочу узнать про процессор?

Лучший ответ:
вставить процессор в заведомо рабочую материнскую плату

отнеси в нормальный сервис, который проведет адекватную диагностику, стоимость этого будет рублей 200 в худшем случае (обычно бесплатно)

p.s. отнеси все, и материнку и процессор, лучше весь компьютер

Худший ответ:
Можно сделать так:
1. сфотографировать сокет с погнутыми ножками
2. найти в интернетах карту что какие ножки делают
3. выяснить что отвалилось когда ножка погнуласть
4. выяснить до каких соседних ножек она могла дотянуться
5. ПОПЫТАТЬСЯ УГАДАТЬ что произошло когда вы установили процессор в гнутый сокет.

но гораздо проще, и без этапа угадывания будет выяснить это в сервисе.
мог и процессор повредиться, и мат плата, и оба одновременно.
А может вообще все ок, надо только ножки нормально распрямить.
Вопрос: Как пробросить порты на 2 роутерах Microtik LHG Lte и Netis?

Лучший ответ:
на нетисе отключить dhcp сервер, нат, фаервол и т.п. Включить кабель от микротика в ЛАН порт нетиса.
Получите один роутер, управляющий сетью и раздающий адреса.
Вот на нем проброс портов и рисуйте.

Ну или на обоих роутерах - на микротике пробрасываете порт на ип адрес нетиса, на нетисе - пробрасываете порт на нужный сервер.

Худший ответ:
Либо как укзаал Руслан, либо 2 раза проброс. с микротика на Netis и оттуда уже на нужный локальный адрес
Вопрос: Вопрос к HR. Как часто ищут/принимают соискателей именно с высшим образованием?

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

Худший ответ:
Работаю программистом. Компания небольшая, всего несколько десятков человек, поэтому параллельно с основной работой провожу собеседования. На вышку, конечно, смотрю, но только в том случае, если опыт работы отсутствует/небольшой. 
Если есть большой опыт работы (и особенно к этому прилагаются какие-то проекты в репозитории, на том же гитхабе, например), то уже не особо важно, есть вышка или нет. Если опыта особо нет, но есть хорошие проекты — то на вышку можно глазком глянуть, но не обязательно. Если же и опыта не особо много, и код не очень хороший, то вот тогда уже смотрю на вышку и думаю, стоит ли человека звать на собеседование, или же сразу отказать.
Если и с опытом беда, и с кодом всё плохо (или даже их нет), то даже если есть несколько высших образований, связанных со специальностью, то человека на собеседование звать не буду, скорее всего. Исключением служит ситуация, когда в компанию нужны стажёры, тогда есть шанс, что позову.

В общем, у нас наличие вышки почти никогда не учитывается: намного более важны навыки и знания. А примером этого являются либо опыт работы, либо наличие собственных проектов (да хотя бы простейших, тестовых).

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

И да, собеседования провожу не только я, у нас для этого есть ещё другие люди, просто у каждого своя специализация. Но подход, описанный мной, у всех общий.
Вопрос: Где ошибка в JSON?

Лучший ответ:
Запятая после последнего элемента.

Худший ответ:
Форматтер и валидатор. Твой пример он сам исправил и написал, что удалил запятую
https://jsonformatter.curiousconcept.com/
Вопрос: Как скачать видео частями?

Лучший ответ:
youtube-dl  — библиотека для скачивания видео с YouTube
Вот нашёл обертку под C# 
YoutubeDLSharp

var res = await ytdl.RunVideoPlaylistDownload(
    "https://www.youtube.com/playlist?list=PLPfak9ofGSn9sWgKrHrXrxQXXxwhCblaT",
    start: 52, end: 76
);

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

Лучший ответ:
Разработчик разработчику рознь

Кто то модифицирует физику, создавая искривленные пространства, таким точно нужно как минимум понимание как все устроено в движках на низком уровне.

А кто то будет клепать сотнями игры кликеры, где ни графики ни геймплея ни сложности, такие используют игровые движки больше как инструмент картинку отобразить (этакий оверкил). Таким и вовсе не понадобится даже понимать что такое opengl

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

Худший ответ:
"Игровой движок" это не только "графический движок". Смысл игровых движков ка краз в том, чтобы абстрагироваться от низкоуровневых вещей. В идеале - никогда с ними не сталкиваться вообще.
Но!
Если в движке что-то не реализовано, то этого чего-то либо вобще невозможно использовать, либо нужно писать самому, возможно, на чистом OpenGL/DirectX. То есть до какого-то момента "низкие" знания не нужны, но в какой-то момент они могут очень понадобиться.
Хотя бы поверхностные знания будут плюсом - при необходимости будете понимать, куда лезть и какие знания нужно подтянуть для решения задачи.
Вопрос: Как лучше организовать типизацию входных параметров метода?

Лучший ответ:
Для перечислений можно использовать Enum, это подойдёт для TextAlign.
Для других кейсов можно использовать ValueObject с валидацией в конструкторе.

Худший ответ:
Как вариант можно сделать константы со списком необходимых параметров для каждого метода. Но это добавит в каждый ваш метод класса небольшую проверку в ~1 строку.
Вопрос: Как подключить css и js файлы в админку для авторизованных, если они находятся выше public?

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

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

Лучший ответ:
Просто начните думать почасовыми ставками. Сейчас ваша ставка примерно 200 руб/час.
На свой следующий проект назначьте 210 руб. в час и т.д. Постепенно дойдете до более менее приличной ставки.

И конечно нужно пытаться рабоать на всех биржах куда есть доступ.

Худший ответ:
Тут принцип такой - если ты затянул время по своей вине (сам тупил жестко или взялся за то, что не умеешь делать), то такие часы не стоит логировать и не брать за них оплату. А если у этого была объективная причина - задача реально оказалась сложнее чем вы изначально рассчитывали, то такие вещи стоит рассказать заказчику, чтобы он понял причину увеличения сроков.
В целом работа по часам гораздо проще и честнее для обеих сторон - сколько проработал, столько получил/заплатил. И не нужно супер точно оценивать работу заранее. Достаточно дать грубую оценку и дальше уже работать.

По поводу Upwork - будь готов, что там очень жесткая конкуренция. Если ты новичок, то тебе будет сложно биться с армией таких же новичков и в случае неудачи возможен пожизненный бан. Если уверен в своих силах, то дерзай. Но 750р/час ($10) это ставка индусов на Upwork'е. Нормальный питонист должен брать от $20 и выше.
Вопрос: Как подключится к ноутбуку(Wi-Fi) с компьютера (Ethernet) в одной сети (роутер) по RDP?

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

В настройках фаервола необходимо отключить его для работы в локальной сети, выбрать тип сети - частная (по умолчанию она - общедоступная)

Худший ответ:
В общем, проверил так же устройства другие. Все заработает прекрасно. То есть с другого ноутбука (Wifi) я подключаюсь к другому ноутбуку (Ethernet) без проблем и пингую в консоли.

Проблема только на основном компьютере: когда пингую другую машину, пишет это.

Обмен пакетами с 192.168.100.2 (ноутбук) по с 32 байтами данных:
Ответ от 192.168.100.8 (компьютер) : Заданный узел недоступен.

Компьютер отвечает, что "заданный узел недоступен". В чем может крыться проблема в ПК?
Вопрос: Как сохранять и сокращать ОЧЕНЬ большие числа типа int?

Лучший ответ:
Варианта три:
1. Использовать double - тогда максимум у тебя будет примерно 1e308 (1 с 308 нулями)
2. Хранить число в виде двух чисел - значение и степень десятки Точность на больших числах будет низкая, но предела по сути нет - можно будет хранить числа вплоть 2^64*10^(2^64) (если использовать два long). Эту же методику можно и с double реализовать - получится ~10^308*10^(10^308), что ещё больше
3. Можно попробовать BigInteger - по памяти не эффективно, медленно, но зато точность идеальная.

Чтобы прямо весь код не переписывать - свое "особое" число ты можешь реализовать как структуру со всеми нужными операторами и операторами приведения типов.

Вот пример, без реализации операторов
struct ExponentialInteger
{   
    private readonly int value;
    private readonly int exp;
    
    //.ctor
    // operator +
    // operator -
    // operator *
    // operator /
    // operator implicit
    // operator explicit
    // IEquatable, IComparable, IFormattable
    // итд
    private static string[] suffix = new[]
    {
        "", "K", "M", "t", "q", "Q", "s", "S", "o", "n", "d", "U", "D", "T", "Qt", "Qd", "Sd", "St", "O", "N", "v", "c"
    };

    public override string ToString()
    {
        if (exp >= suffix.Length || exp < 0)
        {
            return $"{value}*10^{exp}";
        }
        else
        {
            return $"{value}{suffix[exp]}";
        }
    }
}


Худший ответ:
Ну т.е. по сути игрок видит только числа от 0 до 1000, и жалуешься что long не хватает, а тут 10 бит за глаза.
Но если вы так за свой код переживаете, используйте BigInteger
Вопрос: Как сделать так чтобы в 00:00 происходило действие?

Лучший ответ:
засунуть нужный скрипт в crontab

Худший ответ:
Можешь использовать любой удобный планироващик.
https://www.npmjs.com/package/node-cron
https://www.npmjs.com/package/node-schedule