Както споменах в моята последна публикация, една от най-удовлетворяващите части от разработката на софтуер за мен е писането на код за решаване на проблем, за който той е напълно ненужен. Когато започнах да мисля за днешната задача, разбрах, че използването на някои умения за разработка на софтуер, за да се поправи това, всъщност не е най-лошата идея, така че днес ще направим точно това. Нека се потопим в писането на код, който да ни помогне да останем хидратирани!

Всеки един ваш проблем може да се реши с пиене на вода. Главоболие? Вероятно сте дехидратирани; пийни малко вода. Гладни? Също така е възможно просто да сте жадни, така че изпийте малко вода, преди да ядете нещо. Стомашни болки? вода. Парализираща социална тревожност? Изпийте тази вода - тя ви дава шанс да не се налага да говорите известно време. Счупен крак? Посетете лекар, но пийте и вода, защото защо не?

Преминавам през фази в живота си, в които се опитвам да пия повече вода. Проучванията показват безброй ползи от получаването на достатъчно вода. И честно казано, когато изглежда, че не мога да контролирам нищо друго в живота, поне мога да контролирам приема на вода.

Така че, въпреки че има много страхотни причини да пиете повече вода, е изненадващо трудно да запомните да го направите. Без напомняния често забравям да пия много между храненията. Настройвал съм напомняния на телефона си и преди, но е доста неприятно поради необичайните моменти, в които искам напомнянето да се повтаря. Мога да настроя напомнянията да бъдат ежечасни, ежедневни, седмични, двуседмични и т.н. Настройването им, да речем, на всеки 2 или 3 часа от момента, в който се събудя до момента, в който заспя, е малко по-сложно. В крайна сметка зададох ежедневно напомняне за 10 часа сутринта, отделно дневно напомняне за обяд и т.н., за да се боря с факта, че не мога да персонализирам по свой вкус. Така че всъщност малко кодиране не е най-лошата идея тук.

Решението

Една опция, която обмислих, е създаването на клиентско приложение и настройването му да получава известия. Това изглеждаше като много допълнителни разходи, когато всичко, което исках, беше самото известие. Вместо това избрах работа на cron без сървър, която изпраща текстово съобщение до телефона ми, напомнящо да пия вода.

Използвах „функция за планирани облачни функции“, тъй като беше супер лесно да разпределя конкретни времена, в които искам функцията да се изпълнява.

Използвах Twilio, за да управлявам изпращането на текстовите съобщения. До голяма степен просто копирах „примера за бърз старт“, тъй като отговаряше на проекта. Twilio удостоверява клиент с помощта на sid на акаунт и токен за удостоверяване, като и двата могат да бъдат намерени в конзолата на Twilio. Исках да запазя тези стойности защитени и извън моя код, така че ги съхраних в средата.

import * as functions from ‘firebase-functions’;
import * as twilio from ‘twilio’;
const accountSid = functions.config().twilio.accountsid;
const authToken = functions.config().twilio.authtoken;
const client = twilio(accountSid, authToken);
exports.scheduledFunctionCrontab = functions.pubsub
    .schedule(‘0 8,10,12,14,16 * * *’)
    .timeZone(‘America/Chicago’)
    .onRun((context) => {
        return client.messages
            .create({
                body: ‘girl, don\’t forget to drink that water!’,
                from: ‘+15555550142’,
                to: ‘+15558675309’
            })
            .then(message => {
                console.log(message.sid);
            })
            .catch(error => {
                console.error(error);
            });
    });

И това е всичко! С изключение…

… едно и също съобщение отново и отново остарява. Също така, няма ли да е хубаво, ако мога да отговарям и да следя колко пия? Предполагам, че ще трябва да добавя още нещо към този проект! Останете на линия :-)