Från labbet

Prototyp CLI

En gemensam ‘Prototyp command line interface (CLI)’ som kan användas för att kommunicera i Slack, rapportera arbetade timmar i Harvest samt estimera projekttid i Planning Poker.

Tech used

  • CLI
  • Charm
  • Go

Bakgrund och problem

Som utvecklare spenderar vi mycket tid inne på terminalen. Sanningen är att vi verkligen älskar att spendera tid i just terminalen! Därför ville vi utforska om det var möjligt att introducera fler av våra dagliga uppgifter i kommandoraden.

Det kanske låter lite kontraproduktivt, men vi känner själva av att produktiviteten sjunker när vi tvingas byta mellan olika grafiska gränssnitt flera gånger per dag. Som ett exempel: vi skriver med våra kollegor i Slack, rapporterar våra arbetade timmar i Harvest och estimerar projekt genom Planning Poker. Kanske hade dessa uppgifter kunnat skötas snabbare, bättre och enklare om allt kunde göras direkt i gränssnittet för kommandoraden (CLI).

Ide och lösning

Vi har skapat en gemensam ‘Prototyp command line interface (CLI)’ som kan användas för att kommunicera i Slack, rapportera arbetade timmar i Harvest samt estimera projekttid i Planning Poker.

Implementation och resultat

Vi hade sedan innan siktet ställt på Charm och dess samling med bibliotek, och såg det här som ett bra case att testa dem på. Charm-biblioteken är skrivna i programmeringsspråket Go och tillhandahåller de verktyg som behövs för att bygga en avancerad applikation för terminalen med ett användarvänligt gränssnitt.

Huvuddelen består av Bubble Tea-gränssnittet som, med inspiration från Elm-arkitekturen, tillät oss att skapa flera moduler. Vi kunde sedan kombinera de olika delarna vi ville använda och skapa en gemensam applikation: Prototyp CLI. Slutgiltligen använde vi oss av Lip Gloss-biblioteket för att addera lite snygg styling till de renderade strängarna och för att skapa en mer avancerad layout inne på terminalen.

Slack Module

Den första modulen vi skapade var Slack-modulen. Här använde vi oss av Slack API för att skapa ett mindre formulär som gör det möjligt för användare av vårt CLI att skicka meddelanden till valfri Slack-kanal. Autentiseringen möjliggörs av ett OAuth-flöde där användaren får tillgång till en personlig token som sedan kan användas genom Slack Go SDK för att kommunicera direkt med Slack-tjänsten.

Modul för tidrapportering

Vi använde oss av Harvest API för att få information om de olika projekten som en utvecklare är tilldelad. Därefter kunde vi skapa en applikation där varje utvecklare kan rapportera in arbetade timmar per projekt samt vilka uppgifter som genomförs med hjälp av några knapptryck.

Tidsuppskattning / Pointing Poker Module

En av de första modulerna vi diskuterade och som kändes som både en användbar och rolig utmaning var att skapa en slags Peer-to-peer version av kommandoraden för tidsuppskattningsverktyget Pointing Poker.

Vi hade aldrig tidigare arbetat på djupet med varken Go eller P2P-nätverk, och det visade sig vara en svårare uppgift än vad vi först trodde. Att synkronisera applikationstillståndet mellan ett antal användare, hanteringen av uppdateringar samt att skapa ett tävlingsförhållande var alla utmaningar som behövde lösas. Slutresultatet påminner något om en förenklad blockchain; en välkänd P2P-implementering.

Användare kan ansluta över TCP till varandra, gå med i sessioner och skicka tidsuppskattningar om aktuella uppgifter.

Insikter och reflektioner

Det var roligt att få testa GO och att använda oss av Charm-biblioteken. En viktig del av hela projektet var att ta hänsyn till användarupplevelsen när vi skapade en tjänst som styrs helt genom text.

Det var också intressant att få möjlighet att jobba med implementeringen av protokoll för ett P2P-nätverk, och att använda OAuth för autentisering i terminalen.