Vad jag vill göra med JavaScript

Denna fredag skriver jag om tänkta projekt där jag kan få användning av JavaScript. Men jag skriver också om att gå tillbaka lite i tiden och repetera HTML och CSS, samt risker med att bara söka på sådant som man just nu försöker göra.

I 10 dagar nu har jag övat med JavaScript utan att egentligen göra något som är direkt relevant för frontend-projekt. Istället har fokus legat på att lära mig syntax och problemlösning. Det kommer nu närmast en vecka då jag repeterar HTML och CSS innan jag återvänder till JavaScript. Under tiden underhåller jag tanken om vad jag kan göra med JS. Här kommer således lite tankar som jag har:

  • AJAX till Bokarenan
  • Statistik med visualisering och enkel linjär regression
  • Masken

AJAX till Bokarenan
Asynchronous JavaScript and XML (AJAX) är användbart om man vill uppdatera en webbsida utan att användaren behöver uppdatera hela sidan på nytt. Istället kan AJAX användas för att uppdatera enstaka element.
Bokarenan finns flera ställen där det kan användas. Det kan handla om att kontrollera om ett användarnamn är upptaget när man registrerar sig. Då behöver inte användaren trycka på Registrera bara för att få ett meddelande att namnet är upptaget och användaren måste välje ett annat.
Ytterligare kan Ajax användas som sökningsförslag, men jag får se hur jag skulle vilja implementera en sådan lösning.
En till idé är att lägga till en omdömesfunktion för recensioner. Då skulle användare kunna visa om de tycker att någon recension var hjälpsam eller rolig. AJAX skulle då kunna uppdatera databaseb i bakgrunden utan att behöva uppdatera webbsidan.

Statistik
Ni som följt min blog ett tag vet att jag haft en viss relation med statistik här. Jag har gått från enklare deskriptiv statistik (med prat om histogram och hypoteser) till prat om chi2-fördelning samt inslag av prediktiv statistik i form av linjär regression. Ett pågående projekt jag har är att dokumentera min vikt före löpturer med olika distans och jämför detta med vikt efter. Med JavaScript kan jag visa ett plottdiagram där viktskillnaden ställs mot distans som jag sprungit. En linjär regressionsanalys skulle nog vara möjlig att göra även det i JavaScript.

Masken
För att spel och programmering är kul! Varför inte göra ett enkelt spel med JavaScript?

Men innan jag fokuserar på något av dessa projekt kommer jag att repetera HTML och CSS utifall att jag missat något grundläggande. Jag har redan hittat saker jag undgått att lära mig tidigare. En sådan sak är CSS variabler. Jag trodde tidigare att detta bara var en sak som fanns i SASS (som har ett slags pseudo-CSS som kan kompileras till CSS). Ytterligare upplever jag att jag bygger på mitt CSS för Bokarenan till en allt mer svåröverskodlig kod och har behov att lära mig att strukturera det hela lite bättre. Så detta är något som jag har missat när jag bara har sökt efter enskilda saker jag vill göra.

Denna veckan har jag gett en snabb överblick på objektorienterad- och funktionell programmering samt en försmak på vad jag skulle vilja använda JavaScript till. Kommande vecka kommer jag fortsätta gå igenom HTML och CSS för att förhoppningsvis förenkla strukturen för Bokarenan samt göra den smidigare att använda på mobiler. Vi får se vad mer jag kommer att ha lärt mig. Trevlig helg, allihopa!


Statistik ”avklarad” och frågan om Oauth2

Det var onsdag den 30 oktober 2019 när jag började skriva något om statistik på den här bloggen. Det har blivit 20 inlägg i den kategorin och nu är jag klar med den kurs jag gått under senhösten/vintern. Jag har behandlat ämnen så som sannolikhet, standardavvikelser, standardiserade värden, normalfördelning, hypoteser, centrala gränsvärdessatsen, konfidensintervall, proportioner, chi2 och linjär regression. Jag har gått från deskriptiv statistik till prediktiv analys med en förklaringsvariabel. Emellanåt har det varit utmanande att finna tid till att skriva om statistiken och plugga, samtidigt som jag tagit hand om bebisar, tränat och programmerat. Men jag tycker att jag lärt mig mycket om statistik och jag har nu några idéer om hur jag skulle kunna tillämpa några av de kunskaper jag fått. Så här är några idéer:

  • Undersök korrelation mellan löptid och förlorad vätska. Min hypotes är att det finns ett positivt förhållande mellan hur länge jag springer och hur mycket vätska jag blir av med.
  • Undersök om jag har preferens för en särskild kategori böcker jämfört med andra. Jag behöver dock ett större läsunderlag klart innan jag kan påbörja detta. Jag tror att chi2-analys kan vara på sin plats då.
  • Sammanställ en beskrivning hur länge det tar att lägga upp en ny recension på Bokarenan innan en användare lägger upp en ny. Hur ser sambandet mellan detta och längden på den bok som recenseras.

Så även om jag är klar med statistikkursen så är jag inte klar med statistiken. Vi får se var det smyger sig in framöver. Men nu kommer jag flytta fokus tillbaka till programmering ett tag.

Förra måndagen skrev jag att jag skulle kolla på möjligheten att logga in med oauth (eller rättare sagt oauth2) till Bokarenan. Då skrev jag att jag eventuellt skulle titta på inloggning med Google-konto. Nu har jag kollat möjligheter och provat implementeringar och kan rapportera tillbaka.

Jag kom att prova med Facebook istället för Google och provade följande behjälpliga paket: knpuniversity/oauth2-client-bundle tillsammans med league/oauth2-facebook. Det jag fick göra var att skapa en controller för Facebook-inloggning och registrering samt en autentiserare för det också. Jag upplevde instruktionerna från knpuniversity/oauth2-client-bundle var enkla att följa och redigera för egna behov. Det krävdes att jag fick lägga till ytterligare autentiserare i min konfigurering (security.yaml) och att jag skrev vilken av dem som i första hand skulle användas:

        guard:
            authenticators:
                - App\Security\FacebookAuthenticator
                - App\Security\LoginFormAuthenticator
            entry_point: App\Security\LoginFormAuthenticator

Jag fick en till konfigureringsfil (knpu_oauth2_client.yaml) med instruktioner för autentisering:

knpu_oauth2_client:
    clients:
       
        facebook_main:

            type: facebook
            client_id: '%env(OAUTH_FACEBOOK_ID)%'
            client_secret: '%env(OAUTH_FACEBOOK_SECRET)%'

            redirect_route: connect_facebook_check
            redirect_params: {}
            graph_api_version: v2.12

Det denna konfigureringsfil innehåller är alltså vilken ”användare” och vilket ”lösenord” som ska användas gentemot Facebook för att få en ingång till oauth2 (så användare kan logga in med sina Facebook-användare). Informationen för det sparas i .env-filen. Sedan finns information om vilken funktion i controllern som kommer fånga upp inloggningen.

Det som jag tyckte var det svåraste var om en Facebook-användare behövde registreras som ny användare. Det jag gjorde då var att logga in användaren och sedan dirigera denna till avregistrering om denne inte vill gå med på användarvillkoren. Jag fick ta och registrera i sessionen (via autentiseraren) att användaren var ny och sedan kontrollera detta:

if ($this->session->get('fb-new')) {
    $targetUrl = $this->router->generate('connect_facebook_register');
    return new RedirectResponse($targetUrl);
}

Jag gillade slutresultatet. Det var jätteenkelt att logga in! Men jag har beslutat att för närvarande inte inkludera funktionen i produktion. Anledningen: jag är inte ett företag. Med det vill jag säga att det finns juridiska åtaganden att ta hänsyn till när det kommer till oauth2 och jag vill inte ta ansvar för Facebooks data om användare på min hobby-sida. Det kan vara så att jag överreagerar vad gäller detta och om så vore fallet så återinför jag funktionen.

Det som jag ska göra härnäst på Bokarenan är att införa en nyhetsblogg. Vi får se hur det går. Vi ses på onsdag!


Uppehåll över, nytt år är igång

Det har nu gått en hel månad sedan jag senast skrev ett inlägg. Då var datumet 20:e december 2019. Det är nu den 20:e januari 2020. I stort sett har jag under hösten skrivit tre inlägg i veckan och jag planerar att fortsätta så den närmaste tiden. Det uppehåll som jag hade var välbehövt. När det kommer till familj så är det något som kommer först. Över nyår och de första veckorna därefter så ägnade jag mycket tid till att hälsa på familj och släkt tillsammans med bebisar som fortsätter att utveckla sig. Till detta har kommit att slutföra den kurs jag har ägnat övrig tid åt: grundläggande statistik. Men ni läsare som har följt mina inlägg ett tag nu vet att jag antagligen lyckats hitta tid över till programmering trots allt detta. Ni har rätt!

Den gångna månaden har jag ägnat strötiden åt att göra en lättare data scaper. Den har till uppdrag att hitta bokinformation så att användare inte ska behöva fylla i femtioelva fält på egen hand. Istället ska användare kunna ägna sig åt att skriva om sin senaste läsning. Jag laddade upp denna funktion vid lunch idag. Så om du vill se om det funkar så kan du bli medlem idag på bokarenan.se/registrera.

Nästa steg i Bokarenan är några mindre justeringar i layouten och jag ska kolla på möjligheten att införa OAuth; eller möjligheten att logga in med ditt Google-konto. Uppdateringar om det kommer längre fram.

Denna vecka på Femte Arenan så kommer jag fortsätta i statistikens tecken. På onsdag kommer jag beskriva hur man kan analysera om det finns statistiskt signifikanta skillnader mellan röda slajmar och gröna slajmar vad avser deras preferens för att äta maskrosor. På fredag kommer jag försöka förutse hur mycket slajm en slajmklump kan producera baserat på hur mycket maskrosor den har ätit under dagen. Vi kommer alltså beröra chi2-analys och linjär regressionsanalys denna vecka. Det är ju toppen, och superintressant för en slajmproducent! Vi ses på onsdag!


Tredje advent, nu är Bokarenan uppe

Måndag och en vecka närmare jul. Vi är i Tredje Advent och snart blir det ett uppehåll över jul och nyår när jag fokuserar på att umgås med familj. Lite nyheter jag har att komma med är att mitt projekt för Bokarenan har kommit till basversionen, eller vad man skulle kunna kalla för Minimal Viable Product. Spana in bokarenan.se och dela med dig av dina läsupplevelser. För närvarande behöver medlemmar lägga till grundinformation för böcker de recenserar, men jag har börjat lära mig lite Python för att kunna stötta upp med detta. Tanken är att skapa en Web Crawler som kan samla in information om böcker, och på så sätt underlätta för medlemmar i deras ifyllande. Jag är mycket nöjd över att ha kommit så här långt.

Men denna vecka går annars åter i statistikens tecken. Denna vecka kommer jag skriva om att bedöma statistiskt underlag när man bara har med en variabel att göra. Exempelvis hur många anser att Slajm är en produkt de skulle vilja köpa? Där jag tidigare har skrivit om medelvärden handlar det här om att göra bedömning utifrån fördelningar. Mer om detta på onsdag. Vi ses då!


En normal vecka

Efter förra veckan så är jag nu klar med första delen av statistikkursen. Det innebär att jag denna veckan går från enklare diagram till att beskriva täthetskurvor och normalfördelning.

Täthetskurvor (eller density curves på engelska) är en idealiserad bild av en fördelning. Tänk er ett histogram och om man tar och ritar en kurva ungefär där varje stapel slutar. Det ger en fin kurva som enkelt beskriver formen på fördelningen. Det man får på köpet är färre detaljer; små skillnader kan bortses och även outliers kan hamna utanför. Med täthetskurvan kan man också uppskatta medianen, och till viss del även medelvärdet. Här nedan kommer ett första exempel:

I denna första fördelning så är den symmetrisk. Vi får då både median och medelvärde i mitten av kurvan. Om man betraktar ytan under kurvan så är arean lika stor till vänster som höger om medianen. Om fördelningen är asymmetrisk så får vi inte medianen och medelvärdet vid samma punkt. I bilden nedan är fördelningen högerskev:

Eftersom fördelningen har extrema värden åt höger så får vi ett medelvärde som är högre än medianen. Fortfarande gäller dock att medianen delar ytan under kurvan i två lika stora areor. Medelvärdet kan ses som den punkt som hela ytan, om det vore ett fast objekt, skulle balansera på.

När en fördelning är som i första exemplet – symmetriskt och formad som en klocka – då har det ett särskilt namn: normalfördelning. Vad det som är så speciellt med det återkommer jag till på onsdag.

Nu får vi se fram emot en normal vecka!


Nu drar det igång med statistik

Tidigare inlägg har varnat om det och nu är det dags; här är mitt första inlägg om statistik. Så jag påbörjar en grundläggande kurs i statistik denna vecka. Jag går den med syfte att uppdatera mig om metodiken för att kunna tillämpa det inom mina intresseområden. Jag har gått tidigare kurs i ”kvantitativa metoder”, men det var 2010. Mycket av den kunskapen finns kvar någonstans och jag behöver hjälp att ta fram det. Jag hoppas trots det att jag lär mig lite nytt. Jag hoppas kunna göra regressionsanalyser och presentera resultat på ett spårbart och enkelt sätt. Kanske finns det möjligheter att göra kopplingar till Bokarenan i framtagning av exempelvis läsrekommendationer. Svårigheten att göra det på Bokarenan kan ju ses i det dataunderlag som finns. För närvarande har applikationen endast EN användare.

Denna veckan kommer jag läsa igenom lite grundläggande begrepp inom statistik. Det handlar om medelvärde, median, standardavvikelse, kvartiler, med mera.

Image of a dice.

Vad är sannolikheten att jag ska få en femma när jag kastar en tärning? Svaret har att göra med sannolikhet. Sannolikheten för att få ett värde av sex möjliga är alltså: 1/6.

Vad är sannolikheten att jag ska få en femma om båda gångerna om jag kastar en tärning två gånger? Jo, det är:

Alltså är sannolikheten för två femmor på raden lika med 1/36, vilket är knappt 3%.

För att beräkna sannolikheten för på varandra oberoende händelser så kan man använda det som kallas sannolikhetslärans multiplikationssats. Det var detta som jag precis gjorde.

Till nästa gång kommer jag att ha börjat tugga på Practice of statistics for business and economics av Alwan Layth. Det är en nästan 1000 sidor tjock bok och utgör kursens enda litteratur. Det ser jag fram emot. Den har många bilder!