Apple Shortcuts կամ պայքար ՀԷՑ-ի դեմ իմ ձևով

Ամեն տարվա մայիս-հունիս ամիսներին Հայաստանի Էլեկտրական Ցանցերը պարտաճանաչորեն սկսում են Ջրվեժում (որտեղ ես եմ ապրում) հոսանքի պլանային անջատումների սեզոնը։ Անջատումները էն աստիճան պարբերական են դառնում, որ անհնար ա դառնում հաջորդ օրը պլանավորելը առանց հոսանքի անջատման մասին իմանալու, իսկ եթե մի օր հանկարծ մոռանում ես մտնել ena.am (որը իմ պարագայում դեպքերի 3/4-ն է) ու ձեռքով ստուգել՝ անջատում կա, թե չէ, ապա հաջորդ օրը ցնցուղի տակ մտնելուց անմիջապես առաջ լույսը վրադ ա անջատվում ու կյանքը քեզ սառը ցնցուղ ա մատուցում, բառի ուղիղ և փոխաբերական իմաստներով։

Ջրվեժն, իմիջիայլոց, շատ բազմիմաստ տարածք ա. կա Ջրվեժ գյուղ, Ջրվեժի ամառանոցներ, և Ջրվեժի Բանավան ու Մայակ թաղամասեր (չեմ ասի՝ ես որտեղից եմ 😜)։ Սրանք բոլորը սնվում են հոսանքի տարբեր աղբյուրներից ու պլանային անջատումների հայտարարությունների էջում առանձին են հանդես գալիս, բայց մեծավ մասամբ եթե էս տարածքներից թեկուզ մեկը ներառված ա հայտարարության մեջ, մնացած երկուսում էլ անջատում հաստատ լինում ա։ Սա հաշվի առնելով, չնայած գիտեի, որ որոշ կոմունալ օպերատորներ անջատումների մասին SMS-ծանուցման ծառայություն ունեն, նույնիսկ չստուգեցի՝ ՀԷՑ-ն ունի նման ծառայություն, թե չէ. միևնույն ա սխալ էր աշխատելու։ Ընդհանրապես, ըստ իս ՀԷՑ-ը շատ փուֆ կազմակերպություն է, դրա համար նրա մասին էլ չենք խոսի էս հոդվածում. կնյարդայնանամ։

Ի վերջո, որոշեցի բողոքելու փոխարեն ինքս հարցերս լուծել։ Շատ բան պետք չէր. օրվա մեջ մի անգամ,– երեկոյան ըստ երևույթին,– հարկավոր էր քերել (անգլ. crawl. լավ էլ թարգմանություն է) ՀԷՑ-ի կայքի պլանային անջատումների հայտարարությունների էջի պարունակությունը, որն օրական պարբերականությամբ թարմացվում է, մեջը փնտրել «ջրվեժ» բառը (հիշենք ջրվեժյան սուրբերրորդություն-նույնությունը նախորդ պարբերությունից). եթե գտնվեր, ապա անջատում ամենայն հավանականությամբ կար, եթե չէ՝ չէ։ Գտնվելու պարագայում հարկավոր էր ինձ ծանուցում ուղարկել։

Հարմար գտա օգտագործել HerokuScheduler-ը, որը որոշակի հաճախականությամբ one-off dyno ա գործի գցում, անելիքներն անում ու անջատվում, cron-ի պես։ Ծանուցումն ուղարկելը որոշեցի կազմակերպել TelegramBots API-ով. մի տրաքած անունով բոտ կսարքեմ, որը կշփվի միայն իմ հետ, եթե նույնիսկ ինչ-որ նույնքան տրաքած ձևով ինչ-որ մեկը իրեն կարողանա գտնել ու իր կողմից միացնել։

Ինձնից գոհ սկսեցի Node-ով գրել ծրագիրը, ամեն ինչ շատ լավ էր գնում սկզբից։ Իմ մեքենայի վրա խառը գործարկումները բոլորը հաջող էին անցնում, որոշեցի արդեն deploy անել Heroku։ Heroku-ում էլ տերմինալով բոլոր գործարկումները հաջող անցան։ Scheduler-ով ծրագրեցի, որ ամեն օր 21:30 գրածս գործարկվի, ու սկսեցի ժամերը հաշվել մոռացա դրա մասին։ Եվ voilà, 21:30-ին եկավ ծանուցումը այն մասին, որ ena.am-ին չի ստացվել միանալ 😊 Զարմանալի էր, քանի որ ցերեկը Heroku bash-ից նորմալ միացել էի։ Երկար դեգերումներից հետո պարզեցի, որ www.ena.am-ը, որը ավտոմատ վերահասցեավորվում ա ena.am-ից, TLS 1.2 հաղորդակարգով հարցումներին նոպաներով չի կարողանում պատասխանի, որն էլ մինիմալ պայման ա Heroku-ի համար։ Մնում էր միայն գոհանալ, որ Telegram-ի սերվերի հետ խնդիր չկա և ամեն օր 21:30-ին գոնե հիշեցում եմ ստանում այն մասին, որ ձեռքով ստուգեմ՝ անջատում կա, թե չէ։

Notification Centre-ում ծանուցում այն մասին, որ հարկավոր է ձեռքով ստուգել անջատումները։

Մոտ շաբաթուկես օրընդմեջ ձեռքով-ավտոմատ ստուգելուց հետո մի գիշեր քնելուց առաջ ուղեղս փայլատակեց, որ կարելի ա Heroku-ի հույսին չմնալ և էդ ամենը կազմակերպել որպես հեռախոսի personal automation։ Քանի որ գիտեի, որ iOSshortcut-ները գրաֆիկական ծրագրավորման բավականին ճկուն հնարավորություններ ունեն, որոշեցի փորձեմ Node-ով գրածս տրամաբանությունը ուղղակի փոխադրել shortcut-ի, որը էլի ամեն օր 21:30-ին որպես personal automation կգործարկվի արդեն հենց հեռախոսիս վրա։ Ճիշտ ա, հեռախոսս երաշխավորված չի, որ Heroku-ի պես ամեն երեկո 21:30-ին օնլայն կլինի ու կկարողանա անելիքներն անել, բայց դե նման բան հազվադեպ ա պատահում ու դա ծանրակշիռ փաստարկ չի փոխադրումը չկազմակերպելու։

Ձեռքով shortcut գրելը պարզվեց շատ ավելի հոգնեցուցիչ ա, քան կոդ գրելը, քանի որ action-ները բավականին հարմարացված են ոչ-տեխնիկական թեքումով մարդկանց համար ու եթե քո պահանջները մի քիչ տեխնիկական են, ինչպես օրինակ regex-ով տողի մեջ match անելը կամ էջի HTML կոդը ստանալը, ապա ալգորիթմը շատ ծամծմված ա ստացվում։ Ինչևէ, մի կես ժամից արդեն պատրաստ էր անջատումների քերիչիս (անգլ. crawler. ահահա, սա խնդալու ա արդեն) shortcut-ային տարբերակը։ Սարքածս shortcut-ով ավտոմատացում միացրի ու էս անգամ արդեն ամեն ինչ բարեհաջող էր։ Եկող օրերի ընթացքում բազում փորձերով նաև հաստատվեց կանխադրույթս, որ հեռախոսս պրոբլեմ չէր ունենա ena.am-ին կապվելուց. մի խնդիր էլ արանքից դուրս եկավ 🥳

Սկզբում ամեն ինչ՝ ena.am-ից HTML ստանալը, ամսաթիվ քերելը ու Telegram API դիմելը, անում էի մի shortcut-ի ներսում, ու էդ մի shortcut-ը նայելուց բորշչ էր հիշեցնում։ Որոշեցի մոդուլային մոտեցում ցուցաբերել՝ օգտվելով shortcut-ների ելքային արդյունք ունենալու հնարավորությունից, ու էս մի shortcut-ը բաղադրեցի 2 shortcut-ների։ Մեկը քերում է ena.am-ն ու սպասվող անջատում հայտնաբերելու պարագայում վերադարձնում դրա ամսաթիվը, իսկ մյուսը վերցնում է առաջին shortcut-ի արդյունքը ու ինչ ուզում անում դրա հետ (իմ պարագայում՝ ուղարկում Telegram-իս)։ Համ էլ էսպես կարող եմ ձեր հետ էլ կիսել առաջին shortcut՝ առանց ձեզ Telegram բոտիս token-ը ցույց տալու պարտադրելու, թե ստացած տվյալի հետ ինչ անեք 😊

Թարմացում ։ Էսօր տարօրինակ նամակ ստացա այն մասին, թե մայիսի 9-ին սպասվում է հոսանքի անջատում։ Դեռ չմտած ena.am արդեն կռահում էի ինչ ա կատարվել. պարզապես վաղը անջատում էր սպասվում նաև Շենգավիթի Մայիսի 9-ի փողոցում (որը ես չգիտես ինչի հիշում էի, թե Այգեստանում ա 🤔), իմ ալգորիթմն էլ ամբողջ հայտարարության մեջ հունվարից սկսած ման էր գալիս ամիսների անունները ու առաջին պատահածը կողքի թվերի հետ վերցնում (մայիս < հուլիս)։ Ալգորիթմը շատ չբարդացնելու համար տրամաբանությունը նույնը թողեցի, փոփոխեցի միայն այն, որ հիմա ամսանունները միայն առաջին պարբերության մեջ ա ման գալիս։


Մեկնաբանություններ