lördag 6 januari 2024

Att tänka utan bilder

Afantasi - att inte kunna visualisera bilder

Ett snabbt visualiseringsexperiment:

Tänk dig att du håller en boll i ena handen. Du släpper sedan bollen på ett bord. Bollen rullar ner från bordet.

  • Hur såg bollen ut, vilka färger hade den och vilken storlek?
  • Hur betedde sig bollen när du släppte den?
  • Hur såg bordet ut? Vilka färger hade det och vilka material var det gjort av?
Om du lätt kan svara på frågorna ovan så tänker du förmodligen i bilder. Du kanske till och med såg hela sekvensen som en liten film uppspelad i huvudet? Det gör inte jag, det är bara svart. När jag pratar med andra om det här så är det ganska skilda reaktioner, flera känner igen sig, andra förstår inte hur det är möjligt att tänka alls om man inte tänker i bilder. 

Afantasi är namnet på tillståndet då man inte kan visualisera bilder. Tillståndet fick sitt namn så sent som 2015 och trots att det upptäcktes redan 1880 så är det är inte mycket forskning som gjorts inom området, vilket jag tycker är förvånansvärt med tanke på hur mycket det har filosoferats om allt möjligt genom tiderna.

Det här inlägget har jag tänkt använda som en sida som jag snabbt kan ta fram om jag även framöver hamnar i samtal inom ämnet (rätt hög sannolikhet eftersom jag hittills tagit upp det lite då och då) och behöver en enkel illustration över "hur man ens kan tänka om man inte tänker i bilder".

Ett spektrum mellan afantasi och hyperfantasi

Det verkar som att det finns ett spektrum av graden av visuellt tänkande, där den ena extremen är afantasi och den andra hyperfantasi. De som har väldigt starkt visuellt tänkande, hyperfantasi, kan ibland till och med ha svårt att avgöra vad som egentligen har hänt och vad som fantiserats.

Jag vill börja med en bild som jag tycker beskriver det här dåligt, men som jag tycker liknar exempelbilder jag ofta sett när jag läst om afantasi. Bilden nedan är från Tom Ebeyers sida där han visar sin tweet där han ställer frågan: Stäng ögonen och tänk på en häst. Vilken av bilderna nedan stämmer bäst överens med din upplevelse?


Anledningen till att jag tycker exemplet är dåligt är för att jag tycker det snarare beskriver olika grad av ett synfel eller en ögonsjukdom än lägen på ett visualiseringsförmågespektrum. Men eftersom bild nummer ett stämmer bäst överens med min upplevelse så kanske jag är fel person att avgöra det.

Den här bilden tänker jag mig stämmer bättre överens med graderna av visualiseringsförmåga. Ju närmare afantasi-delen av spektrumet, desto längre till vänster där färre detaljer finns men de viktigaste delarna är med. Trots att jag inte kan visualisera en häst så vet jag av erfarenhet att den har fyra ben, hovar, man, öron och en svans mestadels av hår, så det kan jag få till om jag ritar en häst ur minnet. Däremot har jag noll chans att få till detaljer som muskler, leder och skuggningar. När jag gjorde boll-visualiseringsexemplet i början med en kompis så "såg" han till och med var ljuskällorna var och hur skuggspelet över boll och bord blev.


Forskningsresultat - Hur ser en bild ut i minnet?

I klippet "Quantifying Aphantasia through Drawing" så presenteras forskning där man låtit personer se bilder som de sedan skulle avbilda.

Försökspersonerna fick, utan att veta vad som skulle hända sedan, se vardera bild nedan i 10 sekunder. (Själv har jag svårt att ens skapa mig en tydlig uppfattning om vad bilderna egentligen föreställer, men jag förutsätter att försökspersonerna fick se bilderna i bättre kvalité än den de har i presentationen där jag har tagit dem ifrån.)

Ett sovrum 


Ett kök

Ett vardagsrum


Sedan fick det göra nåt annat i 11 minuter och efter det skulle de med hjälp av ett Microsoft Paint-liknande verktyg i webbläsaren rita vad de kom ihåg från bilderna. Du kanske upplever alla följande bilder som skrattretande, men försök själv att rita på frihand i Paint 😅

Bilderna nedan är exempel på ritningar gjorda av personer med afantasi. Några kännetecken för dessa är att det är få objekt med (de mest framträdande), få detaljer, sällan med färg och ofta med text.


För att kontrollera att det inte är skickligheten i att rita som avgör hur en person ritar av nåt från minnet så fick personerna med afantasi även rita av bilderna när de hade dem att se på. Nedan är exempel på det. Det blev ett helt annat utseendet på bilderna, nu kom mer detaljer med och färg användes i större utsträckning.



Nedan är exempel på bilder avritade från minnet av kontrollgruppen. Fler objekt och detaljer är med. Färg används oftare.


Även kontrollgruppen ritade av bilderna när de hade dem tillgängliga att se på under tiden. Nedan är resultatet från det. 


Några slutsatser som drogs i studien:
  • Resultatet mellan grupperna var likvärdiga när de ritade av bilden med bilden tillgänglig, men de med afantasi kom ihåg färre saker än kontrollgruppen när de ritade från minnet.
  • Afantasi-minnen innehåller färre detaljer och mindre färg.
  • Trots att afantasi-minnen har färre detaljer, så är den spatiala informationen (var sakerna har placerats i ritningen) helt intakt. Det här tyder på skilda system för att minnas själva objekten och var de befinner sig.
  • Afantasi-minnen är förmodligen mer semantiskt baserade, det vill säga att bilderna ersätts med ord. Några citat från personer i afantasi-gruppen:

    "Because I don't have any images in my head, when I was trying to remember the photos, I have to store the pieces as words."

    "I had to remember a list of objects rather than the picture."

    "When I saw the images, I described them to myself and drew from that description, so I... could only hold 7-9 details in memory."


    Och till sist ett från en person i kontrollgruppen:

    "I can see the picture in my mind, but I am terrible at drawing."

  • Afantasi-minnen är kanske mer korrekta.
    Kontrollgruppen ritade oftare saker som inte varit med i originalbilden. 14 av 152 ritade bilder hade de felen i kontrollgruppen, jämfört med 3 av 176 bilder för afantasigruppen. Felen som afantasigruppen gjorde var att de tagit med ett objekt från en bild in till en annan, medan kontrollgruppen hade lagt till helt nya saker.

Bilden nedan är ett exempel på hur de olika grupperna placerat objekt i sina ritningar de gjorde från minnet. Det skiljer sig nästan inget alls.

Heldragen linje - afantasigruppen
Steckad linje - kontrollgruppen


Här är exempel på saker som lagts till i bilderna som ritats från minnet. Afantasigruppen blandade ihop saker mellan bilder, medan kontrollgruppen lade till helt nya saker.



Drömmar, igenkänning och röster i huvudet

Drömmar

Fast jag inte tänker i bilder så har jag på sistone lagt märke till och tänkt på att mina sömndrömmar är lite som en spelfilm i färg och kan kännas väldigt detaljrika och realistiska. Men så fort jag vaknar så är det som att nån stänger av TV:n och det blir svart. Jag vet flera personer med bildtänkande som det inte blir så för, och som kan fortsätta lite på sina drömmar i vaket tillstånd. 

Det här tycker jag själv är väldigt konstigt, att förmågan att tänka i bilder verkar finnas där, men inte kan användas i medvetet tillstånd.

Hur känner du igen din familj?

En vanlig fråga som kommer upp när jag pratar med andra om det här är om jag kan se ansiktet på nån i familjen framför mig. Nej, det kan jag inte. "Men hur kan du då känna igen nån?" Det är en bra fråga, men jag upplever inte några problem med det. Dock har jag en tendens att ibland tycka mig känna igen personer som jag inte känner så bra, till exempel på stan, men om jag då har nån med mig och jag säger "Var inte det där NN?" till denne så kan den säga att jag såg fel. En slags mycket mild form av ansiktblindhet, eller kanske snarare en slags ansiktsgeneralisering.

Hittade just en studie om precis det "The role of visual imagery in face recognition and the construction of facial composites. Evidence from Aphantasia" som jag bara skummat lite grann. Här är en del av sammanfattningen.
People with aphantasia have a markedly impaired ability to form visual images in the mind's eye. Here, by testing people with and without aphantasia, we examine the relationship between visual imagery and face processing. We show that aphantasics have weaker face recognition than people with visual imagery, using both self-report (Prosopagnosia Index) and behavioural measures (Cambridge Face Memory Test). However, aphantasics nonetheless have a fully intact ability to construct facial composites from memory (i.e., composites produced using EFIT6 by aphantasics and imagers were rated as equally accurate in terms of their resemblance to a target face). Additionally, we show that aphantasics were less able than imagers to see the resemblance between composites and a target face, suggestive of potential issues with face matching (perception).
Texten är inte helt lätt att ta till sig, men hur som helst så verkar det vara olika saker att inte kunna frambringa en minnesbild och att känna igen nåt eller nån man sett förut.

Röster i huvudet

En lite liknande sak är hur man upplever tankar om talat språk. Om du tänker dig att en bekant säger nåt, hör du då dennes röst i tanken? Eller är det mer bara ord utan ljud? Eller när du läser en bok, har du olika röster på olika personer när de talar i boken? Har du kanske en intern uppläsare av boken?

Positions- eller känselminne?

Jag upplever att jag trots avsaknaden av minnesbilder har bra minne av var jag lagt saker eller om jag slog av spisen eller inte. Men det minnet bygger inte på bilder utan mer på känslan av hur det är att vara på en specifik plats, eller känslan av att utföra en rörelse, ett mer kanske taktilt minne som hur en knapp beter sig när man trycker på den, möjligen även i kombination med ett ljud som hänger ihop med rörelsen, till exempel om knappen låter.

Hur stor andel har afantasi?

Enligt en artikel i Modern psykologi Afantasi – ett sinne utan bilder så har en till tre procent afantasi. Men forskaren själv (Adam Zeman) säger att det är osäker siffra eftersom så lite forskning gjorts. Min upplevelse när jag pratat med andra om det här är att det verkar vara bra mycket vanligare än så.

År 2003 tog Adam Zeman emot en patient som genomgått en hjärtoperation och i samband med det "tappat sin fantasi". Adams undersökningar av patienten uppmärksammades i en tidningsartikel och efter det strömmade det in vittnesmål om afantasi in och Adam har fortsatt forskat inom området.

Här är ett "test", VVIQ, som du kan göra själv Vividness of Visual Imagery Questionnaire. I testet så beskrivs ett scenario, sen ställs det frågor hur pass tydlig inre bild man har av olika delar av scenariot med svarsalternativen:
  1. No image at all, I only “know” I am thinking of the object
  2. Dim and vague image
  3. Moderately realistic and vivid
  4. Realistic and reasonably vivid
  5. Perfectly realistic, as vivid as real seeing

Avslut

Om du inte hade nån koll alls på afantasi innan så har du förhoppningsvis fått en liten inblick nu. Som sagt så finns det inte så mycket forskning än, men när jag skrev det här så skulle jag försöka hitta tillbaka till klippet Quantifying Aphantasia through Drawing som jag sett flera månader innan jag började med det här inlägget och då upptäckte jag att det åtminstone finns väldigt mycket skrivet och inspelat angående afantasi nu, vilket kan vara intressant även om det inte är forskningsmaterial. Ska försöka titta och läsa lite mer och spara intressanta länkar här.

Länkar

Blind Mind's Eye - The Science of Aphantasia with Dr. Adam Zeman YouTube
En 40 minuters dragning av Adam Zeman där även patienten "MX" är med och beskriver hur hans upplevelser var efter hjärtoperationen då han fick afantasi.

Facebook-inlägg av Blake Ross, systemutvecklare och medgrundare av Mozilla Firefox Foundation.
En beskrivning av Blakes upplevelse när han läste i tidningen om patienten "MX" och då förstod att han själv hade afantasi.

Quantifying Aphantasia through Drawing YouTube
En studie som undersöker om man kan använda teckningar som ett fönster in till en persons minnesbilder.

I Have APHANTASIA (you might have it too - please check!!) YouTube
Paret Dana och Stefan pratar om Afantasi. Han har afantasi och hon är mer åt hyperfantasi-hållet. Hon berättar att hennes interna bilder kan ha rörelse och att hon kan vrida på objekt. Hon kan också återkalla smaker, ljud och känslor.

Kort om Hannas upptäckt av afantasi (förmodligen genom texten av Blake Ross).

Wikipedia på svenska och engelska

lördag 16 december 2023

A homage to my unicycle instructor on the other side of the world!

Hooray for content creators!

As a person that had my childhood before internet was a thing, it sometimes hits me how amazed I am over how I've been able to learn to ride and do a few tricks on a unicycle, thanks to a person that I've never met and who lives on the other side of the world!

I just love it when you can learn stuff because people have been sharing their know-how on the net, and even more so when the content is of high quality and well structured. Just like Chris Huriwai's UniQuest-series on his YouTube channel PrettyGoodChannel. And it's free! With the possibility to support through patreon.

Image from the intro sequence to Uniquest videos.

So, what makes me think that Chris' content stand out from the rest of the "learn to unicycle" stuff you find when searching YouTube? Well, one thing that trigger my lust for learning is that he arranged his videos in a leveling tree. That way you always have tricks to learn that should be pretty much in reach to nail.


The leveling tree


Leveling tree
 

Beginner


Level 1: Assisted mount, Assisted ride 3+ revs, Assisted idle 3+ revs, Unassisted ride 1+ revs
Level 2: Unassisted ride 4+ revs, Assisted bunny hop, Unassisted idle 1+ revs, Free mount 2+ revs
Level 3: Unassisted ride 8+ revs with dismount, Ride down curb, Assisted backwards 2+ revs, 180 turn
Level 4: Ride in a circle, Rolling bunny hop, Riding one footer, Jump mount

Street


Level 1: 90-90 twist, Rolling hop down curb, Drop mount
Level 2: Halfrev, Hop up a curb, Roll-flip mount
Level 3: Hop down 2 stair, 180 twist, Crankgrab
Level 4: Fakie 180 twist, No footer footplant, Crankgrab 180 out
Level 5: 180 down curb, Outspin footplant, Running jump mount, Pop-plant

General


Level 1: Idle 2+ revs, Switch freemount, Standing ride 3+ revs, Backwards ride 2+ revs, Ride in a figure 8
Level 2: One foot ride 2+ revs, Ride down 2 stair, Backwards 4+ revs, Stillstand 3+ seconds
Level 3: Blind idle, 360 wall push, Ride down 4 stair, Assisted wheelwalk, Kick-up mount
Level 4: Idle to one-foot ride, Can-can, Stomach ride, Suicide mount, Footjam
Level 5: Wheelwalk, Feet back to pedals one-foot ride, Seat in front backwards, Blind one foot ride, Seatdrop one foot pick up mount, Bay hop

Flatland


Level 1: 10+ static hops, Leg wrap mount, Seat in fron ride 3+ revs
Level 2: Seat in front bunny hops, No footer, 180 unispin mount
Level 3: Leg extension, Seatdrop, Seatbounce
Level 4: 90 unispin / hop on tire, Tiregrab superman, Body varial mount
Level 5: 180 unispin, Seatdrop-legwrap, Half roll

The videos

Beginner 

Chris' instructions for level 1, level 2, level 3, level 4.

Me


There hasn't been any accidents to talk about, but sure, sometimes things don't go according to plan. Mishap when practicing "Ride in a circle"

General

Chris' instructions for level 1level 2level 3level 4, level 5level 6.

Me level 1 (2021-05-01)

Street

Chris' instructions for level 1level 2level 3level 4, level 5.

Me level 1 (2021-09-05)


Rolling hop down curb

Flatland 

Chris' instructions for level 1level 2level 3level 4level 5.

Me level 1 (2021-09-23)


"Seat in front riding" with the seat a bit too far in front


Current state

As you can see from the dates after the links to my recordings of myself I learned the basics during 2020 and cleared five levels during 2021. When writing this it's a few weeks left of year 2023 and I haven't published any unicycling videos since 2021. Did I quit? No, but I've been focusing on General level 2 where one foot riding has shown to be hard for me to learn. So far I've learned one foot idle (a trick that Chris became aware of later on that he forgot to add on the right level 😘) which seems to be a good stepping stone to one foot riding!


When you start digging...

Another thing that fascinates me is that every time I've started a new hobby and I begun to learn a few things about the subject it always unfold countless variations and it seems you can devote your whole life to it but still not learn it all. As a simple example, did you know that a person has tried to ride a unicycle around the world? Or that you can do downhill unicycling?


Once I had a Harmonica teacher in USA

During the years from 2011 to 2017 I learned to play blues harmonica from David Barrett at bluesharmonica.com. He also has a leveling system, named "Levels of Achievement™ Program" where you get (to buy) a pin for each level you clear. His content is not free though, but there is a lot of it, it is well arranged and he listens to your recordings of the lessons you've taken and gives you feedback.

I cleared level 6 before quitting

Looking through my mail history it seems trying to clear level 7 gave me at bit of a sweat and it finally made me give up the program.

The levels in "The level of achievement program"


During the course you learn to create your own songs, here's one I composed, following a few rules of what it should include.

My own blues song on Soundcloud

When you play blues harmonica one single harmonica won't do 😛 Bluesharmonica.com has videos that also covers how you do harmonica maintenance and enhancements. Yes, there are tools built specifically for harmonica needs.


A harmonica for each key and then some.

So, what about you?

What is your favorite sources on the net for learning something? If you have any, I'd love if you write a comment about it! 😃😍

söndag 27 augusti 2023

Känner du till begreppet "Intellektuell ödmjukhet" och sätten du kan vara biased på?

Läste tidningen "Modern psykologi" genom Readly

Under semestern när jag var på Facebook så fick jag återkommande reklam för Readly, en prenumerationstjänst för olika typer av tidningar (7000+ magasin och dagstidningar skriver de på hemsidan). Till slut tänkte jag att det var värt att testa en gratismånad för att se vad det är. Har inte gjort nån riktig utvärdering av vad jag tycker än, men skulle jag redan vara prenumerant på nån av tidningarna så verkar utbudet man får för 119:- månaden som ett kap! Serietidningarna var dock svårlästa på mobilen, det blir för smått...

Hur som helst, i tidningen "Modern psykologi" (det kombinerade sommarnumret 4 och 5, 2023) så hade de en artikel av Sara Hammarkrantz om "Intellektuell ödmjukhet", vilket var ett nytt begrepp för mig, som jag tyckte var intressant. Hon skriver bland annat:

Att vara intellektuellt ödmjuk handlar om att vara öppen för nya perspektiv, idéer och information från andra - och att vara villig att ompröva sina egna åsikter och tankar.

Mark Learys, forskare och professor i psykologi och neurovetenskap vid Duke University definierar det som:

I vilken utsträckning människor kan erkänna att deras övertygelser kan vara fel.

Vad kan hända då, om den intellektuella ödmjukheten hos befolkningen är låg? Fredrik Livheim, psykolog och forskare i klinisk neurovetenskap säger:

Vi behöver växla upp vår förmåga globalt att hantera komplexitet och många perspektiv. Annars kommer fler och fler att ta till coping-strategier i form av förenklade världsbilder, svart-vitt tänkande och polarisering. Vi kommer se mer av Trumpism, konflikter och att folk söker sig till starka-ledare-med-enkla-sanningar.

Bias

Artikeln nämner att en sak som ställer till det för oss när vi tänker är olika typer av bias, bland annat nämner de Overconfidence bias (the tendency to overestimate our knowledge and abilities in a certain area). I samband med det tar de upp ett exempel om en studie som gjordes på larmcentralen 112 där man tagit hjälp av AI för att hitta orsaken till varför operatörerna och de inringande ibland missade att den drabbade personen fått hjärtstillestånd. När en larmfunktion utifrån detta skapades och installerades så ignorerade personalen ändå varningarna från larmet eftersom de tyckte att de själva var bättre på att avgöra den drabbades tillstånd. Tyvärr gavs ingen referens till studien och jag har inte lyckats hitta någon information om den annat än innan den genomfördes "Snart införs AI-stöd för medicinska vårdbedömningar på 112".  

Det här fick mig att tänka på en lista med 50😱olika typer av bias som jag sett swisha förbi i mitt flöde förut. Ett sätt att bli mindre biased är att lära sig om olika bias och reflektera över om man fallit i någon av tankefällorna. 50 stycken känns som många att hålla reda på, men jag tänkte att det här inlägget ska hjälpa mig att sätta mig in i några i taget.

På sidan titlemax.com kan du hitta nedanstående lista i text, men de har också en bildversion av samma lista där varje bias har ett förtydligande exempel, vilket jag tycker gör rätt mycket för förståelsen.

Två exempel på bilder av bias med förtydligande exempel 

50 Types of Common Cognitive Biases

  1. Fundamental Attribution Error: We judge others on their personality or fundamental character, but we judge ourselves on the situation.
  2. Self-Serving Bias: Our failures are situational, but our successes are our responsibility.
  3. In-Group Favoritism: We favor people who are in our in-group as opposed to an out-group.
  4. Bandwagon Effect: Ideas, fads, and beliefs grow as more people adopt them.
  5. Groupthink: Due to a desire for conformity and harmony in the group, we make irrational decisions, often to minimize conflict.
  6. Halo Effect: If you see a person as having a positive trait, that positive impression will spill over into their other traits. (This also works for negative traits.)
  7. Moral Luck: Better moral standing happens due to a positive outcome; worse moral standing happens due to a negative outcome.
  8. False Consensus: We believe more people agree with us than is actually the case.
  9. Curse of Knowledge: Once we know something, we assume everyone else knows it, too.
  10. Spotlight Effect: We overestimate how much people are paying attention to our behavior and appearance.
  11. Availability Heuristic: We rely on immediate examples that come to mind while making judgments.
  12. Defensive Attribution: As a witness who secretly fears being vulnerable to a serious mishap, we will blame the victim less if we relate to the victim.
  13. Just-World Hypothesis: We tend to believe the world is just; therefore, we assume acts of injustice are deserved.
  14. Naïve Realism: We believe that we observe objective reality and that other people are irrational, uninformed, or biased.
  15. Naïve Cynicism: We believe that we observe objective reality and that other people have a higher egocentric bias than they actually do in their intentions/actions.
  16. Forer Effect (aka Barnum Effect): We easily attribute our personalities to vague statements, even if they can apply to a wide range of people.
  17. Dunning-Kruger Effect: The less you know, the more confident you are. The more you know, the less confident you are.
  18. Anchoring: We rely heavily on the first piece of information introduced when making decisions.
  19. Automation Bias: We rely on automated systems, sometimes trusting too much in the automated correction of actually correct decisions.
  20. Google Effect (aka Digital Amnesia): We tend to forget information that’s easily looked up in search engines.
  21. Reactance: We do the opposite of what we’re told, especially when we perceive threats to personal freedoms.
  22. Confirmation Bias: We tend to find and remember information that confirms our perceptions.
  23. Backfire Effect: Disproving evidence sometimes has the unwarranted effect of confirming our beliefs.
  24. Third-Person Effect: We believe that others are more affected by mass media consumption than we ourselves are.
  25. Belief Bias: We judge an argument’s strength not by how strongly it supports the conclusion but how plausible the conclusion is in our own minds.
  26. Availability Cascade: Tied to our need for social acceptance, collective beliefs gain more plausibility through public repetition.
  27. Declinism: We tent to romanticize the past and view the future negatively, believing that societies/institutions are by and large in decline.
  28. Status Quo Bias: We tend to prefer things to stay the same; changes from the baseline are considered to be a loss.
  29. Sunk Cost Fallacy (aka Escalation of Commitment): We invest more in things that have cost us something rather than altering our investments, even if we face negative outcomes.
  30. Gambler’s Fallacy: We think future possibilities are affected by past events.
  31. Zero-Risk Bias: We prefer to reduce small risks to zero, even if we can reduce more risk overall with another option.
  32. Framing Effect: We often draw different conclusions from the same information depending on how it’s presented.
  33. Stereotyping: We adopt generalized beliefs that members of a group will have certain characteristics, despite not having information about the individual.
  34. Outgroup Homogeneity Bias: We perceive out-group members as homogeneous and our own in-groups as more diverse.
  35. Authority Bias: We trust and are more often influenced by the opinions of authority figures.
  36. Placebo Effect: If we believe a treatment will work, it often will have a small physiological effect.
  37. Survivorship Bias: We tend to focus on those things that survived a process and overlook ones that failed.
  38. Tachypsychia: Our perceptions of time shift depending on trauma, drug use, and physical exertion.
  39. Law of Triviality (aka “Bike-Shedding”): We give disproportionate weight to trivial issues, often while avoiding more complex issues.
  40. Zeigarnik Effect: We remember incomplete tasks more than completed ones.
  41. IKEA Effect: We place higher value on things we partially created ourselves.
  42. Ben Franklin Effect: We like doing favors; we are more likely to do another favor for someone if we’ve already done a favor for them than if we had received a favor from that person.
  43. Bystander Effect: The more other people are around, the less likely we are to help a victim.
  44. Suggestibility: We, especially children, sometimes mistake ideas suggested by a questioner for memories.
  45. False Memory: We mistake imagination for real memories.
  46. Cryptomnesia: We mistake real memories for imagination.
  47. Clustering Illusion: We find patterns and “clusters” in random data.
  48. Pessimism Bias: We sometimes overestimate the likelihood of bad outcomes.
  49. Optimism Bias: We sometimes are over-optimistic about good outcomes.
  50. Blind Spot Bias: We don’t think we have bias, and we see it others more than ourselves.

Så nu har du också material för att passa på att lära dig om bias och öka din intellektuella ödmjukhet en aning 😃

söndag 20 augusti 2023

Windows 11 update hijacks the Print Screen button (from Lightshot)

If you install the Windows 11 update KB5025310 your print screen button will be assigned to the Snipping Tool in Windows. I have the screen capturing tool Lightshot installed and listening to the print screen button, but now Windows 11 hijacked it. Here's how you stop Windows Snipping Tool to listen to the print screen button.

Open "Accessibility keyboard settings"


Set "Use the Print screen key to open Snipping Tool" to "Off"




Done!

One thing I like about Lightshot compared to the Snipping Tool is that after you've selected the area to copy it is possible to resize and move that area, which is really handy if you're doing precision work. It also lets you add text, lines, arrows, boxes and freehand drawings on the copy.

onsdag 9 augusti 2023

Do you know the difference between a Fake, a Spy, a Stub, a Dummy and a Mock when writing unit tests?

Published at last

Below is a post draft that I wrote in the summer of 2017 but for reasons I don't remember it has stayed as a draft since then. 

Now, in the summer of 2023 I'll just add Martin Fowler's summary of the test doubles in the book "xUnit Test Patterns" copied from https://martinfowler.com/bliki/TestDouble.html (which I think is a great summary) and publish it.

  • Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.
  • Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an InMemoryTestDatabase is a good example).
  • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test.
  • Spies are stubs that also record some information based on how they were called. One form of this might be an email service that records how many messages it was sent.
  • Mocks are pre-programmed with expectations which form a specification of the calls they are expected to receive. They can throw an exception if they receive a call they don't expect and are checked during verification to ensure they got all the calls they were expecting.

The old draft

Do you know the differences between Fake, Stub and Mock when writing unit tests? I thought I did, and was about to write some kind of guide to use at work, but thought I'd do a little bit of research first to be sure to get the details correct. After reading on different pages I became more and more confused, until I found this page http://xunitpatterns.com/Test%20Double.html, that I think describes the types and their differences in a clear way that probably can be useful for us.

The page is on a webified version of the book xUnit Test Patterns: Refactoring Test Code that seem to be a great book that I have missed out on up until now.


When you know the differences between the types, then you might want to read more about how to choose between them according to Mark Seeman here: Mocks for Commands, Stubs for Queries

In his post Mocks Aren't Stubs, Martin Fowler also explains the difference between stubs and mocks and investigates pros and cons of the classicist and mockist way of writing your tests.


So, something that I thought I already knew and I could write about in an hour or so, ended in hours of research and a post with links... keeping it DRY :)

lördag 5 augusti 2023

Skapa en AI-modell som styr en bil i AWS DeepRacer

AWS DeepRacer

AWS DeepRacer är tjänst i Amazons moln. Med hjälp av den tjänsten kan du träna upp en maskininlärningsmodell med förstärkningsinlärning så den kan köra en bil i skala 1:18 på en virtuell eller riktig bana. Modellen kan du sedan anmäla till olika tävlingar.


Som IT-konsult på Knowit hakade jag på möjligheten att prova på DeepRacer när Knowit skapade sin egen interna tävling där deltagarna fick generöst med fria modellträningstimmar. I det här inlägget tänkte jag visa lite hur tjänsten ser ut när man skapar sin modell. I ett eventuellt framtida inlägg är min plan att visa hur det ser ut när modellen tränas.

Skapa en modell

När man loggat in i Amazons molntjänst så listas de senaste tjänsterna man använt. För att komma in på AWS DeepRacer så klickar man på den länken.



Väl inne i tjänsten så får man upp menyn i bilden nedan. För att skapa en modell så går man till "Your models".


Här listas de modeller man skapat tidigare. Eftersom jag provat mig fram en hel del så har jag en del modeller liggande redan. På mitt konto finns dock en begränsning på max sex stycken samtidiga modeller, så jag tar bort en först för att visa hur man skapar en ny med knappen "Create model".



Modellen skapas med en wizard i fem steg. Före alla steg får man lite info om träningen.


Steg 1: Val av modellnamn och bana

I första steget får du namnge modellen och om du vill även ange en beskrivning av den.


Det finns 61 banor att välja mellan att träna modellen på.



Våra tävlingar skulle till att börja med köras på tävlingsbanan från 2018, det vill säga "re:Invent 2018".



Steg 2: Val av tävlingstyp och träningsalgoritm

Det finns tre olika tävlingstyper att välja mellan, just nu var det "Time trial" som gällde.


Vid val av träningsalgoritm blir det helt plötsligt rätt hög nivå... PPO eller SAC, det sa mig ingenting. Nån av guiderna jag tittade på har jag för mig föreslog att börja med PPO, ser att alla mina modeller använder den.


Vågar man sig på att fälla ut "Hyperparameters" så blir det riktigt läskigt, men som tur var så var rådet att låta dessa vara tills man blivit varm i kläderna.


Steg 3: Definiera vad bilen kan göra, d v s dess Action space

Först får man lite info igen.


Sen ska man välja mellan "Continuous" eller "Discrete" action space.


Väljer man "Continuous" så kan man i nästa steg ange max styrvinklar och min/max hastighet.




De val man gjort visas också visuellt. Man kan även klicka direkt på en av pilarna och dra den hur man vill ha det.


Eftersom tävlingen handlar om att ta sig fortast runt banan så har jag tänkt att det är bra att utöka action space med högre hastigheter, så när jag använt "continuous" så har jag ökat max hastighet från ett till fyra.


Om man istället väljer "Discrete" så ska man i nästa steg explicit ange ALLA möjliga utfall som modellen kan ha som utdata. Nedan är förinställda värden.



Jag har testat att använda båda sorterna, men det var ett tag sen jag skapade mina modeller och minns inte om någon av dem fungerade bättre. Jag fick aldrig till läsningen av loggfilerna som skapas vid utvärderingen av modellen, men om man får det så verkar logganalysverktygen mer anpassade till  (eller kanske t o m kräva) "discrete"-varianten.


Steg 4: Välja fordon

Jag har två likvärdiga virtuella bilar, den färgglada har jag för mig att jag fick som pris för att jag ställt upp med en modell i en tävling. Det finns varianter av bilarna, iallafall av de fysiska, som har dubbla framåtriktade kameror och LIDAR.


Steg 5: Belöningsfunktionen

Det är nu man får börja koda! Här ska du, i Python, ange den belöningsfunktion som modellen ska tränas med. Modellen får in bilens tillstånd, den tar ett beslut om vad bilen ska göra härnäst och din belöningsfunktion berättar för träningsalgoritmen hur bra beslutet var utifrån bilens nya tillstånd.

Nedanstående funktion är förifylld, den kan returnera fyra olika värden beroende på hur långt från mitten bilen är placerad, ju längre bort från mitten desto lägre värde. Det vill säga, den belönar modellen när den lyckas följa mittlinjen.


Men eftersom tävlingen handlar om att köra fortast så behöver man även belöna hastigheten på nåt sätt och då behöver man mer data att titta på. Data om bilens tillstånd och även lite info om banan kommer in till belöningsmodellen som en dictionary i parametern "params". Den innehåller nedanstående värden (illustrationer och förtydliganden finns här):
  • "all_wheels_on_track"
    Boolean
    flag to indicate if the agent is on the track

  • "x"
    float
    agent's x-coordinate in meters

  • "y"
    float
    agent's y-coordinate in meters

  • "closest_objects"
    [int, int]
    zero-based indices of the two closest objects to the agent's current position of (x, y).

  • "closest_waypoints"
    [int, int]
    indices of the two nearest waypoints.

  • "distance_from_center"
    float
    distance in meters from the track center

  • "is_crashed"
    Boolean
    Boolean flag to indicate whether the agent has crashed.

  • "is_left_of_center"
    Boolean
    Flag to indicate if the agent is on the left side to the track center or not.

  • "is_offtrack"
    Boolean
    Boolean flag to indicate whether the agent has gone off track.

  • "is_reversed"
    Boolean
    flag to indicate if the agent is driving clockwise (True) or counter clockwise (False).

  • "heading"
    float
    agent's yaw in degrees

  • "objects_distance"
    [float, ]
    list of the objects' distances in meters between 0 and track_length in relation to the starting line.

  • "objects_heading"
    [float, ]
    list of the objects' headings in degrees between -180 and 180.

  • "objects_left_of_center"
    [Boolean, ]
    list of Boolean flags indicating whether elements' objects are left of the center (True) or not (False).

  • "objects_location"
    [(float, float),]
    list of object locations [(x,y), ...].

  • "objects_speed"
    [float, ]
    list of the objects' speeds in meters per second.

  • "progress"
    float
    percentage of track completed

  • "speed"
    float
    agent's speed in meters per second (m/s)

  • "steering_angle"
    float
    agent's steering angle in degrees

  • "steps"
    int
    number steps completed

  • "track_length"
    float
    track length in meters.

  • "track_width"
    float
    width of the track

  • "waypoints"
    [(float, float), ]
    list of (x,y) as milestones along the track center

Här har jag sparat de belöningsmodeller jag har försökt med. I slutet försökte jag kombinera att bilen skulle ha en bra riktning mot nästa "waypoint" i banan, att den skulle ligga centrerad på banan samt ha en hög hastighet.

När man är klar med belöningsmodellen så ska man välja hur länge modellen ska tränas. Jag tyckte det verkade som att en timme var absolut minimum för att få fram en modell som klarade sig hyfsat bra.



De vill gärna att man anmäler sin modell till en tävling när den är klar. Det körs ständigt kvalificeringstävlingar där resultatet avgörs i slutet av månaden.


Sen är det bara att klicka på "Create model" så sätts träningen av modellen igång och man får rulla tummarna eller hitta på något annat under den tid man ställt in i steget innan att träningen får ta.



Avslutning

Sådär, nu har du fått en bild av hur man skapar en modell i AWS DeepRacer. Som jag skrev i början av inlägget så ska jag försöka knåpa ihop ett till inlägg där det syns hur träningen och utvärderingen av modellen ser ut.