Kategori Roliga timmen

Vi uppskattar avvikelser

I onsdags beskrev jag konfidensintervall. Det vill säga att vi hittar ett intervall där vi har uppnått en viss konfidens, alltså att vi har en metod som med angiven sannolikhet har det riktiga medelvärdet. I onsdags visste vi den riktiga standardavvikelsen, men vad gör vi när vi inte vet det?

Vi anväder t* istället för z. I princip så kommer vi få en normalfördelning när vi tar tillräckligt många stickprov. Men vi kommer få något större spridning, vilket vi kan förstå eftersom vi introducerar mer osäkerhet.

Detta blev jättekort! Men jag skriver detta när vädret äntligen blivit fint, så jag måste ut.

Vi ses igen!

Trevlig helg, allihopa!


Standardiserad fredag

Idag ska jag låta avsluta den ”normala veckan” med standardiserade värden. Vad är ett standardiserat värde? Vad är egentligen poängen med att standardisera värden? Hur standardiserar man värden? Detta kommer jag gå igenom idag.

Ett standardiserat värde är egentligen ett mått på hur långt ifrån ett medelvärde en datapunkt är. Som mått används standardavvikelsen. Det standardiserade värdet representeras av z. Och som jag skrev om förra gången så representeras standardavvikelsen av σ [lilla sigma]. I bilden nedan så har jag ritat in σ och ett standardiserat värde med 1,25.

Vad är då poängen med standardiserade värden? Vad jag vet i skrivande stund så finns det två poänger.

För det första så kan man jämföra olika standardiserade mått med varandra. Som jag har fått förklarat för mig så har man i USA två stora antagningsprov till högre studier: ACT och SAT. De har olika skalor men kan vara angelägna att jämföra mellan. Säg att Emily har fått 650 på SAT-provet, och Michael har fått 28 på ACT. Vem av dem har större anspråk på att komma in på samma kurs om man kan anta att ACT och SAT är likvärdiga test på kunskapsnivå. Genom att standardisera värdena så får jag fram att Emilys z-värde är 1 och Michael är 1,67. Michael har alltså högre poäng om man skulle jämföra dem. Vad det innebär är att en mindre andel av alla som skriver proven har fått så höga poäng som Michael jämfört med Emily. Men det innebär inte att Emily har dåliga poäng. Faktum är att hon har bättre poäng än 84% av alla som tar samma prov. Och då kommer vi till den andra poängen.

För det andra så kan man med hjälp av standardiserade värden av en normalfördelning få fram andelar av en population.

Det är svårt att använda ögonmått för att uppskatta andel av befolkningen som har lägre poäng än Emily. Men med hjälp av z-värde och en tabell över standardiserad normal sannolikhet så kan man få fram andelen. Om man skulle kontrollera hur stor andel av befolkningen som fått poäng som varit mindre än det standardiserade värdet av 0, så kan man se att det delar befolkningen i hälften.

Det om standardiserade värden!

Jag vill också nämna något om Bokarenan. Projektet har löpt på när jag inte orkat läsa kursboken och tid funnits över. Jag har inte gillat hur svårt det varit för mig att navigera mellan relevanta Controllers och views. Jag har heller inte gillat att jag låtit skapa så många views för varje liten entitet. Det kan finnas poänger för det när man vill underhålla vilka entiteter man har. Men jag tycker att det mest har tagit upp massa plats och inte haft någon rimlig logik till sig. Jag har därför tänkt ta bort dem som inte används, och när jag upptäcker att jag behöver dem så skapar jag dem efter mina behov.

Ytterligare så har jag förfinat layouten, men det har jag skrivit lite om tidigare. Men alla dessa åtgärder har inneburit att ganska mycket kod har flyttats runt. Jag tog en liten bild av hur många förändringar det inneburit i Git:

Och till sist vill jag avsluta med lite fredagskänsla: spel! Den gångna veckan har min dotter upptäckt glädjen med att skjuta upp raketer i Kerbal Space Program, och så har också jag. Jag kommer sitta och bygga små dynamitstycken och hoppas att mina små gröna gubbar kan landa säkert någonstans. Jag har lyckats få mina explosioner att smälla i ungefär rätt riktningar, men ännu så har jag inte lyckats flyga ett varv runt planeten. Vi får se vem som först lyckas; jag eller dottern.

Trevlig helg, allihopa!


Favoriter på framsidan

Så till slut kan jag säga att jag har uppnått veckans mål; att få fram en lista med rekommenderade recensioner och en lista på de böcker som fått bäst betyg. Resan hit tog en liten omväg. Hur lång? – Inte särskilt lång!

Respektive bok har inte ett betyg, men däremot har de recensioner som boken är associerad med ett betyg. För att kunna ta fram exempelvis de fem bästa böckerna behöver jag hämta alla böckers respektive recensioner, sedan ordna böckerna i fallande ordning utefter de genomsnittliga betygen. Därefter skulle jag kunna presentera resultatet för användarna. Detta tyckte jag verkade som ganska mycket jobb att göra varje gång någon laddar framsidan. Den lösning som jag tagit fram är istället att ordna en ny entitet: BookAnalysis. Denna entitet innehåller såväl genomsnittliga betyg för respektive bok som antal användare som har boken som ”att läsa”. Denna entitet kan innehålla fler fält, men vi börjar med detta. Idén är att bara administratörer kan komma åt kontrollen för BookAnalysis och därigenom aktivera en analys av databasens recensioner och böcker. På framsidan kan jag därför presentera de 5 bästa böckerna genom att hämta toppresultatet från BookAnalysis. Nackdelen är att användarna inte får det absolut senaste resultatet, men fördelen är att servern inte behöver genomföra beräkningar som bara kommer växa och bli större och tynga ner processorerna. Kanske är det så att beräkningarna inte skulle bli så tunga, men eftersom jag har en loop inom en loop så vill jag undvika risken.

Nu har jag fått ganska mycket på plats, men jag saknar någon sök-funktion. Detta skulle jag vilja få plats härnäst. Men! Frågan är om jag kommer ha någon tid över till det den närmaste tiden. Nästa vecka börjar jag en kurs om statistik och det kommer också synas på denna sidan. Och innan vi lämnar denna vecka så vill jag gå in på lite nöje!

Jag har under veckan haft nöjet att pröva ett spel som min sambo valt ut till mig: Shadow of the Tomb Raider. Spelet påminner mig i delar om Indiana Jones-filmerna och Rovdjuret. Man spelar som Lara Croft, en forskare/äventyrare, som är på jakt för att hämnas sin far. Men jakten uppdagar förebud om världens undergång. Och detta är något som Lara känner stor skuld till eftersom det mycket väl kan ha varit hennes hätska agerande som orsakat det. Så lika mycket som det handlar om hämnd handlar spelet om att försöka med alla medel att stoppa undergången. Jag har haft så himla kul och varit så imponerad av ett spel på länge. Det hänför mig med fantastiska miljöer och påhittiga banor. Jag sitter på spänn när jag hoppar mot en klippkant för att försöka klättra högre. Jag känner mig så grym när jag gömmer mig indränkt i lera mot en klippvägg och inväntar Laras fiender. På resans gång har Lara gått från att vara ett bytesdjur till att bli djungelns jaguar. Det spel jag kommer bita i härnäst är Hellblade: Senua’s Sacrifice. Jag har hört lite grann om spelet och jag är rädd för att det inte kommer ge mig samma tillfredsställelse som Tomb Raider men däremot en resa som kommer vara med mig länge. Vi får se.

Trevlig helg, allihopa!


Administratörsrättigheter

Den här veckan har varit full av diskussioner om rättigheter. Jag har upprättat ett auktoriseringssystem som kan särskilja användare utifrån vilka rättigheter de har. En vanlig användare ska inte kunna komma åt administratörsverktyg. En administratör ska inte kunna bevilja administratörsrättigheter. En super-administratör kan allt – nästan. Super-administratörens viktigaste uppgift är att bevilja eller ta bort administratörsrättigheter. De är i en hierarkisk ordning, vilket innebär att det inte finns något behov för en användare att ha flera olika rättigheter; det är en rättighet åt gången som gäller.

Något som blivit en utmaning för mig denna vecka är hur jag ska tillsätta rättigheter. Jag hade problem om jag direkt i databasen försökte tillsätta rättigheter, så jag försöker via applikationen istället. Men då behöver jag få till en sökfunktion för att ta fram rätt användare, och sedan en sida för att visa användaren och där i ändra rättigheter.

Jag har fått till sökfunktion och sidan för att visa användaren. Men jag har ännu inte fått till funktionen för att tillsätta rättigheter. Snart har jag fått min Sorteringshatt.

Så är det ju fredag igen! Jag tar på mig glittriga strumpor och sjunger Rebecka Blacks ”Friday”. Jag har spelat ut spelet Control, och jag gillade det! Jag gillade det jättemycket. Det hade en unik atmosfär och världsuppbyggnad. Jag läste varje papper som jag hittade i spelvärlden och för varje papper så blev jag mer trollbunden. Nu får vi se vad det blir härnäst. Jag lämnar tillbaka spelet på biblioteket och får se vad de har inne denna gång.


Fredagsform

Hur länge ska jag försöka få till formulär? Det kanske märks på mina blogginlägg att utvecklingen inte går snabbt, men det sker åtminstone små steg i rätt riktning varje dag. Det har att göra med konceptet att vara pappa till två bebisar. För när tid finns över till programmering så är frågan om jag är tillräckligt klar i huvudet för det. Men som sagt: det går framåt!

Jag har fått till ett formulär nu, som framgick av föregående inlägg. Den har rätt beståndsdelar, men är inte snygg och har ett blandat språk (på grund av anledningar). Detta kommer justeras längre fram. Det som är av största vikt när formuläret är på plats är att det nu ska finnas en kontroll som kan hantera formuläret och uppdatera databasen med formulär-datan.

Jag har använt mig av en hjälp-klass som jag kallar EntityBasket. Den har beskrivits i tidigare inlägg, men i stort så har den koll på hur formuläret är uppbyggt och kan hämta motsvarande entiteter ur den. Det innebär att en kontrollklass kan hämta en entitet och sedan skicka den till databasen. Det som min kontrollklass gör i detta sammanhang är att den hämtar samtliga relevanta entiteter från formuläret, skapar nödvändiga relationer dem emellan, och sedan sparar dem i databasen.

Det var inte lite förvånad jag blev när jag upptäckte att Doctrine (som är ramverket för databashantering i applikationen) var så lätt att använda som jag trodde. Doctrine gav mig entitets-id som jag kunde använda när jag ville skapa relationer mellan entiteterna, innan jag hade sparat dem mot databasen. Jag kunde ange för Doctrine vilka entiteter jag skulle spara och sedan sparades alla samtidigt när jag använda funktionen flush().

Så när jag nu fått till ”baksidan” av formuläret så tänkte jag härnäst få till att avgränsa funktioner att lägga till mot databasen. Endast användare som är inloggade ska få lägga till entiteter.

Och så går åter en vecka till helg. Den här veckan spelar jag annat än Elite Dangerous. Elite är ett spel som inte går att pausa när man spelar, vilket gör att man håller tummarna att inget händer när bebisar kallar. Och denna vecka har bebisar kallat mer än förr. Som omväxling till detta har jag tagit med dem till biblioteket och kollat på deras spelutbud. Jag fann spelet Control där. Spelet handlar om Jesse som lyckats hitta en hemlig myndighet; Federal Bureau of Control (FDC). Det som lett henne dit är försvinnandet av hennes bror. FDC var de som tog hennes bror ifrån henne när de var små, och hon har sökt efter dem sedan dess. Spelet är i tredje person, vilket utvecklarna Remedy är vana att göra spel i. Tidigare har de gjort Max Payne och Alan Wake, och denna gång är det som en mix av dem. Det är mycket action och mycket berättelse (särskilt i de rapporter som finns att hitta i spelvärlden). Jag gillar vad jag spelat hittills, och uppskattar att det går att pausa var som helst (även i filmsekvenser).

Glöm inte att det är kanelbullens dag denna fredag!

Trevlig helg, allihop!


…göra det svåra

Jag har på ett ganska enkelt sätt kunna använda Symfonys console maker för att skapa CRUD-funktionalitet genom webbläsaren. Respektive entitet har getts ett eget User Interface för att kunna interagera med det. Nu kan användare genom webbläsaren se vilka entiteter som finns av en viss typ, skapa nya eller uppdatera dem. Men för tillfället finns respektive entitet på sin egen sida, alltså inte på en enda gemensam sida. Det jag vill uppnå är vad jag redan har åstadkommit i min gamla version av Bokarenan. Se bilden nedan:

Som framgår av bilden så har respektive entitet samlats under en rubrik/knapp. Det som händer när man trycker på ”Lägg till” är att applikationen kommer söka efter respektive entitet i databasen och lägga till den om den inte redan finns.

Nu ska jag däremot samla Symfony-entiteter i ett formulär. Och som jag redan har uttryckt så tycker jag att de guider som Symfony har är toppen. Självklart finns det en guide som kan hjälpa mig här: How to embed forms och How to embed a collection of forms. På måndag ser jag fram emot att kunna presentera resultatet.

Och nu blir det helg. Jag fortsätter att utforska rymden i Elite Dangerous. För närvarande kör jag många frakt-uppdrag, och förhoppningsvis kan jag snart skaffa mig ett nytt skepp som jag kan anpassa för gruvverksamhet. Jag både gillar spelet och tycker det är tråkigt. Det är toppen att spela och lyssna på en podcast.

Trevlig helg!


Dokumentation som är bra

Jag anpassar för närvarande Bokarenan till att nyttja Symfonys olika komponenter. Det är åtminstone planen men det blir mycket läsande. Jag är ute på nya marker när jag nu utforskar ett framework utan en bok som grund. Men det gör ingenting! Jag tycker dokumentationen är utmärkt. Symfony har guider för att komma igång med grunderna, för att starta med Unit-tester och för att sätta upp ett inloggningssystem. Fler finns det, men detta är så många som jag har gjort just nu. För närvarande går jag igenom Security-guiden. Eller, jag höll på med det, tills den föreslog att jag skulle gå igenom guiden för att sätta upp en inloggningssida. Det blir lite som att hoppa ned i hål efter hål, och hoppas man kommer tillbaka någon gång.

Den här veckan har det gått långsamt att programmera. Det har kanske blivit att jag funnit en timme per dag att programmera eller läsa om programmering. Anledningen: bebisarna växer och behöver mer stimulans, och jag har känt ett ökat behov av att träna mer. Det blir därför fler promenader och ett antal timmar på gymmet under veckan. Men jag känner mig nöjd med programmeringen. Jag är i huvudsak pappa, och programmering är min hobby. Så länge som jag hittar någon tid att sitta ned och programmera så är jag nöjd.

Det jag kommer göra till nästa uppdatering här på bloggen är att sätta upp en enkel front-end och lägga till entiteter och kontroller för att hantera böcker.

Sen så är det ju självklart fredag igen, och med helgen så kommer mina enkla nöjestips. Jag är rätt så bevandrad nu, i och med alla barnvagnspromenader. Och sen en månad tillbaka så ser jag fram emot mina promenader, för då kan jag lyssna på podcasts. Och en av mina favoriter just nu är Linear Digressions. De består av en duo – en webbutvecklare och en datavetare som diskuterar olika tillämpningar av machine learning. Det jag älskar med denna podd är att jag som bara känner till ämnet hyfsat ytligt kan följa med. Och det är alltid trevligt att lyssna på denna duo som har sån bra dynamik sinsemellan.

Så slår jag också ännu en gång ett slag för Elite: Dangerous. Den gångna veckan har jag somnat ett par gånger framför det när jag försökt spela när bebisar varit lugna. Spelet kanske låter något tråkigt nu, men det är mest för att jag varit något utmattad vid slutet av dagen.

Trevlig helg, allihop!