Një LeetCode në ditë, e mban papunësinë larg

Nëse keni qenë ndonjëherë në kërkim pune për një pozicion zhvilluesi të softuerit, do të kishit hasur në të ashtuquajturat intervista të stilit LeetCode.

Përkundër faktit se shumica prej nesh nuk duhet të "përmbysin një Pemë Binare" në punën tonë aktuale, kështu kryhen shumica e intervistave koduese/teknike në kompanitë e mëdha të teknologjisë si Google dhe Microsoft. Po, edhe tek "unicorns" (përveç Stripe, sepse janë të lezetshëm) dhe startups.

Në këtë postim, unë do të shkruaj për procesin e mendimit se si arrita të ndërtoj dhe vendosa një aplikacion shumë të thjeshtë JavaScript falas me Cloudflare Worker. Nëse thjesht dëshironi të vendosni dhe përdorni aplikacionin vetë, shikoni depon "këtu".

TL;DR

  • Si të merrni pyetjen Daily LeetCoding Challenge duke përdorur LeetCode API
  • Krijimi i një detyre Todoist duke përdorur Todoist API
  • Planifikoni aplikacionin tonë që të funksionojë çdo ditë duke përdorur Cloudflare Worker ScheduledEvent API
  • Si të testoni një shkas të Cloudflare Worker Cron në nivel lokal me Miniflare

Deklarata e problemit

Që një vit më parë, jam përpjekur ta bëj zakon të zgjidh sfidën e përditshme LeetCoding (me të cilën jam ende duke luftuar). Duke qenë se po përdor Todoist si mjetin tim kryesor të produktivitetit të zgjedhur, kam një detyrë të përditshme që duket si kjo:

Si një person dembel, të kontrolloj "leetcode.com" sa herë që dua të praktikoj është shumë e mundimshme. Atëherë mendova, pse të mos sinkronizoni Sfidën Daily LeetCoding me Todoistin tim çdo ditë?

Kërkesat

Le të fillojmë duke përcaktuar se çfarë dua të bëjë aplikacioni:

  1. Merrni pyetjen e sfidës së përditshme LeetCoding
  2. Aftësia për të krijuar një detyrë të re në llogarinë time Todoist
  3. Sinkronizoni pyetjen e re të sfidës së përditshme LeetCoding në kohë
  4. Aplikacioni duhet të sinkronizohet në kohë falas çdo ditë

Le të fillojmë!

LeetCode API

Ashtu si çdo person i arsyeshëm do të bënte, gjëja e parë që bëra ishte të bëja disa kërkime. Me kërkime, doja të thoja se fillova të përdor Google për informacion.

Gjëja e parë që bëra ishte që menjëherë të Google për “leetcode API”, duke kërkuar dokumentacionin zyrtar të API-së.

Dokumentacioni zyrtar API

Për habinë time, nuk kishte asnjë dokumentacion zyrtar API të LeetCode në dispozicion. Ndërsa ka disa depo jozyrtare të LeetCode API në GitHub, më mirë të mos përdor asnjë API jozyrtare për shkak të shqetësimeve të besueshmërisë (të mirëmbajtura dobët, të vjetëruara, etj.).

Inspektimi Good Ol' DevTool

Gjëja e dytë që më erdhi menjëherë në mendje ishte të inspektoja kërkesën e rrjetit që po bëhej gjatë vizitës në sitin https://leetcode.com/problemset/all/.

Me këtë, unë isha në gjendje të kuptoja API-në e saktë të thirrur për të kërkuar për Sfidën Daily LeetCoding - u krye.

Këtu është trupi i kërkesës GraphQL:

Ju mund të përdorni komandën curl më poshtë për ta provuar vetë:

Kodi

Mjaft duke folur, le të fillojmë të shkruajmë një kod që bën pikërisht atë që kemi kaluar:

Detyra "Merr pyetjen e sfidës ditore të LeetCoding" - e kontrolluar.

Todoist API

Ashtu si ajo që bëmë në hapin e mëparshëm, unë munda të gjeja "dokumentacionin zyrtar API për Todoist". Në mënyrë tipike, seksioni i parë që unë gjithmonë kërkoj në dokumentacionin API është seksioni "Autorizimi", veçanërisht kur dëshironi të kryeni operacione të krijimit/përditësimit/fshirjes në një aplikacion.

Me pak fjalë, autorizimi ishte mjaft i drejtpërdrejtë për Todoist:

  1. "Merrni shenjën tuaj API"
  2. Sa herë që bëni një kërkesë, bashkëngjitni Authorization: Bearer xxx-your-todoist-api-token-xxx në kokën e kërkesës suaj HTTP

Ja një shembull se si do të dukej komanda curl për të krijuar një detyrë të re në Todoist:

Kodi

Shkrimi i një funksioni që bën atë që thamë është relativisht i lehtë, duket diçka si kjo:

Detyra "Krijoni një detyrë të re në llogarinë time Todoist" - u krye.

Punëtor Cloudflare

Dhe ne jemi në detyrën tonë të vetme përfundimtare – ekzekutimin/automatizimin e 2 detyrave të mësipërme çdo ditë, falas.

Gjëja e parë që më erdhi në mendje ishte puna e Cron. Kështu që, menjëherë fillova të kërkoja zgjidhje falas në internet. Pasi kalova disa orë duke bërë disa detyra shtëpie, hasa në Cloudflare Worker dhe mendova t'i provoja.

Ai funksionon në V8 JavaScript, jo në Node.js

Ky është ndoshta një nga keqkuptimet më të zakonshme "për Cloudflare Worker". Meqenëse mjedisi i punonjësit nuk është në Node.js, shumë paketa (p.sh. npm install some-node-package) që janë duke ekzekutuar në Node.js thjesht nuk do të funksiononin.

Këshillë: Shikoni paketat dhe bibliotekat e mbështetura këtu.

Me fat për ne, na duhet vetëm të përdorim JavaScript të integruar fetch API.

Më shumë kod

Fillimi i një projekti Cloudflare Worker është i thjeshtë (referencë), në thelb:

  1. Instaloni Wrangler CLI duke përdorur npm install -g @cloudflare/wrangler
  2. Vraponi wrangler generate <your-project-name> <worker-template>
  3. Pika hyrëse është funksioni addEventListener. Për rastin tonë të përdorimit, ne do të përdorim API-në ScheduledEvent ku thjesht duhet të ndryshojmë ngjarjen tonë nga "fetch""scheduled"

Le të bashkojmë gjithçka:

Më pas, thjesht do të na duhej të modifikonim wrangler.toml si më poshtë:

Me cilësimin e mësipërm, punonjësi do të vrapojë çdo ditë në 00:01 UTC dhe do të sinkronizojë Sfidën Ditore të LeetCoding me Todoistin tuaj.

Kjo eshte e gjitha! Kalimi në testim.

Si të testoni punonjësit e Cloudflare në nivel lokal

Për të provuar aktivizuesit Cron në nivel lokal, do të na duhet të instalojmë "Miniflar" CLI. Pas instalimit, mund të drejtoni punonjësin tuaj duke përdorur:

# At terminal 1
miniflare
# At terminal 2
curl "http://localhost:8787/.mf/scheduled"

Nëse shihni se është krijuar një detyrë e re në Todoistin tuaj, ju e keni arritur atë!

Vendosja

Asnjë projekt anësor nuk bëhet kurrë pa e pritur atë.

Për të vendosur aplikacionin vetë menjëherë, shikoni "depo projekti" dhe përdorni butonin "Deploy with Workers"". Nëse jeni të interesuar për njohuritë:

  1. Krijoni një llogari në Cloudflare.
  2. Shto TODOIST_API_TOKEN duke përdorur wrangler secret put TODOIST_API_TOKEN. Sekretin e shtuar rishtazi mund ta gjeni nën Cloudflare WorkerSettingsVariables. Mund të merrni tokenin tuaj të API Todoist këtu.
  3. Opsionale: Kjo kërkohet vetëm për "Veprimet Wrangler". Shtoni CF_API_TOKEN në sekretet e depove tuaja GitHub. Ju mund të krijoni shenjën tuaj API nga https://dash.cloudflare.com/profile/api-tokens duke përdorur shabllonin Edit Cloudflare Workers.
  4. Më në fund, për të publikuar çdo ndryshim të ri në Cloudflare Worker, ekzekutoni wrangler publish

Dhe më në fund mbaruam!

Mendime mbyllëse

Së fundi, ka shumë më tepër që mund të kishim bërë, p.sh.:

  • Trajtimi i pyetjeve pa përgjigje nga ditët e mëparshme
  • Bërja e aplikacionit të konfigurueshëm/përshtatshëm për përdoruesit
  • Shtoni etiketa në detyrën tonë
  • Lejimi i përdoruesve për të krijuar një pyetje të rastësishme LeetCode si një detyrë e bazuar në etiketën e pyetjeve

Unë do t'i lë jashtë këto veçori për një ditë tjetër.

Ndërsa ka shumë urrejtje për kodimin e intervistave si të tilla, unë personalisht e shikoj në këtë mënyrë - duke mësuar disa lojëra truri, ndoshta paguheni shumë më tepër, kështu që pse jo? Është me të vërtetë një çështje perspektive. Nëse ju pëlqen t'i bëni ato, kjo është edhe më mirë.

Personalisht, nuk gjej aq shumë gëzim duke bërë pyetjet e LeetCode. Përkundrazi, unë punoj në problemet e LeetCode sikur po ngre pesha në palestër. Ndonëse nuk më pëlqen të ngre peshë, më pëlqen të korr përfitimet e saj.

Kjo është e gjitha për sot. Më tregoni se çfarë po ndërtoni me Cloudflare Worker!

Want to Connect With the Author?
This article was originally published at jerrynsh.com