tag:blogger.com,1999:blog-16748389901227189752024-03-29T04:29:17.682+01:00The Coding SwedeThoughts, projects and problems from a coding SwedeCarl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.comBlogger71125tag:blogger.com,1999:blog-1674838990122718975.post-37105468776090397772024-01-06T22:33:00.003+01:002024-03-06T21:40:17.731+01:00Att tänka utan bilder<h2 style="text-align: left;">Afantasi - att inte kunna visualisera bilder</h2><p>Ett snabbt visualiseringsexperiment:</p><p><b>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.</b></p><div><ul style="text-align: left;"><li>Hur såg bollen ut, vilka färger hade den och vilken storlek?</li><li>Hur betedde sig bollen när du släppte den?</li><li>Hur såg bordet ut? Vilka färger hade det och vilka material var det gjort av?</li></ul><div>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. </div><div><i><br /></i></div><div><i>Afantasi </i>ä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.</div><div><br /></div><div>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".</div><div><br /></div><h2 style="text-align: left;">Ett spektrum mellan afantasi och hyperfantasi</h2><div>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.</div><div><br /></div><div>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 <a href="https://aphantasia.com/article/strategies/think-of-a-horse/" target="_blank">sida </a>där han visar sin tweet där han ställer frågan: <i>Stäng ögonen och tänk på en häst. Vilken av bilderna nedan stämmer bäst överens med din upplevelse?</i></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ7bkl_5VpT-7CkY4Dk4HchZJJLXsG8oQ7aFJDP0oClwHtkMCIdXyaQK-7KYTgvhx8aHCg_TEHI7-XplYd77_ChQmOAg7lSeaXObrG7U1td0mE_0hDng7u6GCjHXzYQz8444OS7MyLnISXKisLiTaIITb4lGXskHivBt6WHKvkuzNAjLYrP5Wdbyol9aav/s524/Afantasi%20Horse%20example.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="299" data-original-width="524" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ7bkl_5VpT-7CkY4Dk4HchZJJLXsG8oQ7aFJDP0oClwHtkMCIdXyaQK-7KYTgvhx8aHCg_TEHI7-XplYd77_ChQmOAg7lSeaXObrG7U1td0mE_0hDng7u6GCjHXzYQz8444OS7MyLnISXKisLiTaIITb4lGXskHivBt6WHKvkuzNAjLYrP5Wdbyol9aav/s16000/Afantasi%20Horse%20example.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div></div><div class="separator" style="clear: both; text-align: left;">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.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">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.</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC_MY24sWKk6g4_ppEkDdzwRnVSWvI1sT4jSh5I8g-Imx7NvvsF2qhi6WayOvVo9OrtZfRdbJfo6JRLU1ZtOyWd9IW37raNbLiR9ydkGJLZbrPKxv2GTsCArqsYaIHaSyzPavJb6BnXbMbMsAwLzJ-GTDv4zQMAnc69LtqVei_2v6uQkR73tDRHmpChdIL/s490/Screenshot%202023-12-23%20162423.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC_MY24sWKk6g4_ppEkDdzwRnVSWvI1sT4jSh5I8g-Imx7NvvsF2qhi6WayOvVo9OrtZfRdbJfo6JRLU1ZtOyWd9IW37raNbLiR9ydkGJLZbrPKxv2GTsCArqsYaIHaSyzPavJb6BnXbMbMsAwLzJ-GTDv4zQMAnc69LtqVei_2v6uQkR73tDRHmpChdIL/s16000/Screenshot%202023-12-23%20162423.png" /></a></div><br /><h2 style="text-align: left;">Forskningsresultat - Hur ser en bild ut i minnet?</h2><div>I klippet "<a href="https://www.youtube.com/watch?v=p4-9tfv1eps" target="_blank">Quantifying Aphantasia through Drawing</a>" så presenteras forskning där man låtit personer se bilder som de sedan skulle avbilda.</div><div><br /></div><div>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.)</div><div><br /></div><div>Ett sovrum </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjefkUxMY3a2M8G97iixDLln_YwdCntRU6LkwW24A4V50HfY223zMv5JSUf7Uo9Z5KY_sIuUn_9O2ebNj9zXsE5EwEecGPXcI6kwCby3VZMshSawfvuxTbrNPp_nuRFKd0JYR4m9G2WvTax0vD0Wqfih0dY6kxPs6r5Vu-fkILJa_eW_V5GLyisjAg8SLU/s250/Picture1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="248" data-original-width="250" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjefkUxMY3a2M8G97iixDLln_YwdCntRU6LkwW24A4V50HfY223zMv5JSUf7Uo9Z5KY_sIuUn_9O2ebNj9zXsE5EwEecGPXcI6kwCby3VZMshSawfvuxTbrNPp_nuRFKd0JYR4m9G2WvTax0vD0Wqfih0dY6kxPs6r5Vu-fkILJa_eW_V5GLyisjAg8SLU/s1600/Picture1.png" width="250" /></a></div><div><br /></div>Ett kök<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjMLB7VQGvYdrRicIoxRoy-XZaPcB0o2dbYdrxxl12GUR0kDXXabxzvbFG1cdgptFxo17uZTy58xYCotyO0c1LP8iOoKbXU_ltGXAqnXcp3VEhNLvVw_Kf_Zeb0p-u1eKxqH77KvvLyUusXkIlnAJNmNrcG1V5xD9MTQMvaII-bvlRwhs2_ieYkc6F9_ib/s250/Picture2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="250" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjMLB7VQGvYdrRicIoxRoy-XZaPcB0o2dbYdrxxl12GUR0kDXXabxzvbFG1cdgptFxo17uZTy58xYCotyO0c1LP8iOoKbXU_ltGXAqnXcp3VEhNLvVw_Kf_Zeb0p-u1eKxqH77KvvLyUusXkIlnAJNmNrcG1V5xD9MTQMvaII-bvlRwhs2_ieYkc6F9_ib/s1600/Picture2.png" width="250" /></a></div><div><br /></div>Ett vardagsrum<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD3NsKN7UZwvcFZ-oHHS5lOaE3cosUOVbMCF33-AD2O557UeIEfkG44JwcsDfNCN7LOSnC23QLNoSwmbgfc5x8VY7v9tZHtgW8nqlVX_Nb6igMQWM6k5m6HmCgTV6NshDfGrl75rOMpfe8Y9-9arS2eaXBJUsrFzXFSOZVcG3xqioDGIqkGohp1lWi9Stw/s250/Picture3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="250" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD3NsKN7UZwvcFZ-oHHS5lOaE3cosUOVbMCF33-AD2O557UeIEfkG44JwcsDfNCN7LOSnC23QLNoSwmbgfc5x8VY7v9tZHtgW8nqlVX_Nb6igMQWM6k5m6HmCgTV6NshDfGrl75rOMpfe8Y9-9arS2eaXBJUsrFzXFSOZVcG3xqioDGIqkGohp1lWi9Stw/s1600/Picture3.png" width="250" /></a></div><br /><div><br /></div><div>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 😅</div><div><br /></div><div>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.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi8exm4zgcTLo21YiYDN2091ZibiZ2P0v5OagrX57_kI0FEsV24WNrbHw4gOXpfu7jhdgUXSgRE_RHbeubcX49VQXied70qNi-4XjZPTv9EOaI1W1yjXJPpV6Ogy5M0XO1wtISx47gAevjteEbzna-gHiLU77lzXcC2I5VMOxUNOoRwqsymmdHmD5Ml4XG/s801/From%20memory%20afantasi.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="801" data-original-width="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi8exm4zgcTLo21YiYDN2091ZibiZ2P0v5OagrX57_kI0FEsV24WNrbHw4gOXpfu7jhdgUXSgRE_RHbeubcX49VQXied70qNi-4XjZPTv9EOaI1W1yjXJPpV6Ogy5M0XO1wtISx47gAevjteEbzna-gHiLU77lzXcC2I5VMOxUNOoRwqsymmdHmD5Ml4XG/s16000/From%20memory%20afantasi.png" /></a></div><br /><div>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.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDe9O9A_rBUQMVHFCr1qDJ4mp42aNKupvubyWw_8SCWxu_0w04-_WwbK5lmAs1C7jCj7dt2dYpUBIfV4tTlSvAjUWyo7V6F6VWE2S-0UiYZluv5Or5enMTZ0vqFOivaiO1vccIsA175RULWE3mFEXjeshDWtjp8jA7zQns_4lc4rVCNaUJ5x98Kqks0s5u/s802/Avbildning%20afantasi.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="802" data-original-width="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDe9O9A_rBUQMVHFCr1qDJ4mp42aNKupvubyWw_8SCWxu_0w04-_WwbK5lmAs1C7jCj7dt2dYpUBIfV4tTlSvAjUWyo7V6F6VWE2S-0UiYZluv5Or5enMTZ0vqFOivaiO1vccIsA175RULWE3mFEXjeshDWtjp8jA7zQns_4lc4rVCNaUJ5x98Kqks0s5u/s16000/Avbildning%20afantasi.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>Nedan är exempel på bilder avritade från minnet av kontrollgruppen. Fler objekt och detaljer är med. Färg används oftare.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil5w2x_pcbDPcufOnTVP6fz_E9FT52NZ0oAN6_R-UHuKIiFd1C9vArRfZqQmQGQFb3Y96FMotcnacX2B4fX4PjTMZN7DoqbsPk19WFUqPamsxHvhDbQ00OLTSTkqaSI7RjTeMhwmzfiB5dyeB5voWp-I0ZHUnyewzhZ-df7ZPQFQMxdrdBvLm8E4_AYSAs/s806/Kontrollgrupp%20minnet.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="806" data-original-width="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil5w2x_pcbDPcufOnTVP6fz_E9FT52NZ0oAN6_R-UHuKIiFd1C9vArRfZqQmQGQFb3Y96FMotcnacX2B4fX4PjTMZN7DoqbsPk19WFUqPamsxHvhDbQ00OLTSTkqaSI7RjTeMhwmzfiB5dyeB5voWp-I0ZHUnyewzhZ-df7ZPQFQMxdrdBvLm8E4_AYSAs/s16000/Kontrollgrupp%20minnet.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Även kontrollgruppen ritade av bilderna när de hade dem tillgängliga att se på under tiden. Nedan är resultatet från det. </div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5SgbIGnKRUcZHi8Si3fpTAY-csJ7g8dze2GmK7-sI74o4rs0snQzntBuZ74DhnJVQ4XnPazriu6hOC24v8C4SMvZ6oJ2GCNj28UHjcdcZ7tjnm-rJN3Hj2L-OGUSXT1_NUpxXXIe0ow-aOC4aVXteMykfItoKbng8EpTYdJTyvPmICEdeJw1DTx2fkd59/s809/Kontrollgrupp%20rita%20av.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="809" data-original-width="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5SgbIGnKRUcZHi8Si3fpTAY-csJ7g8dze2GmK7-sI74o4rs0snQzntBuZ74DhnJVQ4XnPazriu6hOC24v8C4SMvZ6oJ2GCNj28UHjcdcZ7tjnm-rJN3Hj2L-OGUSXT1_NUpxXXIe0ow-aOC4aVXteMykfItoKbng8EpTYdJTyvPmICEdeJw1DTx2fkd59/s16000/Kontrollgrupp%20rita%20av.png" /></a></div><div><br /></div>Några slutsatser som drogs i studien:</div><div><div><div><ul><li>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.</li><li>Afantasi-minnen innehåller färre detaljer och mindre färg.</li><li>Trots att afantasi-minnen har färre detaljer, så är den spatiala informationen (<b>var </b>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.</li><li>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:<br /><br /><i>"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."<br /><br />"I had to remember a list of objects rather than the picture."<br /><br />"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."</i><br /><br />Och till sist ett från en person i kontrollgruppen:<br /><br /><i>"I can see the picture in my mind, but I am terrible at drawing."<br /><br /></i></li><li>Afantasi-minnen är kanske mer korrekta.<br />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.</li></ul></div><div></div><br /></div><div>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.<br /><br /></div><div>Heldragen linje - afantasigruppen</div><div>Steckad linje - kontrollgruppen</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWnOx4xMTEmhZ83Mi67_DE6oyMRpSBAj7liKf_lsuxyFclHjxm6AgPxC6gttEUf9Vnyq0u7-JXa1nAQgyB5OJsh5LuDPCds5me96DdsWHX2YygxMuhG9zUxyw29QOFv9f_4qWuXndq_LcKvwxGQvkz_lclkemygq_bMaJv1_9e2Su_wHytsK6h2T0TwFfQ/s774/Screenshot%202024-01-06%20175000.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="774" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWnOx4xMTEmhZ83Mi67_DE6oyMRpSBAj7liKf_lsuxyFclHjxm6AgPxC6gttEUf9Vnyq0u7-JXa1nAQgyB5OJsh5LuDPCds5me96DdsWHX2YygxMuhG9zUxyw29QOFv9f_4qWuXndq_LcKvwxGQvkz_lclkemygq_bMaJv1_9e2Su_wHytsK6h2T0TwFfQ/w640-h321/Screenshot%202024-01-06%20175000.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">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.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8b_I6AYyjWtjAyrV0sAmi7OGdABftLixtNsECm49GqbeuHRLmtLXlmJ8UjxaUOx19m1RlWEqLg9fNZaoOwmN0evlyIeJPoEeiLMk7HfetBPDSKkWAgVGEznOsjwQWqRcIIjZBwIC5bmHoKXsh-r75wWI3Cze_z9ZZuy_Ti2brFnywejX3Sm6FIav0NnV/s789/Screenshot%202024-01-06%20175931.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="231" data-original-width="789" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8b_I6AYyjWtjAyrV0sAmi7OGdABftLixtNsECm49GqbeuHRLmtLXlmJ8UjxaUOx19m1RlWEqLg9fNZaoOwmN0evlyIeJPoEeiLMk7HfetBPDSKkWAgVGEznOsjwQWqRcIIjZBwIC5bmHoKXsh-r75wWI3Cze_z9ZZuy_Ti2brFnywejX3Sm6FIav0NnV/w640-h189/Screenshot%202024-01-06%20175931.png" width="640" /></a></div><br /><div><br /></div><h2 style="text-align: left;">Drömmar, igenkänning och röster i huvudet</h2><h3 style="text-align: left;">Drömmar</h3><div>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. </div><div><br /></div><div>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.</div><div><br /></div><h3 style="text-align: left;">Hur känner du igen din familj?</h3><div>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.</div><div><br /></div><div>Hittade just en studie om precis det "<a href="https://www.sciencedirect.com/science/article/pii/S0010945223001764" target="_blank">The role of visual imagery in face recognition and the construction of facial composites. Evidence from Aphantasia</a>" som jag bara skummat lite grann. Här är en del av sammanfattningen.</div><div><span style="color: #1f1f1f; font-family: ElsevierGulliver, Georgia, "Times New Roman", Times, STIXGeneral, "Cambria Math", "Lucida Sans Unicode", "Microsoft Sans Serif", "Segoe UI Symbol", "Arial Unicode MS", serif; font-size: 16px;"></span><blockquote><span style="color: #1f1f1f; font-family: ElsevierGulliver, Georgia, "Times New Roman", Times, STIXGeneral, "Cambria Math", "Lucida Sans Unicode", "Microsoft Sans Serif", "Segoe UI Symbol", "Arial Unicode MS", serif; font-size: 16px;">People with </span><em style="box-sizing: border-box; color: #1f1f1f; font-family: ElsevierGulliver, Georgia, "Times New Roman", Times, STIXGeneral, "Cambria Math", "Lucida Sans Unicode", "Microsoft Sans Serif", "Segoe UI Symbol", "Arial Unicode MS", serif; font-size: 16px; margin: 0px; padding: 0px;">aphantasia</em><span style="color: #1f1f1f; font-family: ElsevierGulliver, Georgia, "Times New Roman", Times, STIXGeneral, "Cambria Math", "Lucida Sans Unicode", "Microsoft Sans Serif", "Segoe UI Symbol", "Arial Unicode MS", serif; font-size: 16px;"> 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).</span></blockquote><span style="color: #1f1f1f; font-family: ElsevierGulliver, Georgia, "Times New Roman", Times, STIXGeneral, "Cambria Math", "Lucida Sans Unicode", "Microsoft Sans Serif", "Segoe UI Symbol", "Arial Unicode MS", serif; font-size: 16px;"></span></div><div>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.</div><div><br /></div><h3 style="text-align: left;">Röster i huvudet</h3><div>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?</div><div><br /></div><h3 style="text-align: left;">Positions- eller känselminne?</h3><div>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.</div><div><br /></div><h2 style="text-align: left;">Hur stor andel har afantasi?</h2><div>Enligt en artikel i Modern psykologi <a href="https://modernpsykologi.se/forskning/sinne-utan-bilder/" target="_blank"><i>Afantasi – ett sinne utan bilder</i></a> 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å.</div><div><br /></div><div>Å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.</div><div><br /></div><div>Här är ett "test", VVIQ, som du kan göra själv <a href="https://aphantasia.com/study/vviq/" target="_blank">Vividness of Visual Imagery Questionnaire</a>. 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:</div><div><ol style="background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: #0f172a; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin-block: 0px; margin: 16px; outline: 0px; vertical-align: baseline;"><li style="background: transparent; border: 0px; box-sizing: border-box; margin-block: 0px; outline: 0px; vertical-align: baseline;">No image at all, I only “know” I am thinking of the object</li><li style="background: transparent; border: 0px; box-sizing: border-box; margin-block: 0px; outline: 0px; vertical-align: baseline;">Dim and vague image</li><li style="background: transparent; border: 0px; box-sizing: border-box; margin-block: 0px; outline: 0px; vertical-align: baseline;">Moderately realistic and vivid</li><li style="background: transparent; border: 0px; box-sizing: border-box; margin-block: 0px; outline: 0px; vertical-align: baseline;">Realistic and reasonably vivid</li><li style="background: transparent; border: 0px; box-sizing: border-box; margin-block: 0px; outline: 0px; vertical-align: baseline;">Perfectly realistic, as vivid as real seeing</li></ol><h2 style="text-align: left;">Avslut</h2></div></div><div>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 <a href="https://www.youtube.com/watch?v=p4-9tfv1eps" target="_blank">Quantifying Aphantasia through Drawing</a> 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.</div><div><br /></div><h2 style="text-align: left;">Länkar</h2><div>Wikipedia på <a href="https://sv.wikipedia.org/wiki/Afantasi" target="_blank">svenska </a>och <a href="https://en.wikipedia.org/wiki/Aphantasia" target="_blank">engelska</a></div><div><br /></div><div>2016-04-22 </div><div><a href="https://www.facebook.com/notes/2862324277332876/" target="_blank">Facebook-inlägg av Blake Ross</a>, systemutvecklare och medgrundare av Mozilla Firefox Foundation. <br />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.</div><div><br /></div><div>2019-08-20</div><div><a href="https://www.youtube.com/watch?v=Dx4TutpgWhU" target="_blank">I Have APHANTASIA (you might have it too - please check!!)</a> YouTube <div>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.</div></div><div><br /></div><div><div>2020-11-06</div><div><a href="https://www.dn.se/kultur/hanna-fahl-det-ar-som-om-nagon-just-avslojat-att-98-procent-av-jordens-befolkning-ar-tankelasare/" target="_blank">Kulturkrönika i DN (paywall) av Hanna Fahl</a> </div><div>Kort om Hannas upptäckt av afantasi (förmodligen genom texten av Blake Ross).</div></div><div><br /></div><div>2022-05-09</div><a href="https://www.youtube.com/watch?v=vbVlte9hSrE" target="_blank">Blind Mind's Eye - The Science of Aphantasia with Dr. Adam Zeman</a> YouTube<div>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.</div><div><br /></div><div>2023-02-10</div><a href="https://www.youtube.com/watch?v=p4-9tfv1eps" target="_blank">Quantifying Aphantasia through Drawing</a> YouTube <div>En studie som undersöker om man kan använda teckningar som ett fönster in till en persons minnesbilder.</div><div><br /></div><div>2024-01-25</div><div><a href="https://poddtoppen.se/podcast/1483916137/allt-du-behover-veta-om-ny-teknik/160-sa-mater-du-avstandet-till-en-galax-langt-langt-borta" target="_blank">Så mäter du avståndet till en galax långt, långt borta...</a> Ny Tekniks podcast "Allt du behöver veta om ny teknik"</div><div>Avsnittet handlar inte alls om afantasi, men den ena poddvärden, Bill Burrau, nämner i förbifarten för den andra poddvärden, Viktor Krylmark, att Bill inte kan tänka i bilder. I slutet av avsnittet diskuterar de det lite mer och de tycker båda att den andre är lite konstig 😆</div><div>I en mailkonversation jag hade med Bill så säger han att han tycker det är spännande att jag tycker att exemplen med de sex hästbilderna är dåligt, för det är nåt han kan känna igen sig i, samt </div><blockquote><div><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">Skulle dock säga att jag kanske är på 2-3 på bilderna på hästen. Och med vissa saker som jag kan bra, möjligen en 4 när ingenting i närheten stör eller låter. </span></div></blockquote><div><div><br /></div></div><div>2024-02-26</div><div><a href="https://www.theguardian.com/wellness/2024/feb/26/what-is-aphantasia-like" target="_blank">I can't picture things in my mind. I didn't realize that was unusual.</a> The Guardian (paywall, men tillåter läsning av några artiklar) </div><div>Shayla Love beskriver hur hon upptäckte att hon har afantasi och hennes upplevelser av det. Om att olika personer befinner sig på olika ställen på visualiseringsskalan och att afantiker också kan skapa visuell konst.</div><div><br /></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com7tag:blogger.com,1999:blog-1674838990122718975.post-92079793166284631952023-12-16T20:15:00.000+01:002023-12-16T20:15:27.740+01:00A homage to my unicycle instructor on the other side of the world!<h2 style="text-align: left;">Hooray for content creators!</h2><p>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!</p><p>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 <a href="https://www.youtube.com/@PrettyGoodChannel">PrettyGoodChannel</a>. And it's free! With the possibility to support through <a href="https://www.patreon.com/uniquest" target="_blank">patreon</a>.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJei9ONyA-IStvTr0Ju2aMQDu76tf779gz_odKMV2MtgZrqOUGqXt2j9f-WdQ3tIKKQWYvUWYXXRzJfLlb2DK8jn3Bpoc9ULk8FGT3IgE4ZsldJ4uRcJBXa6hTCVGqNZ3SswXOge2S_mD0VTdZSY5RFtThUYefwzHATHiW5BhwmpMWTN_qqn4ixG3fIgz/s920/Screenshot%202023-12-16%20155115.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="900" data-original-width="920" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJei9ONyA-IStvTr0Ju2aMQDu76tf779gz_odKMV2MtgZrqOUGqXt2j9f-WdQ3tIKKQWYvUWYXXRzJfLlb2DK8jn3Bpoc9ULk8FGT3IgE4ZsldJ4uRcJBXa6hTCVGqNZ3SswXOge2S_mD0VTdZSY5RFtThUYefwzHATHiW5BhwmpMWTN_qqn4ixG3fIgz/w320-h314/Screenshot%202023-12-16%20155115.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>Image from the intro sequence to Uniquest videos.</i></td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><p>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.</p><p><br /></p><h2 style="text-align: left;">The leveling tree</h2><div><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFUkGvNktJ6-vJX4BjUulH9XcPeehb1tLkg3ck8XE8BncafS66pNINEyUYC9M_KshwuaqRvDTzm-Vs94Mao9cWt3g_77cohCl_Z9QYKx9LAV9DMFo_i2NvFhe-mfLD_90SIPnzcC3m8ExktjuvC5hfpcUyiZ4YIYiHOGfJxI_14cVTvVWNAQuSlO6Q3dYZ/s741/Screenshot%202023-11-12%20150501.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="235" data-original-width="741" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFUkGvNktJ6-vJX4BjUulH9XcPeehb1tLkg3ck8XE8BncafS66pNINEyUYC9M_KshwuaqRvDTzm-Vs94Mao9cWt3g_77cohCl_Z9QYKx9LAV9DMFo_i2NvFhe-mfLD_90SIPnzcC3m8ExktjuvC5hfpcUyiZ4YIYiHOGfJxI_14cVTvVWNAQuSlO6Q3dYZ/w400-h127/Screenshot%202023-11-12%20150501.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>Leveling tree</i></td></tr></tbody></table><div> </div><h3 style="text-align: left;">Beginner</h3><div><br /></div><div><b>Level 1:</b> Assisted mount, <i>Assisted ride 3+ revs, </i>Assisted idle 3+ revs, <i>Unassisted ride 1+ revs</i></div><div><div class="separator" style="clear: both; text-align: left;"><b>Level 2:</b> Unassisted ride 4+ revs, <i>Assisted bunny hop,</i> Unassisted idle 1+ revs, <i>Free mount 2+ revs</i></div></div><div class="separator" style="clear: both; text-align: left;"><div><b>Level 3:</b> Unassisted ride 8+ revs with dismount, <i>Ride down curb</i>, Assisted backwards 2+ revs, <i>180 turn</i></div></div><div><b>Level 4:</b> Ride in a circle, <i>Rolling bunny hop</i>, Riding one footer,<i> Jump mount</i></div><div><i><br /></i></div><div><h3 style="text-align: left;">Street</h3><div><br /></div><div><b>Level 1: </b>90-90 twist, <i>Rolling hop down curb</i>, Drop mount</div><div><div><b>Level 2: </b>Halfrev, <i>Hop up a curb</i>, Roll-flip mount</div></div><div><div><b>Level 3:</b> Hop down 2 stair, <i>180 twist</i>, Crankgrab</div></div><div><b>Level 4:</b> Fakie 180 twist, <i>No footer footplant</i>, Crankgrab 180 out</div><div><b>Level 5: </b>180 down curb, <i>Outspin footplant</i>, Running jump mount, <i>Pop-plant</i></div><div><i><br /></i></div><div><h3 style="text-align: left;">General</h3></div><div><br /></div><div><b>Level 1:</b> Idle 2+ revs, <i>Switch freemount</i>, Standing ride 3+ revs,<i> Backwards ride 2+ revs</i>, Ride in a figure 8</div><div><b>Level 2:</b> One foot ride 2+ revs, <i>Ride down 2 stair</i>, Backwards 4+ revs, <i>Stillstand 3+ seconds</i></div><div class="separator" style="clear: both; text-align: left;"><b>Level 3:</b> Blind idle, <i>360 wall push</i>, Ride down 4 stair, <i>Assisted wheelwalk</i>, Kick-up mount</div><div class="separator" style="clear: both; text-align: left;"><b>Level 4:</b> Idle to one-foot ride, <i>Can-can</i>, Stomach ride, <i>Suicide mount</i>, Footjam</div><b>Level 5:</b> Wheelwalk, <i>Feet back to pedals one-foot ride</i>, Seat in front backwards, <i>Blind one foot ride</i>, Seatdrop one foot pick up mount, <i>Bay hop</i></div><div><i><br /></i></div><div><h3 style="text-align: left;">Flatland</h3></div><div><br /></div><div><b>Level 1: </b>10+ static hops,<i> Leg wrap mount,</i> Seat in fron ride 3+ revs</div><div><b>Level 2:</b> Seat in front bunny hops, <i>No footer, </i>180 unispin mount</div><div><b>Level 3:</b> Leg extension, <i>Seatdrop,</i> Seatbounce</div><div><b>Level 4:</b> 90 unispin / hop on tire,<i> Tiregrab superman</i>, Body varial mount</div><div><b>Level 5:</b> 180 unispin, <i>Seatdrop-legwrap</i>, Half roll</div><div><br /></div><div><div class="separator" style="clear: both;"><h2 style="text-align: left;">The videos</h2><h3 style="text-align: left;">Beginner </h3><div style="text-align: left;">Chris' instructions for <a href="https://www.youtube.com/watch?v=rWUoIv1ftXc" target="_blank">level 1</a>, <a href="https://www.youtube.com/watch?v=ss8iPrDfTs0" target="_blank">level 2</a>, <a href="https://www.youtube.com/watch?v=YPBIv6OaVh0" target="_blank">level 3</a>, <a href="https://www.youtube.com/watch?v=XKt8WJt4LDk">level 4</a>.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Me</div><ul style="text-align: left;"><li><a href="https://www.youtube.com/watch?v=gfWa91UCO_I" target="_blank">before</a> finding UniQuest (2020-09-11) </li><li><a href="https://www.youtube.com/watch?v=UXRsqZ3VzWM">level 2</a> (2020-11-16)</li><li><a href="https://youtu.be/msxQq2iLL3k" target="_blank">level 3</a> (2021-04-03)</li><li><a href="https://youtu.be/Jc22C3Roa8o" target="_blank">level 4</a> (2021-04-11)</li></ul><div><br /></div><div><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio3G8jglhvlSfCEDmDNuhUaLCaQEnC48p_CcuIyUOKopVXBUUDJi4pkm2XOIgW7K5wuu8v0zne6YT3su103Ay8xCgjcIsJkQi-VD685y6HQDVAZrtkmIUVcZgK4FFnSoqlHvbyb-PgO-4N02DOwTfbLfg1SsFf-kLx3o1lDDsxzKU7GFgSOlDeZ4eyvpTe/s817/Screenshot%202023-12-16%20172145.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="765" data-original-width="817" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio3G8jglhvlSfCEDmDNuhUaLCaQEnC48p_CcuIyUOKopVXBUUDJi4pkm2XOIgW7K5wuu8v0zne6YT3su103Ay8xCgjcIsJkQi-VD685y6HQDVAZrtkmIUVcZgK4FFnSoqlHvbyb-PgO-4N02DOwTfbLfg1SsFf-kLx3o1lDDsxzKU7GFgSOlDeZ4eyvpTe/s320/Screenshot%202023-12-16%20172145.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="text-align: left;"><i>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"</i></span></td></tr></tbody></table><div><br /></div></div><div class="separator" style="clear: both;"><h3 style="text-align: left;">General</h3>Chris' instructions for <a href="https://www.youtube.com/watch?v=j6r_TA_Y9NI" target="_blank">level 1</a>, <a href="https://www.youtube.com/watch?v=U0RSwVimJKc" target="_blank">level 2</a>, <a href="https://www.youtube.com/watch?v=Cw76PU8BmiY" target="_blank">level 3</a>, <a href="https://www.youtube.com/watch?v=l_3PWQd0olo">level 4</a>, <a href="https://www.youtube.com/watch?v=aIrzt5saiYY" target="_blank">level 5</a>, <a href="https://www.youtube.com/watch?v=bBaNdoDwZEQ" target="_blank">level 6</a>.</div><p>Me <a href="https://www.youtube.com/watch?v=J9MFWyxw92Y" target="_blank">level 1</a> (2021-05-01)</p><h3 style="text-align: left;">Street</h3><div>Chris' instructions for <a href="https://www.youtube.com/watch?v=eLzl0A__H4g" target="_blank">level 1</a>, <a href="https://www.youtube.com/watch?v=YgPaGStsoDw" target="_blank">level 2</a>, <a href="https://www.youtube.com/watch?v=HmBRc0lThw4" target="_blank">level 3</a>, <a href="https://www.youtube.com/watch?v=XCGsuCyeZQs">level 4</a>, <a href="https://www.youtube.com/watch?v=VSC6sS_JmbA" target="_blank">level 5</a>.</div><div class="separator" style="clear: both; text-align: center;"><p style="text-align: left;">Me <a href="https://www.youtube.com/watch?v=Y4RdnvuWNGk" target="_blank">level 1</a> (2021-09-05)</p><p style="text-align: left;"><br /></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TaZIRovgx-zCX_9nRItXq5zM-qFjCG_Jt0E7j0V2OnQClaDAuhRN7Ea3pe6BdkMMaFdNCD3-6AWdckLrCsPzl53zx8e4qZ130nBgw-ZIBqNsKtaKsNKeV_1KNAEYnYQ2Elw5zrguhwXHK0puR4o_pvgccTrgSgsXP_Wyvp-HIYtfKd2lAzc6p-vbOOaW/s806/Screenshot%202023-12-16%20173818.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="806" data-original-width="692" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TaZIRovgx-zCX_9nRItXq5zM-qFjCG_Jt0E7j0V2OnQClaDAuhRN7Ea3pe6BdkMMaFdNCD3-6AWdckLrCsPzl53zx8e4qZ130nBgw-ZIBqNsKtaKsNKeV_1KNAEYnYQ2Elw5zrguhwXHK0puR4o_pvgccTrgSgsXP_Wyvp-HIYtfKd2lAzc6p-vbOOaW/s320/Screenshot%202023-12-16%20173818.png" width="275" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="text-align: left;"><i>Rolling hop down curb</i></span></td></tr></tbody></table><div class="separator" style="clear: both;"><h3 style="text-align: left;">Flatland </h3><div style="text-align: left;">Chris' instructions for <a href="https://www.youtube.com/watch?v=cx5p34aPM68" target="_blank">level 1</a>, <a href="https://www.youtube.com/watch?v=4H9SVoPGkaM" target="_blank">level 2</a>, <a href="https://www.youtube.com/watch?v=DrIRBguX01E" target="_blank">level 3</a>, <a href="https://www.youtube.com/watch?v=p2h4v-h-W_E">level 4</a>, <a href="https://www.youtube.com/watch?v=nkg-UqXQ84A" target="_blank">level 5</a>.</div><p style="text-align: left;">Me <a href="https://www.youtube.com/watch?v=49ndcIpu01M" target="_blank">level 1</a> (2021-09-23)</p><p style="text-align: left;"><br /></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipR0NQ1Wch9bV2VjrBt36JFBys75-i6UPQ_vobccRiuFNEHc629x9UNLs7T1TwjQ40nS_cuxuYrFx4FCCHjfFYqxF1R6163EdmNPL0cbU4MlOaos6NaswRWoyX_PKE1DifZm-0kCJJpxSbcTHWw980W7DG6xZ59UlEUOU3EzHEZEc9kBOtV1G9E_T3Xu3p/s649/Screenshot%202023-12-16%20173011.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="627" data-original-width="649" height="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipR0NQ1Wch9bV2VjrBt36JFBys75-i6UPQ_vobccRiuFNEHc629x9UNLs7T1TwjQ40nS_cuxuYrFx4FCCHjfFYqxF1R6163EdmNPL0cbU4MlOaos6NaswRWoyX_PKE1DifZm-0kCJJpxSbcTHWw980W7DG6xZ59UlEUOU3EzHEZEc9kBOtV1G9E_T3Xu3p/s320/Screenshot%202023-12-16%20173011.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>"Seat in front riding" with the seat a bit too far in front</i></td></tr></tbody></table><p style="text-align: left;"><br /></p><h3 style="clear: both; text-align: left;">Current state</h3><div style="text-align: left;">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!</div><h2 style="text-align: left;"><br /></h2><h2 style="text-align: left;">When you start digging...</h2><div style="text-align: left;">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 <a href="https://www.youtube.com/watch?v=XD5h8KktwbI&list=PLocRYksAqGOJnr-Y0eyP87P5banlFicp4" target="_blank">ride a unicycle around the world</a>? Or that you can do <a href="https://www.youtube.com/watch?v=z5A74Qhk-RI" target="_blank">downhill unicycling</a>?</div><h2 style="text-align: left;"><br /></h2><h2 style="text-align: left;">Once I had a Harmonica teacher in USA</h2><div style="text-align: left;">During the years from 2011 to 2017 I learned to play blues harmonica from David Barrett at <a href="https://www.bluesharmonica.com/home">bluesharmonica.com</a>. 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.</div><div style="text-align: left;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdlL5eHh1KBmItpJ_SCsHTgPJQ0llNspHiTkNSLuytOtJgIxxscBJaswEVqiTQvXBR2U1zd6i9AA73F1kryPswphgIRtynlEvLjpXBPm6ujYaUFTcu7sHh4UuPg3wxNxUTH95Qp5PFcYfrCmOWjk-xr00dmuF3Kcxf-9gY1vZteuxMOzb-IVgEipVTCydY/s188/Screenshot%202023-12-16%20162355.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="188" data-original-width="181" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdlL5eHh1KBmItpJ_SCsHTgPJQ0llNspHiTkNSLuytOtJgIxxscBJaswEVqiTQvXBR2U1zd6i9AA73F1kryPswphgIRtynlEvLjpXBPm6ujYaUFTcu7sHh4UuPg3wxNxUTH95Qp5PFcYfrCmOWjk-xr00dmuF3Kcxf-9gY1vZteuxMOzb-IVgEipVTCydY/s1600/Screenshot%202023-12-16%20162355.png" width="181" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>I cleared level 6 before quitting</i></td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">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.</div><div class="separator" style="clear: both; text-align: center;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJj5w9pHmm2k19n5yODBjV-ZZzXnTsPY7W7U-P8eElpjHrqQ0X_fmcPWc2cdVH4z881s9re122la5zAejZTk2sgcllaEwi84qXZW5XDbzre9l8TSIl48p_ijVlK-eHPxuDJ1ECbD4-kUuToNSHk9GBWey6w9gtvWFfLwleW9G27KCbUWUTBXoAxP7J4AA4/s676/Screenshot%202023-12-16%20161816.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="571" data-original-width="676" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJj5w9pHmm2k19n5yODBjV-ZZzXnTsPY7W7U-P8eElpjHrqQ0X_fmcPWc2cdVH4z881s9re122la5zAejZTk2sgcllaEwi84qXZW5XDbzre9l8TSIl48p_ijVlK-eHPxuDJ1ECbD4-kUuToNSHk9GBWey6w9gtvWFfLwleW9G27KCbUWUTBXoAxP7J4AA4/w400-h338/Screenshot%202023-12-16%20161816.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>The levels in "The level of achievement program"</i></td></tr></tbody></table><div class="separator" style="clear: both;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;">During the course you learn to create your own songs, <a href="https://soundcloud.com/carl-bj-rkn-s/carls-first-blues-reworked?si=f2e52d4381984436a1b3a684b110f518" target="_blank">here's one I composed</a>, following a few rules of what it should include.</div><div style="text-align: left;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKdKOsvFaAv8SUSlX38gU4OEEgDunp7cCeTMNf5zJy7d1m_Ecf3sIuZdgJ57Wli0-i8q5Xm9m3qOd271qsIGkVA0r0kNoPMeq8f3NKCpbkD5XhL7wKjz-Ak636UkdRaAeAnvChfBb31yhmbnW5e3_mk_dJyL9VJAGHMpCpoVHDciDf0VPFlSh0nQFZdpSS/s669/Screenshot%202023-12-16%20163841.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="133" data-original-width="669" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKdKOsvFaAv8SUSlX38gU4OEEgDunp7cCeTMNf5zJy7d1m_Ecf3sIuZdgJ57Wli0-i8q5Xm9m3qOd271qsIGkVA0r0kNoPMeq8f3NKCpbkD5XhL7wKjz-Ak636UkdRaAeAnvChfBb31yhmbnW5e3_mk_dJyL9VJAGHMpCpoVHDciDf0VPFlSh0nQFZdpSS/w640-h127/Screenshot%202023-12-16%20163841.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>My own blues song on Soundcloud</i></td></tr></tbody></table><br /><div class="separator" style="clear: both; text-align: left;">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.</div><br /><div style="text-align: left;"><br /></div></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaALLYN__PNNb-viH-H7wzC2AL8ha4EIFkDMU7CEs2lYF0dXCjU6MQcpF3SHRBFaRM7Hy3N-KnClfJ2WDKwgCUMY61gp7PrgOt20WUlDlz-d8YZ2M8LeZgxNhCq3nEDl1aSn4AfwpdqSUqO1xGocr9l4ec-xYvEqQL-6MkmZni98BGawoqyvadlEUyVs6S/s4032/20231216_160047.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="4032" data-original-width="3024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaALLYN__PNNb-viH-H7wzC2AL8ha4EIFkDMU7CEs2lYF0dXCjU6MQcpF3SHRBFaRM7Hy3N-KnClfJ2WDKwgCUMY61gp7PrgOt20WUlDlz-d8YZ2M8LeZgxNhCq3nEDl1aSn4AfwpdqSUqO1xGocr9l4ec-xYvEqQL-6MkmZni98BGawoqyvadlEUyVs6S/w480-h640/20231216_160047.jpg" width="480" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>A harmonica for each key and then some.</i></td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div><h2 style="clear: both; text-align: left;">So, what about you?</h2><div style="text-align: left;">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! 😃😍</div><br /></div></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-46465319121744183212023-08-27T06:41:00.000+02:002023-08-27T06:41:08.632+02:00Känner du till begreppet "Intellektuell ödmjukhet" och sätten du kan vara biased på?<h3 style="text-align: left;">Läste tidningen "Modern psykologi" genom Readly</h3><p>Under semestern när jag var på Facebook så fick jag återkommande reklam för <a href="https://se.readly.com/" target="_blank">Readly</a>, 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...</p><p>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:</p><blockquote><p>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.</p></blockquote><p>Mark Learys, forskare och professor i psykologi och neurovetenskap vid Duke University definierar det som:</p><p></p><blockquote>I vilken utsträckning människor kan erkänna att deras övertygelser kan vara fel.</blockquote><p></p><p>Vad kan hända då, om den intellektuella ödmjukheten hos befolkningen är låg? Fredrik Livheim, psykolog och forskare i klinisk neurovetenskap säger:</p><p></p><blockquote>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.</blockquote><p></p><h3 style="text-align: left;">Bias</h3><p>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 <a href="https://www.scribbr.com/research-bias/overconfidence-bias/" target="_blank">Overconfidence bias</a> (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 "<a href="https://www.sosalarm.se/om-oss/pressrum/pressmeddelanden/2020/snart-infors-ai-stod-for-medicinska-vardbedomningar-pa-112/" target="_blank">Snart införs AI-stöd för medicinska vårdbedömningar på 112</a>". </p><p>Det här fick mig att tänka på en lista med 50<span style="background-color: white; color: #333333; font-family: "Segoe UI Emoji";"><span style="font-size: medium;">😱</span></span>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><p>På sidan <a href="https://www.titlemax.com/discovery-center/lifestyle/50-cognitive-biases-to-be-aware-of-so-you-can-be-the-very-best-version-of-you/">titlemax.com</a> kan du hitta nedanstående lista i text, men de har också en <a href="https://res.cloudinary.com/tmxfoc/images/f_auto,q_auto/v1649162872/titlemax/099372db-50-cognitive-biases-2_80per_298322eb4c/099372db-50-cognitive-biases-2_80per_298322eb4c.png" target="_blank">bildversion av samma lista</a> där varje bias har ett förtydligande exempel, vilket jag tycker gör rätt mycket för förståelsen.</p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Qz7iU4az26cxqixLh3cQVVq2KuqxjA6TJdceFYwoDDdz-i9FKS3oUZZPgeyNLj2qArrwvTsffoyowpqdG79JQrHa24nTVP7giSi_miW1CV0yhrl_ziAbiilpOlNguE9Jy_k2iqQTC1VICQa2_WVQHF8hY-oRc8iaWUOOQKS8onS0dvKD2zhykgYKQsD0/s468/Two%20bias.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="350" data-original-width="468" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Qz7iU4az26cxqixLh3cQVVq2KuqxjA6TJdceFYwoDDdz-i9FKS3oUZZPgeyNLj2qArrwvTsffoyowpqdG79JQrHa24nTVP7giSi_miW1CV0yhrl_ziAbiilpOlNguE9Jy_k2iqQTC1VICQa2_WVQHF8hY-oRc8iaWUOOQKS8onS0dvKD2zhykgYKQsD0/s16000/Two%20bias.png" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Två exempel på bilder av bias med förtydligande exempel </td></tr></tbody></table></p><p><span face=""Source Sans Pro", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"" style="background-color: white; color: #00529b; font-size: 1.625rem;">50 Types of Common Cognitive Biases</span></p><ol style="--tw-shadow: 0 0 #0000; background-color: white; border: 0px solid currentcolor; box-sizing: border-box; color: #22292f; font-family: "Source Sans Pro", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; list-style-image: initial; list-style-position: initial; margin: 1rem 0px 0px 1rem; padding: 0px 0px 0px 1rem;"><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Fundamental Attribution Error</span>: We judge others on their personality or fundamental character, but we judge ourselves on the situation.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Self-Serving Bias:</span> Our failures are situational, but our successes are our responsibility.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">In-Group Favoritism:</span> We favor people who are in our in-group as opposed to an out-group.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Bandwagon Effect: </span>Ideas, fads, and beliefs grow as more people adopt them.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Groupthink:</span> Due to a desire for conformity and harmony in the group, we make irrational decisions, often to minimize conflict.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Halo Effect:</span> 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.)</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Moral Luck</span>: Better moral standing happens due to a positive outcome; worse moral standing happens due to a negative outcome.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">False Consensus</span>: We believe more people agree with us than is actually the case.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Curse of Knowledge</span>: Once we know something, we assume everyone else knows it, too.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Spotlight Effect</span>: We overestimate how much people are paying attention to our behavior and appearance.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Availability Heuristic</span>: We rely on immediate examples that come to mind while making judgments.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Defensive Attribution</span>: As a witness who secretly fears being vulnerable to a serious mishap, we will blame the victim less if we relate to the victim.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Just-World Hypothesis:</span> We tend to believe the world is just; therefore, we assume acts of injustice are deserved.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Naïve Realism</span>: We believe that we observe objective reality and that other people are irrational, uninformed, or biased.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Naïve Cynicism</span>: We believe that we observe objective reality and that other people have a higher egocentric bias than they actually do in their intentions/actions.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Forer Effect (aka Barnum Effect)</span>: We easily attribute our personalities to vague statements, even if they can apply to a wide range of people.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Dunning-Kruger Effect</span>: The less you know, the more confident you are. The more you know, the less confident you are.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Anchoring</span>: We rely heavily on the first piece of information introduced when making decisions.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Automation Bias</span>: We rely on automated systems, sometimes trusting too much in the automated correction of actually correct decisions.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Google Effect (aka Digital Amnesia): </span>We tend to forget information that’s easily looked up in search engines.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Reactance:</span> We do the opposite of what we’re told, especially when we perceive threats to personal freedoms.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Confirmation Bias</span>: We tend to find and remember information that confirms our perceptions.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Backfire Effect</span>: Disproving evidence sometimes has the unwarranted effect of confirming our beliefs.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Third-Person Effect</span>: We believe that others are more affected by mass media consumption than we ourselves are.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Belief Bias</span>: We judge an argument’s strength not by how strongly it supports the conclusion but how plausible the conclusion is in our own minds.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Availability Cascade: </span>Tied to our need for social acceptance, collective beliefs gain more plausibility through public repetition.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Declinism</span>: We tent to romanticize the past and view the future negatively, believing that societies/institutions are by and large in decline.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Status Quo Bias</span>: We tend to prefer things to stay the same; changes from the baseline are considered to be a loss.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Sunk Cost Fallacy (aka Escalation of Commitment)</span>: We invest more in things that have cost us something rather than altering our investments, even if we face negative outcomes.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Gambler’s Fallacy</span>: We think future possibilities are affected by past events.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Zero-Risk Bias</span>: We prefer to reduce small risks to zero, even if we can reduce more risk overall with another option.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Framing Effect: </span>We often draw different conclusions from the same information depending on how it’s presented.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Stereotyping</span>: We adopt generalized beliefs that members of a group will have certain characteristics, despite not having information about the individual.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Outgroup Homogeneity Bias</span>: We perceive out-group members as homogeneous and our own in-groups as more diverse.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Authority Bias</span>: We trust and are more often influenced by the opinions of authority figures.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Placebo Effect</span>: If we believe a treatment will work, it often will have a small physiological effect.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Survivorship Bias</span>: We tend to focus on those things that survived a process and overlook ones that failed.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Tachypsychia</span>: Our perceptions of time shift depending on trauma, drug use, and physical exertion.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Law of Triviality (aka “Bike-Shedding”)</span>: We give disproportionate weight to trivial issues, often while avoiding more complex issues.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Zeigarnik Effect</span>: We remember incomplete tasks more than completed ones.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">IKEA Effect</span>: We place higher value on things we partially created ourselves.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Ben Franklin Effect</span>: 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 <em style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;">received</em> a favor from that person.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Bystander Effect</span>: The more other people are around, the less likely we are to help a victim.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Suggestibility</span>: We, especially children, sometimes mistake ideas suggested by a questioner for memories.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">False Memory</span>: We mistake imagination for real memories.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Cryptomnesia</span>: We mistake real memories for imagination.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Clustering Illusion</span>: We find patterns and “clusters” in random data.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Pessimism Bias</span>: We sometimes overestimate the likelihood of bad outcomes.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Optimism Bias</span>: We sometimes are over-optimistic about good outcomes.</li><li style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box;"><span style="--tw-shadow: 0 0 #0000; border: 0px solid currentcolor; box-sizing: border-box; font-weight: 700;">Blind Spot Bias</span>: We don’t think we have bias, and we see it others more than ourselves.</li></ol><div><span face="Source Sans Pro, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji" style="color: #22292f;"><br /></span></div><div><span face="Source Sans Pro, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji" style="color: #22292f;">Så nu har du också material för att passa på att lära dig om bias och öka din intellektuella ödmjukhet en aning </span><span style="background-color: white; color: #333333; font-family: "Segoe UI Emoji";"><span style="font-size: medium;">😃</span></span></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-43764232406388730312023-08-20T09:19:00.002+02:002023-08-20T09:26:46.128+02:00Windows 11 update hijacks the Print Screen button (from Lightshot)If you install the Windows 11 update <a href="https://blogs.windows.com/windows-insider/2023/04/07/announcing-windows-11-insider-preview-build-22621-1546-and-22624-1546/" target="_blank">KB5025310</a> your print screen button will be assigned to the Snipping Tool in Windows. I have the screen capturing tool <a href="https://app.prntscr.com/en/" target="_blank">Lightshot </a>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.<div><br /></div><div>Open "Accessibility keyboard settings"</div><div><br /></div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirOqyiAT3TN4EsyNQz8qpGSU6fDguCpz7IgSS4k-0mz3jTK8kVys6sw8WXen-0qKWoJSI5oFFjYSkpQUry09EItYLbDIhj2CSNO8m5XHcflRGlqCGm0KDhmTw2xI1pnI0gIlNWk6Dt_1uRtGhn_GGgTvo7LOQiQQzUl-tH8pRSnOYgZOdlV84MALZhHxoX/s357/Screenshot%202023-08-20%20085237.png" imageanchor="1"><img border="0" data-original-height="243" data-original-width="357" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirOqyiAT3TN4EsyNQz8qpGSU6fDguCpz7IgSS4k-0mz3jTK8kVys6sw8WXen-0qKWoJSI5oFFjYSkpQUry09EItYLbDIhj2CSNO8m5XHcflRGlqCGm0KDhmTw2xI1pnI0gIlNWk6Dt_1uRtGhn_GGgTvo7LOQiQQzUl-tH8pRSnOYgZOdlV84MALZhHxoX/s16000/Screenshot%202023-08-20%20085237.png" /></a></div><div style="text-align: center;"><br /></div><div style="text-align: left;">Set "Use the Print screen key to open Snipping Tool" to "Off"</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3keZGsP6wEEyHmR49KXgjhjwnid60QQgHPmglknX2H94_j-Ks_V9Ded1T1PxGNH2FrGj0itO8CEKMjDgkTI8vRlAVJuJgSTQFywmnemcwIQSu-d3ua_6Xz4m1tlqtEX_fCie7eDi3IKA5BpZ-93-8mS91TSLqesp3O_QoGy4XaU1A8KF7hd1qm9fL-nLj/s500/Screenshot_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="389" data-original-width="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3keZGsP6wEEyHmR49KXgjhjwnid60QQgHPmglknX2H94_j-Ks_V9Ded1T1PxGNH2FrGj0itO8CEKMjDgkTI8vRlAVJuJgSTQFywmnemcwIQSu-d3ua_6Xz4m1tlqtEX_fCie7eDi3IKA5BpZ-93-8mS91TSLqesp3O_QoGy4XaU1A8KF7hd1qm9fL-nLj/s16000/Screenshot_1.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div>Done!</div><div><br /></div><div>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.</div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-58096271977358461582023-08-09T16:33:00.003+02:002023-08-12T13:07:23.776+02:00Do you know the difference between a Fake, a Spy, a Stub, a Dummy and a Mock when writing unit tests?<h2 style="clear: both; text-align: left;">Published at last</h2><div class="separator" style="clear: both; text-align: left;">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. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">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 <a href="https://martinfowler.com/bliki/TestDouble.html">https://martinfowler.com/bliki/TestDouble.html</a> (which I think is a great summary) and publish it.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both;"><ul style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: inherit; list-style: square; margin: 0px 0px 0px 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;"><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><b style="background: transparent; border: 0px; box-sizing: inherit; color: #303633; font-family: Lora, serif; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Dummy</b><span style="color: #303633; font-family: Lora, serif;"> </span>objects are passed around but never actually used. Usually they are just used to fill parameter lists.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><b style="background: transparent; border: 0px; box-sizing: inherit; color: #303633; font-family: Lora, serif; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Fake</b><span style="color: #303633; font-family: Lora, serif;"> </span>objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an<span style="color: #303633; font-family: Lora, serif;"> </span><a href="https://martinfowler.com/bliki/InMemoryTestDatabase.html" style="background: transparent; border-bottom-style: solid; border-color: initial; border-image: initial; border-left-style: initial; border-right-style: initial; border-top-style: initial; border-width: 0px 0px thin; box-sizing: inherit; color: #303633; font-family: Lora, serif; font-size: 16px; margin: 0px; outline: 0px; padding: 0px 0px 1px; text-decoration-line: none; vertical-align: baseline;">InMemoryTestDatabase</a><span style="color: #303633; font-family: Lora, serif;"> </span>is a good example).</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><b style="background: transparent; border: 0px; box-sizing: inherit; color: #303633; font-family: Lora, serif; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Stubs</b><span style="color: #303633; font-family: Lora, serif;"> </span>provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><b style="background: transparent; border: 0px; box-sizing: inherit; color: #303633; font-family: Lora, serif; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Spies</b><span style="color: #303633; font-family: Lora, serif;"> </span>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.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><b style="background: transparent; border: 0px; box-sizing: inherit; color: #303633; font-family: Lora, serif; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Mocks</b><span style="background-color: transparent; color: #303633; font-family: Lora, serif; font-size: 16px;"> </span>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.</li></ul><div><span style="color: #303633; font-family: Lora, serif;"><br /></span></div><h2 style="text-align: left;">The old draft</h2></div><div class="separator" style="clear: both; text-align: left;">
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 <a href="http://xunitpatterns.com/Test%20Double.html">http://xunitpatterns.com/Test%20Double.html</a>, that I think describes the types and their differences in a clear way that probably can be useful for us.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The page is on a <a href="http://xunitpatterns.com/index.html">webified version</a> of the book <a href="https://www.amazon.co.uk/dp/0131495054">xUnit Test Patterns: Refactoring Test Code</a> that seem to be a great book that I have missed out on up until now.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh07ZPZougjWEIoWP2moMeELkfoDS7AbKfQxIviJ3Ur7vSTOX4QM5t5kHr2MY4p1-wxAl1PaADaiR_9LnZiU8weN1YQ3IA1hsEu1l4e09WTGGZ7JuSDqWYBuZ8gfqZ6enkqgIcCh-hNFIjB/s1600/test+double+structure.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="427" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh07ZPZougjWEIoWP2moMeELkfoDS7AbKfQxIviJ3Ur7vSTOX4QM5t5kHr2MY4p1-wxAl1PaADaiR_9LnZiU8weN1YQ3IA1hsEu1l4e09WTGGZ7JuSDqWYBuZ8gfqZ6enkqgIcCh-hNFIjB/s1600/test+double+structure.png" /></a></div>
<br />
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: <a href="http://blog.ploeh.dk/2013/10/23/mocks-for-commands-stubs-for-queries/">Mocks for Commands, Stubs for Queries</a><br />
<br />
In his post <a href="https://www.martinfowler.com/articles/mocksArentStubs.html">Mocks Aren't Stubs</a>, 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.<br />
<br />
<br />
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 :)Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com1tag:blogger.com,1999:blog-1674838990122718975.post-454961420841232652023-08-05T20:02:00.009+02:002023-08-05T20:08:13.450+02:00Skapa en AI-modell som styr en bil i AWS DeepRacer<p></p><h3 style="text-align: left;">AWS DeepRacer</h3><div class="separator" style="clear: both; text-align: left;">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.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/T8y-pQ14qGg" width="320" youtube-src-id="T8y-pQ14qGg"></iframe></div><br /><div class="separator" style="clear: both; text-align: left;">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.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><h3 style="clear: both; text-align: left;">Skapa en modell</h3><div class="separator" style="clear: both; text-align: left;">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.</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq2ahK2BeIKZhsPt7cJ1i-N1zRVITpFtMP1j4lAjMwZMzbNtegiSRPtF8htG1xect4O5P957gLZfHltRETZrqGt58KrXl-vc8ZfajP6YAzSaAoILBQ-O9MNVAvNV5ut-aCZ3YFy5N90Kz-vxeyplYVnLLwMhtbkyFs_DKMmdBDPY38LSu-F8DaY-Lqw7hI/s623/Screenshot%202023-08-01%20144029.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="623" data-original-width="531" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq2ahK2BeIKZhsPt7cJ1i-N1zRVITpFtMP1j4lAjMwZMzbNtegiSRPtF8htG1xect4O5P957gLZfHltRETZrqGt58KrXl-vc8ZfajP6YAzSaAoILBQ-O9MNVAvNV5ut-aCZ3YFy5N90Kz-vxeyplYVnLLwMhtbkyFs_DKMmdBDPY38LSu-F8DaY-Lqw7hI/s16000/Screenshot%202023-08-01%20144029.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">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".</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWppHMwwHdGrUdw8pXRWq02bS-PqN3WM1W9VlFvEN5aHhYEXIMYpkg0F3BOAvKJPElz0-zNt3ZluhXVTBkDuuvb56i5Vy2OzTvDAwZ0zRKOUSMO5t2Oh1boyxdtP8L47IaA2JYfKdsbHlW0Mgnq5U3iUi043b2xlhiK96ESvAtzMKR96IJYJu9XMPy-GcN/s864/Screenshot%202023-08-01%20151455.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="864" data-original-width="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWppHMwwHdGrUdw8pXRWq02bS-PqN3WM1W9VlFvEN5aHhYEXIMYpkg0F3BOAvKJPElz0-zNt3ZluhXVTBkDuuvb56i5Vy2OzTvDAwZ0zRKOUSMO5t2Oh1boyxdtP8L47IaA2JYfKdsbHlW0Mgnq5U3iUi043b2xlhiK96ESvAtzMKR96IJYJu9XMPy-GcN/s16000/Screenshot%202023-08-01%20151455.png" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">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".</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRzxPK0ibUpt92kYUQrJFLdJE4Zg7fLgpqPOoe6mZE4ix0fY3w4I-SJ-Sbd4v5AtH-jBB_BzRBroDd9zoyN0v6d4TTDU6RXVkW-41kwOR04OP1u3gusLOnHW6lqPJPa8JqhGLqKYCB6Mpz4e76UZNTNnxrpjLw7r5xIS7wiHsVim1RkgIMz3dlb9YVYd9J/s820/Screenshot%202023-08-01%20152105.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="525" data-original-width="820" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRzxPK0ibUpt92kYUQrJFLdJE4Zg7fLgpqPOoe6mZE4ix0fY3w4I-SJ-Sbd4v5AtH-jBB_BzRBroDd9zoyN0v6d4TTDU6RXVkW-41kwOR04OP1u3gusLOnHW6lqPJPa8JqhGLqKYCB6Mpz4e76UZNTNnxrpjLw7r5xIS7wiHsVim1RkgIMz3dlb9YVYd9J/s16000/Screenshot%202023-08-01%20152105.png" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div>Modellen skapas med en wizard i fem steg. Före alla steg får man lite info om träningen.<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJRa1mFTc6mQrnqLv3fM8pEi1uSsjrSLGIKm2YIyOz_Pit5fNjIb407BGtnrrYCAMe3Tg-nB3dRmxJh-lYn5YH0zpN0bJq0bINA4LzaIr15mEWADZAT5rcRjkcgnAqYcc5UK3MqzwSlqBlp6iD6o44D4jYphHBfD-UG_yAE2I1OTAlrivT2SvMMumFmAd_/s854/Screenshot%202023-08-01%20152859.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="533" data-original-width="854" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJRa1mFTc6mQrnqLv3fM8pEi1uSsjrSLGIKm2YIyOz_Pit5fNjIb407BGtnrrYCAMe3Tg-nB3dRmxJh-lYn5YH0zpN0bJq0bINA4LzaIr15mEWADZAT5rcRjkcgnAqYcc5UK3MqzwSlqBlp6iD6o44D4jYphHBfD-UG_yAE2I1OTAlrivT2SvMMumFmAd_/s16000/Screenshot%202023-08-01%20152859.png" /></a></div><br /><p><b>Steg 1:</b> Val av modellnamn och bana</p><p>I första steget får du namnge modellen och om du vill även ange en beskrivning av den.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_bAmbTd3tt6KRgrexD-EXj_7HoYULwl64qB2022ERaTsgxYCnrFeIWq14NUA5-kPrBd_0-0Qc9OvyXNO1PnnvhfDKSWbBdA6c6xVexR0hJdDLoMl01c4NIP3qeQvAWsNM8ia_Oi3kO2ml4-ciL_krDYDYD_u3P9k3wPQQtP6SpBDCK9VlvjakZYCEAI3w/s424/Screenshot%202023-08-01%20153358.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="345" data-original-width="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_bAmbTd3tt6KRgrexD-EXj_7HoYULwl64qB2022ERaTsgxYCnrFeIWq14NUA5-kPrBd_0-0Qc9OvyXNO1PnnvhfDKSWbBdA6c6xVexR0hJdDLoMl01c4NIP3qeQvAWsNM8ia_Oi3kO2ml4-ciL_krDYDYD_u3P9k3wPQQtP6SpBDCK9VlvjakZYCEAI3w/s16000/Screenshot%202023-08-01%20153358.png" /></a></div><br /><p>Det finns 61 banor att välja mellan att träna modellen på.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-n1wQfePm_bwAB23ofTNm4k0_UPxY2VfZLmTDa6GlQvJJ4-Z3z842LPymGvtjbgAMKB4R8-5MNrmYKT29DnI_5xDP7a8K_UCqJQAdioqMHO5Cij5ucFk8UsvbMzJBgiGfVSdiR02xPzLWzlXKpb0UY5I7zMt8MpEkoPPrKDpoqD-dLeQ8o52yZEPetU6x/s594/Screenshot%202023-08-01%20153701.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="565" data-original-width="594" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-n1wQfePm_bwAB23ofTNm4k0_UPxY2VfZLmTDa6GlQvJJ4-Z3z842LPymGvtjbgAMKB4R8-5MNrmYKT29DnI_5xDP7a8K_UCqJQAdioqMHO5Cij5ucFk8UsvbMzJBgiGfVSdiR02xPzLWzlXKpb0UY5I7zMt8MpEkoPPrKDpoqD-dLeQ8o52yZEPetU6x/s16000/Screenshot%202023-08-01%20153701.png" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">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".</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNTq0S60E7serPdDlS2up2kC9DFPzGl57cpHD0r_WBFFdT5iHGNSBpzcsaGn6ui2YboPAEFiVFym1AyzZagVIX8QfmtXZGvF5th_uHmVaGu_iW_5C39u55Q1XpAAIslClzsP018PofCQrbrEyboyymA_kiYDKYq-QrIUgcChfM9g5J8AptBnrVuQjgTmtW/s602/Screenshot%202023-08-01%20153917.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="602" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNTq0S60E7serPdDlS2up2kC9DFPzGl57cpHD0r_WBFFdT5iHGNSBpzcsaGn6ui2YboPAEFiVFym1AyzZagVIX8QfmtXZGvF5th_uHmVaGu_iW_5C39u55Q1XpAAIslClzsP018PofCQrbrEyboyymA_kiYDKYq-QrIUgcChfM9g5J8AptBnrVuQjgTmtW/s16000/Screenshot%202023-08-01%20153917.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><b>Steg 2:</b> Val av tävlingstyp och träningsalgoritm<div><br /></div><div>Det finns tre olika tävlingstyper att välja mellan, just nu var det "Time trial" som gällde.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXq53hH3L3Yixt1wuhvTPgnqNWN2VOcaYYLYwQRspGHdVjqLyUNYXAsLA_wR7NNxr3bGZdBimcs6_20cn732S4HyMtYCicq_NfIu0CY6EQnWylIL03TFCtphe9h1jrGTj7p0PXVVo4jVzXywtjWummJ4MBJFmBEr5eMkRIqOO-vnO_46cCPrTRHHN1GjlT/s599/Screenshot%202023-08-01%20160118.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="599" data-original-width="597" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXq53hH3L3Yixt1wuhvTPgnqNWN2VOcaYYLYwQRspGHdVjqLyUNYXAsLA_wR7NNxr3bGZdBimcs6_20cn732S4HyMtYCicq_NfIu0CY6EQnWylIL03TFCtphe9h1jrGTj7p0PXVVo4jVzXywtjWummJ4MBJFmBEr5eMkRIqOO-vnO_46cCPrTRHHN1GjlT/s16000/Screenshot%202023-08-01%20160118.png" /></a></div><br /><div>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.</div><div><ul style="text-align: left;"><li>PPO<br /><a href="https://en.wikipedia.org/wiki/Proximal_Policy_Optimization" target="_blank">Proximal Policy Optimization</a></li><li>SAC<br /><a href="https://spinningup.openai.com/en/latest/algorithms/sac.html" target="_blank">Soft Actor Critic</a></li></ul></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpgCaDy3xhrFaPqf7WDxHaF34dU1v4_b7E7f_o2Pxw2iEt03HRMsLRLCv1MFDzWeNZc4UBPBKOLF4iDPr9fn-HzPKFSrXZAxdsF15ypL83XMLyk38pQAqN9z8ZfqeSDkPT683MEiQVP3Jumwf0NhTeT6RgAkqBUTbNiW8Ud1ouJFFdjC4W5fHrmjaoGEoc/s586/Screenshot%202023-08-01%20162503.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="291" data-original-width="586" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpgCaDy3xhrFaPqf7WDxHaF34dU1v4_b7E7f_o2Pxw2iEt03HRMsLRLCv1MFDzWeNZc4UBPBKOLF4iDPr9fn-HzPKFSrXZAxdsF15ypL83XMLyk38pQAqN9z8ZfqeSDkPT683MEiQVP3Jumwf0NhTeT6RgAkqBUTbNiW8Ud1ouJFFdjC4W5fHrmjaoGEoc/s16000/Screenshot%202023-08-01%20162503.png" /></a></div><br /><div><p>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.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEbJA3GizkAFLd4ko8GPXItDd2OmtKr99W5ZoQogdRilXIOvzYUwrGRDOETi43dC-TRc353QyTkIZ4f_8FBEJMkKsFYueTDKjpijtu2gQq_MA_P6QVhYgUc3S6VlGULU4x1wIGH58gl0yqP0D2MprKgpASNyMZC7QSiRXNB9yMX4s7n6j8BJqHXYyLD0t5/s813/Screenshot%202023-08-01%20163242.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="813" data-original-width="564" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEbJA3GizkAFLd4ko8GPXItDd2OmtKr99W5ZoQogdRilXIOvzYUwrGRDOETi43dC-TRc353QyTkIZ4f_8FBEJMkKsFYueTDKjpijtu2gQq_MA_P6QVhYgUc3S6VlGULU4x1wIGH58gl0yqP0D2MprKgpASNyMZC7QSiRXNB9yMX4s7n6j8BJqHXYyLD0t5/s16000/Screenshot%202023-08-01%20163242.png" /></a></div><br /><p><b>Steg 3:</b> Definiera vad bilen kan göra, d v s dess Action space</p><p>Först får man lite info igen.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYISjEffyoiaXSKU2v5mcv7_2IYpxc_iRIQncSOLB3WIUM2eaiOfzkalo8tBau2-e4ZYnSnVsCSBo2hUIm0ZByqcNiDxKx2D6RhtCDZ5iN_DM1H_-sciOpsb7_pV-EPcQgFGRsxFiJPXfWh2cCaI-Qu59iVdF-c0z_jZUA9Db7a8yJ1R1ilY9OAL5ZCg1m/s556/Screenshot%202023-08-01%20163732.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="497" data-original-width="556" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYISjEffyoiaXSKU2v5mcv7_2IYpxc_iRIQncSOLB3WIUM2eaiOfzkalo8tBau2-e4ZYnSnVsCSBo2hUIm0ZByqcNiDxKx2D6RhtCDZ5iN_DM1H_-sciOpsb7_pV-EPcQgFGRsxFiJPXfWh2cCaI-Qu59iVdF-c0z_jZUA9Db7a8yJ1R1ilY9OAL5ZCg1m/s16000/Screenshot%202023-08-01%20163732.png" /></a></div><br /><p>Sen ska man välja mellan "Continuous" eller "Discrete" action space.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-mgV3MNj6UH8S2rHy_V1gysOvtOpP3EqHfc2iW7PqpEv1_DDFsOiXz68iJCvBiVjthZAhQ6zwazrfPE1YwH9WkZCt9-MiVRHKceLIMcT_IuS-BJuESPsr3t7R2dxla5SmSOqZlXmYSLjLwQslL84KwIQbaSszGkVnYgRVPlNgFOLg9fjudQKkA8Js37Ow/s561/Screenshot%202023-08-01%20163954.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="561" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-mgV3MNj6UH8S2rHy_V1gysOvtOpP3EqHfc2iW7PqpEv1_DDFsOiXz68iJCvBiVjthZAhQ6zwazrfPE1YwH9WkZCt9-MiVRHKceLIMcT_IuS-BJuESPsr3t7R2dxla5SmSOqZlXmYSLjLwQslL84KwIQbaSszGkVnYgRVPlNgFOLg9fjudQKkA8Js37Ow/s16000/Screenshot%202023-08-01%20163954.png" /></a></div><br /><p>Väljer man "Continuous" så kan man i nästa steg ange max styrvinklar och min/max hastighet.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7aDYUI1gkSW7wkOG4YrYk1sOe1YCK4mXfIxtHreeQjSiB8macVhlZQkfCy5Q5P-aD_RBB0rr1SgEPXZ4J6BSD7iCB1sDdI11BQyBHcS0EiXGGL1Ym5j3xFuaY2Ty2sfQoi0KWo6Xw4GTM2VcJJrw2e4b475fYLAl1XM8dAmMQ9Mmvy8w4grfhM66QxZsL/s605/Screenshot%202023-08-01%20164507.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="194" data-original-width="605" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7aDYUI1gkSW7wkOG4YrYk1sOe1YCK4mXfIxtHreeQjSiB8macVhlZQkfCy5Q5P-aD_RBB0rr1SgEPXZ4J6BSD7iCB1sDdI11BQyBHcS0EiXGGL1Ym5j3xFuaY2Ty2sfQoi0KWo6Xw4GTM2VcJJrw2e4b475fYLAl1XM8dAmMQ9Mmvy8w4grfhM66QxZsL/s16000/Screenshot%202023-08-01%20164507.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRQQJruvzoTrCyUf951ui398ew_XV-3b0JtecTu8yFEx3N6v_x3FJbVT2AiT9sVMDEiouI3bZBwMMwIAUq276sD8eViSegpS1hmEMrTchfxKUxyqe0QH_k5LWhllCOmUyW0sgaAjfSsx4dWwfxUKv8kXZbX4vFaax53lhAhYVmAFwRj_a99YW0jW2-u2qw/s584/Screenshot%202023-08-01%20164534.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="584" data-original-width="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRQQJruvzoTrCyUf951ui398ew_XV-3b0JtecTu8yFEx3N6v_x3FJbVT2AiT9sVMDEiouI3bZBwMMwIAUq276sD8eViSegpS1hmEMrTchfxKUxyqe0QH_k5LWhllCOmUyW0sgaAjfSsx4dWwfxUKv8kXZbX4vFaax53lhAhYVmAFwRj_a99YW0jW2-u2qw/s16000/Screenshot%202023-08-01%20164534.png" /></a></div><div><br /></div><div><br /></div>De val man gjort visas också visuellt. Man kan även klicka direkt på en av pilarna och dra den hur man vill ha det.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmPWQmtiU5THv8rzvhJ4GhX4tPow2e5o8454xM2kIV5CdhmkJ5tJzBRp3bUM4ApMIWfy_iy7FPLH1fK57WKr13XKZ46ExtYmScme0r9oknS-kdCy0BRzIPQAIbPYln_BVqqn5zYaSalcFVjN5TK0eBFwdgkEV78_cn0oTuVjrHsOfQ0s5pPadHxPt00-lC/s569/Screenshot%202023-08-01%20164631.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="352" data-original-width="569" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmPWQmtiU5THv8rzvhJ4GhX4tPow2e5o8454xM2kIV5CdhmkJ5tJzBRp3bUM4ApMIWfy_iy7FPLH1fK57WKr13XKZ46ExtYmScme0r9oknS-kdCy0BRzIPQAIbPYln_BVqqn5zYaSalcFVjN5TK0eBFwdgkEV78_cn0oTuVjrHsOfQ0s5pPadHxPt00-lC/s16000/Screenshot%202023-08-01%20164631.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>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.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwp_KTXVR8DKn6OPOiUSCVY2iHW4Uk5UbtKxQ4a5Yhu76N1VaisV6xKF_ILcamAT89zzETnX5FPnPF5mWh--6Gls7iNxGffMO8oxnm0yy0W1GJY2llcrAPWuN4vC8U8Q8z3i3u_El4A_bsGTXceC_WwgCBPiEJ34kiZG0BTazJy7Pn10Sm4JjFaArgMtmH/s592/Screenshot%202023-08-01%20165243.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="548" data-original-width="592" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwp_KTXVR8DKn6OPOiUSCVY2iHW4Uk5UbtKxQ4a5Yhu76N1VaisV6xKF_ILcamAT89zzETnX5FPnPF5mWh--6Gls7iNxGffMO8oxnm0yy0W1GJY2llcrAPWuN4vC8U8Q8z3i3u_El4A_bsGTXceC_WwgCBPiEJ34kiZG0BTazJy7Pn10Sm4JjFaArgMtmH/s16000/Screenshot%202023-08-01%20165243.png" /></a></div><br /><div>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.</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkV6y7pC3pNqaWJTxmDwWei6SStyHLUHXtSl7M4-IlSmzWePa7Uc5UFPQF-BImnOifPhXKU7FTeQCOTI1Hp91hQudnk_cwUddagt9JOy0_81wo7nr_PVVM78i3dMSXhnxIcSPqf0HK_fadLsQXB0DP0OxmEkTYwVg2f2NSFXVrL7WYMf4FoPNgFkaCKT4V/s635/Screenshot%202023-08-01%20165951.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="620" data-original-width="635" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkV6y7pC3pNqaWJTxmDwWei6SStyHLUHXtSl7M4-IlSmzWePa7Uc5UFPQF-BImnOifPhXKU7FTeQCOTI1Hp91hQudnk_cwUddagt9JOy0_81wo7nr_PVVM78i3dMSXhnxIcSPqf0HK_fadLsQXB0DP0OxmEkTYwVg2f2NSFXVrL7WYMf4FoPNgFkaCKT4V/s16000/Screenshot%202023-08-01%20165951.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6l5ddEsO6itM_oLNFrHX-z1QkJDLMKtDx4j2tuVviLwhk20KdTMzhTGJtlwzS72I23DMnFjFjjzZOVZDEb31inIqtmR3dlwpo0LtTpa1xMhXzK6u3aiYOFtb9COI4vpdc3fMfWU2_9TbYsJsX_ncnIWp5o-E4dkGcdiUr0BMwxTMiOPLD-ymCI8hbToYY/s767/Screenshot%202023-08-01%20170106.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="767" data-original-width="599" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6l5ddEsO6itM_oLNFrHX-z1QkJDLMKtDx4j2tuVviLwhk20KdTMzhTGJtlwzS72I23DMnFjFjjzZOVZDEb31inIqtmR3dlwpo0LtTpa1xMhXzK6u3aiYOFtb9COI4vpdc3fMfWU2_9TbYsJsX_ncnIWp5o-E4dkGcdiUr0BMwxTMiOPLD-ymCI8hbToYY/s16000/Screenshot%202023-08-01%20170106.png" /></a></div><br /><p>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.</p><p><b><br /></b></p><p><b>Steg 4:</b> Välja fordon</p><p>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.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiwJ7C2u4kZ9EMsNHvIvNdJLcth2zOjc5h4CyYYczIHTSh61aZ85Ftd-_HyAzMdQCgfPlGW11nZRPerNEliaINtUYkR01axg7D7g1knWzNWsYjH7OERBnprwwWzCF23bK10TTx0uP51P4Zoadyw0dWvExPzRw30sIAcSfyEJ-1RIaLh6OaKggJeUz3A0p0/s654/Screenshot%202023-08-01%20171010.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="520" data-original-width="654" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiwJ7C2u4kZ9EMsNHvIvNdJLcth2zOjc5h4CyYYczIHTSh61aZ85Ftd-_HyAzMdQCgfPlGW11nZRPerNEliaINtUYkR01axg7D7g1knWzNWsYjH7OERBnprwwWzCF23bK10TTx0uP51P4Zoadyw0dWvExPzRw30sIAcSfyEJ-1RIaLh6OaKggJeUz3A0p0/s16000/Screenshot%202023-08-01%20171010.png" /></a></div><br /><p><b>Steg 5:</b> Belöningsfunktionen</p><p>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.</p><p>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.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj6CNguUaZnTSCC88nfOFI_8q62OQ5SqXhDeUiRpoVLZv3yvJmapPEajz_-W3Gb6bBMbAVTDDUCm2mSYLaMxu2AP-BK5hIu9rKWWay0XxmA-VIgTxLWxttDNy8oQJGv6cI_DPk48el63VhUPZpl0nQNUhZlkmRX3ud4e32wH83OWPgm87qKup4xdzLbmVw/s775/Screenshot%202023-08-01%20171347.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="604" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj6CNguUaZnTSCC88nfOFI_8q62OQ5SqXhDeUiRpoVLZv3yvJmapPEajz_-W3Gb6bBMbAVTDDUCm2mSYLaMxu2AP-BK5hIu9rKWWay0XxmA-VIgTxLWxttDNy8oQJGv6cI_DPk48el63VhUPZpl0nQNUhZlkmRX3ud4e32wH83OWPgm87qKup4xdzLbmVw/s16000/Screenshot%202023-08-01%20171347.png" /></a></div><br /><p></p><p></p></div><div>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 <a href="https://docs.aws.amazon.com/deepracer/latest/developerguide/deepracer-reward-function-input.html" target="_blank">här</a>):</div><div><ul style="text-align: left;"><li>"all_wheels_on_track"<br />Boolean<br />flag to indicate if the agent is on the track<br /><br /></li><li>"x"<br />float <br />agent's x-coordinate in meters<br /><br /></li><li>"y"<br />float <br />agent's y-coordinate in meters <br /><br /></li><li>"closest_objects"<br />[int, int] <br />zero-based indices of the two closest objects to the agent's current position of (x, y). <br /><br /></li><li>"closest_waypoints"<br />[int, int]<br />indices of the two nearest waypoints. <br /><br /></li><li>"distance_from_center"<br />float<br />distance in meters from the track center <br /><br /></li><li>"is_crashed"<br />Boolean<br />Boolean flag to indicate whether the agent has crashed. <br /><br /></li><li>"is_left_of_center"<br />Boolean<br />Flag to indicate if the agent is on the left side to the track center or not.<br /><br /></li><li>"is_offtrack"<br />Boolean<br />Boolean flag to indicate whether the agent has gone off track.<br /><br /></li><li>"is_reversed"<br />Boolean<br />flag to indicate if the agent is driving clockwise (True) or counter clockwise (False). <br /><br /></li><li>"heading"<br />float<br />agent's yaw in degrees <br /><br /></li><li>"objects_distance"<br />[float, ] <br />list of the objects' distances in meters between 0 and track_length in relation to the starting line. <br /><br /></li><li>"objects_heading"<br />[float, ]<br />list of the objects' headings in degrees between -180 and 180. <br /><br /></li><li>"objects_left_of_center"<br />[Boolean, ]<br />list of Boolean flags indicating whether elements' objects are left of the center (True) or not (False). <br /><br /></li><li>"objects_location"<br />[(float, float),]<br />list of object locations [(x,y), ...]. <br /><br /></li><li>"objects_speed"<br />[float, ]<br />list of the objects' speeds in meters per second. <br /><br /></li><li>"progress"<br />float<br />percentage of track completed<br /><br /></li><li>"speed"<br />float<br />agent's speed in meters per second (m/s) <br /><br /></li><li>"steering_angle"<br />float<br />agent's steering angle in degrees<br /><br /></li><li>"steps"<br />int<br />number steps completed<br /><br /></li><li>"track_length"<br />float<br />track length in meters.<br /><br /></li><li>"track_width"<br />float<br />width of the track <br /><br /></li><li>"waypoints"<br />[(float, float), ]<br />list of (x,y) as milestones along the track center</li></ul><div><br /></div></div><div><a href="https://github.com/carlbjorknas/djupracer" target="_blank">Här </a>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.</div><div><br /></div><div>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.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkvGd0Uo0HMABCA-ib1lRvkO9EL-SV_R-5G1HEPM8cQO10VbXPiZLyU8UevtchWkFBFtciZPIttTzwmcrNawF6FTWeC7Jz__h4tDx0Cv2-isEmwHJhKrB44hFyTL4GYTSFUlSAP577dRtzUFlx4cZNbWL2bMhTvFK21Y1vFE30wr8xWub77_e2cWzH2jv1/s659/Screenshot%202023-08-05%20193559.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="295" data-original-width="659" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkvGd0Uo0HMABCA-ib1lRvkO9EL-SV_R-5G1HEPM8cQO10VbXPiZLyU8UevtchWkFBFtciZPIttTzwmcrNawF6FTWeC7Jz__h4tDx0Cv2-isEmwHJhKrB44hFyTL4GYTSFUlSAP577dRtzUFlx4cZNbWL2bMhTvFK21Y1vFE30wr8xWub77_e2cWzH2jv1/s16000/Screenshot%202023-08-05%20193559.png" /></a></div><div><br /></div><div><br /></div>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.<br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDIX1ktx9dmIAL3gQWe-vdpOgLGLdTOMzcy-Z6tnmkFTBDR89qeEDhc5cGSY6hSjT-dUyVv825fOcgsXpkHORAVfwfvmx8wQ1_wOLtzMpBC741XPr5zfaxxR4xWiSQslBpSiWq0xAp9t5IBOx-KQQUBD1E3Z1H5_EFQZTnOX4AryyZx2u9m_JH24QpywZ-/s653/Screenshot%202023-08-05%20193636.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="232" data-original-width="653" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDIX1ktx9dmIAL3gQWe-vdpOgLGLdTOMzcy-Z6tnmkFTBDR89qeEDhc5cGSY6hSjT-dUyVv825fOcgsXpkHORAVfwfvmx8wQ1_wOLtzMpBC741XPr5zfaxxR4xWiSQslBpSiWq0xAp9t5IBOx-KQQUBD1E3Z1H5_EFQZTnOX4AryyZx2u9m_JH24QpywZ-/s16000/Screenshot%202023-08-05%20193636.png" /></a></div><div><br /></div>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.<br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiCUasgjiomax-srnnO3GtH8wlSA-PPRI8lEw1aUYFDVy4J6UUXg4I02fdEHb0CBvao7S-Qq3u7gtDIHqy5A8P_7IVnD6Dg2QXHjGe37cTO0LWAFyqJNyI1zbT6MSvzq_YWIiefRUULUDybpzJGesDEr8Cfjr7tsR6TMH-ZZPvVW8oUitSWzOd0dR9Chjk/s343/Screenshot%202023-08-05%20193657.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="51" data-original-width="343" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiCUasgjiomax-srnnO3GtH8wlSA-PPRI8lEw1aUYFDVy4J6UUXg4I02fdEHb0CBvao7S-Qq3u7gtDIHqy5A8P_7IVnD6Dg2QXHjGe37cTO0LWAFyqJNyI1zbT6MSvzq_YWIiefRUULUDybpzJGesDEr8Cfjr7tsR6TMH-ZZPvVW8oUitSWzOd0dR9Chjk/s16000/Screenshot%202023-08-05%20193657.png" /></a></div><br /><div><br /></div><h3 style="text-align: left;">Avslutning</h3><div>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.</div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-64735456799086241892023-07-04T16:28:00.004+02:002023-07-04T16:28:19.323+02:00Podcast-avsnitt som sammanfattar psykologisk trygghet bra<p><span style="font-size: large;">Rätt ut från utkast</span></p><p>Det här är ett inlägg som legat som utkast i över ett år. Det jag egentligen ville ha sagt då var just att</p><blockquote style="font-style: italic;">jag tyckte att det här avsnittet sammanfattade det (psykologisk trygghet) mycket bra och att det därför kunde vara bra att "spara" som ett blogginlägg</blockquote><p>men genast började jag gräva i vad teal-podden och teal är<i> </i>och därför blev målet otydligt och inlägget aldrig klart. Nu släpper jag det som det är med det här lilla tillägget <span style="font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Android Emoji", EmojiSymbols, "EmojiOne Mozilla", "Twemoji Mozilla", "Segoe UI Symbol", "Noto Color Emoji Compat", emoji, noto-emojipedia-fallback;">😀</span></p><p></p><p><span style="font-size: large;">Intro</span></p><p>Hade nyss en fönsterputsardag och lyssnade då samtidigt på <a href="https://www.tealpodden.se/podcast/avsnitt35/" target="_blank">avsnitt 35 av tealpodden</a> som handlade om <b>psykologisk trygghet</b>. Jag har hört, sett och läst om psykologisk trygghet från många källor nu, men jag tyckte att det här avsnittet sammanfattade det mycket bra och att det därför kunde vara bra att "spara" som ett blogginlägg.</p><p><span style="font-size: large;">Om Tealpodden och vad är teal?</span></p><p><span>Tealpodden hittade jag för att Ulla Osterman, upphovsmakaren till <a href="http://www.codingswede.se/2019/12/oka-psykologiska-tryggheten-i-teamet.html" target="_blank">dialogverktyget Orangino Work</a>, delade det <a href="https://www.tealpodden.se/podcast/avsnitt38/" target="_blank">Tealpodd-avsnitt där hon var med</a> och pratade om sitt dialogverktyg. Tealpodden drivs av Fredrik Högström och Maria Berglund:</span></p><p></p><blockquote>Vi driver Tealpodden som en hobby, vid sidan av våra vanliga jobb. Idén till Tealpodden kom under en långpromenad. Vi hade läst boken Reinventing Organizations och tyckte att den satte fingret på något vi båda känt och försökt formulera – att ett bättre, snällare och mer livstillvänt arbetsliv var möjligt. Men hur kunde vi bidra till den förändringen? Jo, vi startar en podd! En podd där vi utforskar framtidens organisationer och hur en annorlunda arbetsvardag kan se ut.</blockquote><p> </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWceI9mMB_OAWClRswx0PaoebWcbnz6DiVXxO8zpTJ54vxOWYcYarEc9UfLQoT96m9AIqYEijD0f4cLHA5mCJs0OoP1_cQkZMyBeF54KV-TKOHEAY02Zy2uJ8ched97Q3Vdsi-fKbY2feAkdYIp_AG-3KL0qC3KmcNvv0xbCQq2k__XO1NsOQy8DIurw/s1007/Fredrik%20och%20Maria.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="567" data-original-width="1007" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWceI9mMB_OAWClRswx0PaoebWcbnz6DiVXxO8zpTJ54vxOWYcYarEc9UfLQoT96m9AIqYEijD0f4cLHA5mCJs0OoP1_cQkZMyBeF54KV-TKOHEAY02Zy2uJ8ched97Q3Vdsi-fKbY2feAkdYIp_AG-3KL0qC3KmcNvv0xbCQq2k__XO1NsOQy8DIurw/w400-h225/Fredrik%20och%20Maria.jpg" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Fredrik Högström och Maria Berglund<br /><a href="https://www.tealpodden.se/om-oss/">https://www.tealpodden.se/om-oss/</a></td></tr></tbody></table><br /><p></p><p>Teal är en färg mellan blå och grön och <a href="https://sv.wikipedia.org/wiki/Teal" target="_blank">har fått sitt namn</a> från det engelska ordet för fågeln kricka, som har färgen som ett band bakom ögat. Det var standardfärgen på skrivbordet i Windows 95.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXApl2WSrOsIcFZtdYZsf3-rPhdo6vCZX9700IuzINAUBuyM4FRCFGLFXQYJqskgxt9QLv7-d-1zGOrZ-V9Vt8V8DQ_rq98DWbmL7g26T_8IcFmF6Ir7rkSEBH64eM0kUzCUMWQB4cdDlstWV3BZ0N5OcZxtbDn_RUoqKZyfXd5GGiyzwe6GUAjpz5qg/s422/Teal.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="364" data-original-width="422" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXApl2WSrOsIcFZtdYZsf3-rPhdo6vCZX9700IuzINAUBuyM4FRCFGLFXQYJqskgxt9QLv7-d-1zGOrZ-V9Vt8V8DQ_rq98DWbmL7g26T_8IcFmF6Ir7rkSEBH64eM0kUzCUMWQB4cdDlstWV3BZ0N5OcZxtbDn_RUoqKZyfXd5GGiyzwe6GUAjpz5qg/w200-h173/Teal.jpg" width="200" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><a href="https://commons.wikimedia.org/wiki/File:Corhwyaden.jpg">https://commons.wikimedia.org/wiki/File:Corhwyaden.jpg</a></td></tr></tbody></table><br /><p>Fredric Laloux, författaren till Reinventing Organizations, kopplar färger till organisationers mognadsstadier och använder teal till det högsta stadiet. </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://prominda.com/wp-content/uploads/2018/11/teal-evolution-eng.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="360" data-original-width="800" height="288" src="https://prominda.com/wp-content/uploads/2018/11/teal-evolution-eng.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><a href="https://prominda.com/english/teal-organizations/">https://prominda.com/english/teal-organizations/</a></td></tr></tbody></table><br /><p><span style="font-size: medium;">Om podcast-avsnittets gäster</span></p><p>I avsnittet om psykologisk trygghet så gästas Tealpodden av Maria Wigenius och Lina Hedin från <a href="https://addinsight.se/" target="_blank">Add Insight</a> som arbetar med att bygga psykologisk trygghet i team och organisationer.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZiMWlNYiZPtog1lu986mOFiRO3fmyIkTY7U2nVxxzY4CT44W_qWxxFPXW4Pm6soqa9oNsdvSu5WQpgoYprp6-NFR9fuS5VjEB0fFv3eyFgiEboAFJAn7HvOgrA-DovC3CZpHCYHHadLTnoUsyIUx_ALs3TvIh4b5zIVJtWKmt4JT3_yMmzMD0qSZbdg/s499/Maria%20och%20Lina.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="314" data-original-width="499" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZiMWlNYiZPtog1lu986mOFiRO3fmyIkTY7U2nVxxzY4CT44W_qWxxFPXW4Pm6soqa9oNsdvSu5WQpgoYprp6-NFR9fuS5VjEB0fFv3eyFgiEboAFJAn7HvOgrA-DovC3CZpHCYHHadLTnoUsyIUx_ALs3TvIh4b5zIVJtWKmt4JT3_yMmzMD0qSZbdg/w400-h251/Maria%20och%20Lina.jpg" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="text-align: start;">Maria Wigenius och Lina Hedin<br /><a href="https://www.tealpodden.se/podcast/avsnitt35/">https://www.tealpodden.se/podcast/avsnitt35/</a></span></td></tr></tbody></table><p></p>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-18100600877516256232023-06-28T13:08:00.008+02:002023-06-28T13:14:55.103+02:00Gästat annat team för en Orangino Work-session<h2 style="text-align: left;"><span style="font-family: arial;">Bakgrund</span></h2><p><span style="font-family: arial;">Torsdagen den 15:e juni 2023 blev dagen då jag för första gången höll i en Orangino Work-session i ett annat team än mitt eget. Anledningen till att jag skriver det här inlägget är för att senare komma ihåg hur det var och tankar kring vad jag kan ändra på till en eventuell nästa gång. Om du som läser det här inte har koll på vad Orangino Work är så är det nog svårt att hänga med, men du vill kan du läsa <a href="http://www.codingswede.se/search/label/orangino%20work" target="">min intro här</a>.</span></p><p><span style="font-family: arial;">Teamet som bjöd in mig är ett "kusinteam" till det jag ingår i och hade tidigare kört en omgång själva efter en mycket kort överlämning mellan mig och teamledaren. Anledningen till att jag blev inbjuden var för att teamledaren skulle kunna fokusera helt på att bara vara deltagare och för att se om det var några signifikanta skillnader i hur vi leder en session. Det här var en del av deras återblick (retrospective) de körde den eftermiddagen.</span></p><h2 style="text-align: left;"><span style="font-family: arial;">Upplägg</span></h2><div style="text-align: left;"><span style="font-family: arial;">Jag körde ett tvåtimmarspass med en paus i mitten. Inledningsvis höll jag en kort Powerpoint-dragning där jag presenterde mig själv och varför jag var där. Berättade också kort om psykologisk trygghet och Googles studie Aristoteles. Jag drog även historiken om hur Orangino Work kom till.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Sen fick de göra en incheckningsövning, laget runt: "Berätta om någon feedback du gett eller fått sen förra tillbakablicken."</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Efter det drog jag reglerna och tog upp saker vi själva funderat lite på: </span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">"Hur ska jag tänka kring skattningen för teamet? Är det hur vi är överlag inom teamet, eller är det hur teamet är mot andra team?"</span></li><li><span style="font-family: arial;">"Jag förstår inte beteendet eller beskrivningen riktigt, vad ska jag göra?"</span></li></ul><span style="font-family: arial;">I stort sett så är svaret på båda frågorna: Välj att tolka det som du vill och beskriv din tolkning i samband med att du motiverar din skattning. Men ofta när det är ett krångligt ord så brukar vi snabbt försöka få en samsyn innan skattning så att vi skattar på en hyfsat lika tolkning. Sen började "spelet".</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Borden var arrangerade i hästskoform, där jag satt i ena änden. Åtta personer var med, två i teamet var frånvarande. Vi hann med fem beteendekort som jag hade valt ut innan. Eftersom det finns så många kort att välja bland - vilket gör väljandet svårt - så valde jag bara från de kort som mitt team kört innan och varit givande.</span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">Ber om hjälp<br />Jag vågar be andra om hjälp i mitt arbete när så behövs</span></li><li><span style="font-family: arial;">Lyhörd<br />Jag är bra på att uppfatta även sådant som inte är tydligt uttalat.</span></li><li><span style="font-family: arial;">Pålitlig<br />Jag står för de utfästelser jag gör.</span></li><li><span style="font-family: arial;">Nätverkare<br />Jag bygger ständigt mitt eget nätverk som ett led i att skapa nya möjligheter.</span></li><li><span style="font-family: arial;">Läraktig<br />Jag har vilja och förmåga att lära mig nya saker.</span></li></ul><div><span style="font-family: arial;">Ordningsföljden för att motivera sin skattning körde vi laget runt medsols. Oftast frågade jag om det var nån som var frivillig att börja.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">I slutet körde jag en utcheckning laget runt: </span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">"Vad har du lärt dig under sessionen?" </span></li><li><span style="font-family: arial;">"Har du nån feedback till mig att tänka på om jag gör det här igen?"</span></li></ul></div><div><span style="font-family: arial;">Stämningen var på samma gång nervös, uppsluppen och nyfiken.</span></div><div><span style="font-family: arial;"><br /></span></div><h2 style="text-align: left;"><span style="font-family: arial;">Feedback från deltagarna</span></h2></div><div><span style="font-family: arial;">Det här är den feedback jag fick från insamlingen i slutet.</span></div><div><span style="font-family: arial;"><br /></span></div><div style="text-align: left;"><b><span style="font-family: arial;">Bra längd</span></b></div><div><span style="font-family: arial;">2 timmar inklusive paus upplevdes som en bra längd.</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Rättvisare fördelning av att inleda en runda</span></b></div><div><span style="font-family: arial;">Ett förslag var att vara bättre på att rotera vem det är som inleder en runda av skattningsmotiveringar. När man frågar om någon är frivillig så blir det ofta samma fåtal personer som svarar "ja" på den frågan och ofta kan det vara teamledaren. Jag tolkade personen som gav feedbacken att en runda kan upplevas olika beroende på var i ordningen man svarar. Även fast man satt sin egen skattning innan så kan de som motiverar sin skattning tidigt till viss del färga motiveringar från personer som kommer senare.</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Kan fortsätta själva</span></b></div><div><span style="font-family: arial;">Jag frågade om de tyckte det var nån skillnad mellan den här gången när jag ledde och gången då teamledaren lett sessionen. Skillnaderna de tog upp var att jag hade kört introt med psykologisk trygghet, bakgrunden till Orangino Work och incheckning. Själva sessionen verkade annars vara lika, vilket tyder på att de kan fortsätta köra på egen hand.</span></div><div><span style="font-family: arial;"><br /></span></div><h2 style="text-align: left;"><span style="font-family: arial;">Egna reflektioner</span></h2><div><b><span style="font-family: arial;">Begreppet "Psykologisk trygghet" fortfarande inte välkänt</span></b></div><div><span style="font-family: arial;">Jag tog med lite kort om psykologisk trygghet i presentationen, vad det är och hur viktigt studien Aristoteles kommit fram till att det är. Eftersom jag ser och hör om det här i väldigt många av de flöden jag följer så trodde jag att det här numera var välkänt och hade med det mest för att se om vi hade samma bild av det. Studien Aristoteles, som jag kallade "sönderrefererad", hade de inte alls koll på och hade nog heller inte nån bättre koll på begreppet psykologisk trygghet.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Så den här delen hade kunnat förlängts aningen, till exempel med Amy Edmondsons studie om sjukhusteam där de mest framgångsrika teamen också var det som såg ut att göra mest fel, fast i slutänden visade det sig att den egentliga skillnaden var att de <b>tordes </b>rapportera felen, som gjorde att de kunde förbättra sig.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Kanske även ta med <a href="https://en.wikipedia.org/wiki/Tenerife_airport_disaster">flygplansolyckan </a>där en av orsakerna tros ha varit att piloten med lägre rang inte tillräckligt ifrågasatte vad piloten med högre rang gjorde.</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Formation och själv vara inne eller utanför</span></b></div><div><span style="font-family: arial;">Teamet satt vid bord arrangerade i en hästsko-form, det var bra så länge jag presenterade. Men efter det skulle man kanske tightat till det lite, det hade nog varit snabbt och enkelt att dra ihop borden till en triangel. Då hade de kommit lite närmare varandra, det hade blivit lättare att höra och se varandra. Det var förmodligen inget problem, men allt som ökar kontakten borde vara bra.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Jag satt på ena ytterkanten. Min upplevelese var att man rätt ofta vände sig till mig när man motiverade sin skattning, fast det viktiga egentligen är kontakten med det egna teamet. Jag har också tänkt på att när man som teammedlem sitter fokuserat lyssnande och håller tillbaka feedback för att man inte vill påverka den som talar åt något håll kanske blir lite snål även med "ja, jag lyssnar på dig"-feedback. Det blir då lätt att ledaren tydligast visar den feedbacken och det leder i sin tur att den som talar vänder sig till denne.</span></div><div><span style="font-family: arial;">Det man kan göra annorlunda är att som ledare istället stå upp utanför ringen. Då får man bättre överblick över skattningarna och de som sitter kanske får en starkare känsla av att de vänder sig till varandra och inte till ledaren. Det här får jag kolla upp.</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Angående feedback "Rättvisare fördelning av att inleda en runda"</span></b></div><div><span style="font-family: arial;">När jag gick kursen och kursdeltagarna "provspelade" så tror jag ledaren ofta valde vem som skulle börja utifrån hur man skattat och då fick de med "extremerna" börja. Det vill säga ledaren valde först någon av de som skattat högst och efter det nån av de som skattat lägst. Jag kanske ska reda lite i om det fanns nån djupare tanke bakom det, eller om det var nån tillfällig idé. För annars tycker jag det är smidigt att bara gå laget runt, det flyter på bra och alla vet när det är deras tur. Man skulle kunna skifta och köra motsols varannan gång eller nåt sånt för att fortfarande hålla det enkelt men ändå få lite mer variation.</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Gör om "Om mig" mer som en historia</span></b></div><div><span style="font-family: arial;">Delen "Om mig" i presentationen tänker jag fortfarande ska hållas mest som en parentes, men den skulle kunna göras mer i "story telling"-stil istället för ett bunt stolpar. Även om jag hade det med så kanske det kan förtydligas hur och varför jag kommit in på Orangino Work.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><b>Incheckningen</b></span></div><div><span style="font-family: arial;">Jag var lite fundersam över hur jag skulle göra med incheckningen. På en vanlig retro så används incheckningen delvis för att alla ska ha fått komma till tals nån gång i början, som ett sätt att komma igång så att man lättare är med och bidrar muntligt även senare. I en Orangino-session så går ordet runt oavsett, så incheckningen tappar då sin roll som munlädersmörjare. </span><span style="font-family: arial;">Att jag ändå tog med just "har du gett/fått nån feedback" är för att det kan vara bra att reflektera över teamets feedback-kultur, feedback är viktigt för ett bra samarbete, bland annat lär man sig vad andra uppskattar och varför och är tätt knutet till psykologisk trygghet.</span></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Hur hantera reflektionsdelen i slutet?</span></b></div><div><span style="font-family: arial;">Förutom att de fick köra en utchecknings-runda så skippade jag reflektionsdelen som ska göras i slutet. Jag tycker att materialet från kursen angående den är rätt svagt och den tar ganska lång tid att genomföra. Reflektionsdelen handlar om att titta på de beteenden man avhandlat och (först i par, sen i grupp) reflektera över </span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">beteendets betydelse för gruppen, </span></li><li><span style="font-family: arial;">vilka beteenden där gruppen har störst/minst samstämmighet,</span></li><li><span style="font-family: arial;">vilka beteenden som väckte störst engagemang och energi</span></li></ul><div><span style="font-family: arial;">Det handlar också om en analys av hur samtalet i sig gått till, deltagarna ska reflektera över</span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">Kom alla till tals lika mycket?</span></li><li><span style="font-family: arial;">Hur var öppenheten?</span></li><li><span style="font-family: arial;">Lyssnade vi på varandra?</span></li></ul><div><span style="font-family: arial;">Att reflektera över hur gruppen samtalat tänker jag nu ändå är en viktig sak att prata om och det vore nog bra att få in på något sätt. Så det är nåt att tänka på till nästa gång, samt även över ledarens ansvar för att styra detta. Hur mycket taltid varje person tar sig beror väl till stor del på hur man är som person. Men ska ledaren kanske försöka korta ner de mer verbala och på nåt sätt underlätta de mindre verbala att få mer tid? Eller så låter man som ledare bli det och låter deltagarna reflektera över skillnaderna så kanske de justerar det själva vid nästa tillfälle?</span></div></div></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><b>Sammanfatta insamlade idéer</b></span></div><div><span style="font-family: arial;">Under sessionen skrevs det ner några idéer på saker att gå vidare med. Det som skrevs ner togs inte upp mer under sessionen, men det hade nog varit bra att i slutet sammanfatta det som skrivits ner och kommit överens om hur det ska tas vidare.</span></div><div><span style="font-family: arial;"><br /></span></div><h2 style="text-align: left;"><span style="font-family: arial;">Är det här nåt jag vill göra igen?</span></h2><div><span style="font-family: arial;">Ja, absolut! Det var intressant att hälsa på i ett annat team och känna på deras stämning och höra vad de tycker och tänker. Som sagt så var det ett "kusinteam" till mitt eget så mycket var på grund av det bekant och hemtamt, men skillnader finns ändå, vilket kan leda till nån slags värdefullt utbyte. Sen känns det som att när ett team väl har fått en intro till Orangino Work så kan de ta det vidare själva, men jag kan mycket väl tänka mig att köra den intron för flera team.</span></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-45681576975859722362023-06-03T22:43:00.003+02:002023-06-03T23:18:31.607+02:00Började skriva en Lisp-interpretator i C#<span style="font-size: large;"><b>Bakgrund</b></span><p>Det här inlägget ska klargöra, (för dig, men också för mig själv), varför jag började försöka skriva en Lisp-interpretator i C# och hur långt jag kommit hittills.</p><span style="font-size: large;"><b>Mycket kort Lisp-intro</b></span><p>Lisp är ett gammalt programmeringsspråk, det specades 1960 och är det näst äldsta högnivåspråket som fortfarande används (Fortran är äldst). Namnet är ett sammandrag av LISt Processing. Det finns många dialekter av språket, där de mest kända är Common Lisp, Scheme, Racket och Clojure.</p><p>Nåt som gör att Lisp ser en aning egendomligt ut är att uttryck avgränsas av parenteser och att det är prefix-noterat. Att skapa en variabel och binda det till värdet av en beräkning kan i ett krystat exempel i C# se ut såhär:</p><p>int x = 1 + 2;</p><p>I Lisp skrivs det såhär:</p><p>(define x (+ 1 2))</p><p>Prefix-notationen innebär att operatorn kommer först i ett uttryck och sen dess argument. Det kan se lite avigt ut när man är van med annat. </p><p>Varför är "list" en del av Lisps namn då? Jo, programkoden utgörs av listor, som byggs upp av enkellänkade par. Uttrycket ovan representeras internt med den här strukturen:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2_mfC-6cGyCsAOEarcS3uuX1HKVKvqmz7lF3U5LT27Vg2Xkx-GjU-vnWVDBfCGBY5a-tQpNHSw2YOKEMNkn3ATqNAUxeBLCwnNoz02blKrGh9iOiRtLutvrQ-RMtJT8XmnZsAt1nVz_nlFADGxdyV02DkqgKfl1HFIFEFoKLlLkkjylbO_1mzzqi4uA/s632/List%20representation%20example.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="632" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2_mfC-6cGyCsAOEarcS3uuX1HKVKvqmz7lF3U5LT27Vg2Xkx-GjU-vnWVDBfCGBY5a-tQpNHSw2YOKEMNkn3ATqNAUxeBLCwnNoz02blKrGh9iOiRtLutvrQ-RMtJT8XmnZsAt1nVz_nlFADGxdyV02DkqgKfl1HFIFEFoKLlLkkjylbO_1mzzqi4uA/s16000/List%20representation%20example.png" /></a></div><span style="font-size: large;"><b>Hur jag kom i kontakt med Lisp</b></span><div><p>När jag började på högskolan i Linköping så möttes man, som jag minns det, av en mängd mattekurser. När man tagit sig igenom dem, så var det äntligen dags att programmera! Men mycket snart upptäckte vi att det skulle göras i gamla dammiga Common Lisp 😱 När det fanns C++ och Java?!? Men, det var nog vettigt, det gav förståelse för att programmeringsspråk är verktyg som har olika styrkor och svagheter och att inte fastna för mycket i ett enda. Jag kan dock inte påstå att jag har använt just Lisp utanför skolan än.</p><span style="font-size: large;"><b>Så, varför skriva en egen interpretator?</b></span></div><div>Ja, varför? Det har säkert gjorts massor av gånger förr, så det finns förmodligen absolut noll behov av en till. Det var nog mest bara för att se om jag kan. Och dels för att jag gäckas av att jag på flera ställen sett utvecklare referera till den gamla boken "Structure and Interpretation of Computer Programs" som nån slags holy grail. Jag hade den som kursbok på högskolan, men det känns som att jag aldrig fick nån riktig "kontakt" med den. </div><div><br /></div><div>Eftersom den anses så speciell så har jag några gånger på senare tid försökt läsa den, men det har inte gått att hålla intresset uppe. Andra halvan av boken handlar om att implementera en Lisp-interpretator i Lisp, en så kallad "metacircular interpreter", så jag tänkte att en ingång som skulle kunna göra boken mer intressant är att faktiskt utveckla en själv, men i C# istället. Hittills tycker jag att det fungerat bra, det har naturligt väckts en hel del frågeställningar som jag får leta reda på svaren på. Tanken var från början att göra så mycket som möjligt utan stöd från boken eller nätet för att inte bli påverkad för mycket eller få för många svar direkt så att jag skulle tappa intresset. Men jag fastnade fort och använder boken helt fritt och har även sökt på nätet en hel del, men fortfarande restriktivt för att inte bli serverad för mycket 😊</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://anime-girls-holding-programming-books.netlify.app/static/Yagami_Kou_Starts_SICP-30c598160d526b002b8f71e5b244ef5e.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="800" height="360" src="https://anime-girls-holding-programming-books.netlify.app/static/Yagami_Kou_Starts_SICP-30c598160d526b002b8f71e5b244ef5e.jpg" width="640" /></a></div><br /><span style="font-size: large;"><b>Resultat hittills</b></span><div>Såhär i efterhand, när jag är en bit på vägen, så hade varit lite intressant om jag skrivit nån slags notering om mina tankar efter varje sittning med detta. Men det har jag inte gjort, så det får bli en liten sammanfattning av var jag är nu och de minor jag kan minnas.</div><div><br /></div><span style="font-size: medium;"><b>Ha alltid med ett Environment-objekt</b></span><div>När jag började så skapade jag bara en Evaluator-klass och skickade in Lisp-uttryck till den, till exempel addition.</div><div><br /></div><div><span style="font-family: courier;">var result = Eval("(+ 1 2)");</span></div><div><span style="font-family: courier;"><br /></span></div><div>Det gick bra, till en början. Sen behövde jag spara värden på variabler, hur skulle jag hantera dem? Det hade säkert gått att spara även dem i evaluatorn, men det blev snabbt enligt bokens förslag en egen klass för omgivningen "Environment".</div><div><br /></div><div><span style="font-family: courier;">var env = new Environment();</span></div><div><span style="font-family: courier;">var result = Eval("(define x (+ 1 2))", env);</span></div><div><span style="font-family: courier;"><br /></span></div>Nu kunde variabelvärden sparas till och hämtas från Enviroment-objektet.<div><br /></div><div>I samband med detta förstod jag att även funktionen "+" ska kunna sparas som ett värde på en variabel och därmed slås upp och hämtas från Environment. Då började jag få problem med att jag skickade runt uttryck som strängar och jag kunde inte spara "+"-funktionen som en sträng i Environment. </div><div><br /><span style="font-size: medium;"><b>Uppdelning i lexer, parser och evaluator</b></span><div>Den som skriver en "metacircular interpreter" stöter inte på problemet med hur data ska representeras, eftersom den redan arbetar med Lisp-data. Men när man skriver interpretatorn i ett eget språk så uppstår frågan hur data ska representeras. Min start där allt var strängar höll inte. Efter lite sökande på nätet stötte jag på <a href="https://amirkamil.github.io/project-scheme-parser/">https://amirkamil.github.io/project-scheme-parser/</a> som beskriver att processen kan delas upp i tre steg, lexing, parsing och evaluation.</div></div><b><div style="font-size: large;"><span style="font-size: medium;"><b><br /></b></span></div>Lexer</b><div>En lexer tar en sträng och delar upp den i tokens. Skickar man in strängen nedan i min lexer </div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">"(define x (+ 1 2))"</span></div><div><span style="font-family: courier;"><br /></span></div><div>så delar den upp strängen i en lista med tokens: [(, define, x, (, +, 2, 3, ), )]</div><div><br /></div><div><div style="text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKyF36gMJdmVHgDc76h6pRTRvrIjs1hvEex8Kmm9116pF299WNxcV2nWHdMbUJJp0qBB2hbrYknlNilju5S7NJvGEngRadIM_dE1ZqeyIjV1qsa545TzxIRGKU8eGDvPHMoQjKVZwhi1H48sGninnJ94oa6N-hLbcD02LTNkPvMJ-z22xws_WD8akI5Q/s234/tokens.png" style="clear: left; margin-bottom: 1em;"><img border="0" data-original-height="150" data-original-width="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKyF36gMJdmVHgDc76h6pRTRvrIjs1hvEex8Kmm9116pF299WNxcV2nWHdMbUJJp0qBB2hbrYknlNilju5S7NJvGEngRadIM_dE1ZqeyIjV1qsa545TzxIRGKU8eGDvPHMoQjKVZwhi1H48sGninnJ94oa6N-hLbcD02LTNkPvMJ-z22xws_WD8akI5Q/s16000/tokens.png" /></a></div><br /><b>Parser</b><div>Parsern tar sedan dessa tokens och gör om dem till listobjekt. Till detta har jag klassen <i>ListExpression</i>, som ärver av <i>Expression</i> och sparar två <i>Expression</i>-värden internt, <i>left </i>och <i>right</i>.</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD8Qw6OoYFZ6au8aVXUBMqlKS0fZwlgBeEmIMCCkhtH6z7PD3Ydd17J_O4e1M2VDM9vdwRHG_lSz_FDaoGh6m06FgKZnAli-adxPZMZVtkKAplOenBHRPElR1NMNjhw1k54a5NKDNKJH3eHEU-KBe6YEFkF04zQgODGNkCoT40a1f28f6645vvhecDuA/s632/List%20representation%20example.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="632" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD8Qw6OoYFZ6au8aVXUBMqlKS0fZwlgBeEmIMCCkhtH6z7PD3Ydd17J_O4e1M2VDM9vdwRHG_lSz_FDaoGh6m06FgKZnAli-adxPZMZVtkKAplOenBHRPElR1NMNjhw1k54a5NKDNKJH3eHEU-KBe6YEFkF04zQgODGNkCoT40a1f28f6645vvhecDuA/s16000/List%20representation%20example.png" /></a></div><div><span style="font-family: courier;">public class ListExpression : Expression</span></div><div><span style="font-family: courier;">{</span></div><div><span style="font-family: courier;"> private readonly Expression? _left;</span></div><div><span style="font-family: courier;"> private readonly Expression? _right;</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> public ListExpression(Expression? left, Expression? right)</span></div><div><span style="font-family: courier;"> {</span></div><div><span style="font-family: courier;"> _left = left;</span></div><div><span style="font-family: courier;"> _right = right;</span></div><div><span style="font-family: courier;"> }</span></div><b><div><b><br /></b></div>Evaluator</b></div></div><div>Nu har evaluatorn ett listobjekt att jobba med. Huvudfunktionen <i>Eval </i>i den ser just nu ut enligt nedan.</div><div><br /></div><div><div><span style="font-family: courier;">public Expression Eval(Expression expression, Environment env)</span></div><div><span style="font-family: courier;">{</span></div><div><span style="font-family: courier;"> if (IsSelfEvaluating(expression))</span></div><div><span style="font-family: courier;"> return expression;</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> else if (expression is VariableExpression ve)</span></div><div><span style="font-family: courier;"> return env.GetValue(ve.Value);</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> else if (SpecialFormAssignment.Recognises(expression))</span></div><div><span style="font-family: courier;"> return SpecialFormAssignment.Evaluate(expression, this, env);</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> else if (SpecialFormIf.Recognises(expression))</span></div><div><span style="font-family: courier;"> return SpecialFormIf.Evaluate(expression, this, env);</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> else if (SpecialFormAnd.Recognises(expression))</span></div><div><span style="font-family: courier;"> return SpecialFormAnd.Evaluate(expression, this, env);</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> else if (SpecialFormOr.Recognises(expression))</span></div><div><span style="font-family: courier;"> return SpecialFormOr.Evaluate(expression, this, env);</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> else if (expression is ListExpression list)</span></div><div><span style="font-family: courier;"> {</span></div><div><span style="font-family: courier;"> var evaluatedOperator = Eval(Operator(list), env);</span></div><div><span style="font-family: courier;"> var evaluatedOperands = </span></div><div><span style="font-family: courier;"> EvalOperands(Operands(list), env).ToList();</span></div><div><span style="font-family: courier;"> return Apply(evaluatedOperator, evaluatedOperands, env);</span></div><div><span style="font-family: courier;"> }</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"> throw new Exception(</span></div><div><span style="font-family: courier;"> $"Can not evaluate the expression '{expression}'");</span></div><div><span style="font-family: courier;">}</span></div></div><div><span style="font-family: courier;"><br /></span></div>Den hanterar hittills:<div><ul style="text-align: left;"><li>Självevaluerande uttryck. <br />Bool och nummer, ska nog lägga till sträng-hantering med.</li><li>Variabeluppslag</li><li>Tilldelning av värde till variabel</li><li>If</li><li>Uttryck<br />Just nu endast +, - och specialformerna <i>and </i>och <i>or</i>.<br />(Ett vanligt uttryck evaluerar alla argument, en specialform evaluerar bara de argument som behöver evalueras.)</li></ul><div>Så det finns en hel del kvar att göra, dels mängdgöra där stöd för flera matematiska operatorer är en del, t ex < > = * /, men det som är lite mer spännande är nog att lägga till stöd för att definiera egna metoder. Och eftersom det här inte på nåt sätt är ett försök att göra en komplett implementation av Lisp (eller egentligen Scheme) så kommer jag nog gå i riktning mot det som jag för tillfället känner mig mest nyfiken på att utforska.</div><div><br /></div><span style="font-size: large;"><b>Prova på eller titta på kod</b></span><div>Testa kan du göra genom att köra <a href="https://drive.google.com/drive/folders/1UPjIl7G9u_Gt9FfIUaFU_5eRNy6GF4Yj?usp=sharing" target="_blank">programmet som ligger här.</a></div><div><br /></div><div>Plus och minus</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVUoUk6n8OT_eL922GqZe_X_s4W3bNaq9XC_2HCAFsKpeY2srAzY0tr4wHDiBLAmvS69EQS5oHPcbhYbq6ep2-RQyaj2SZejePXwpGVChd71IPk7DPQIALZu2UKnNIE5BVoeNvJICo12560uL8mxpsA7i10H7UYGVB3yWgdKKdq6mur2OXaV5gCXZFWA/s304/Addition_and_subtraction.png" style="clear: left; display: inline; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="123" data-original-width="304" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVUoUk6n8OT_eL922GqZe_X_s4W3bNaq9XC_2HCAFsKpeY2srAzY0tr4wHDiBLAmvS69EQS5oHPcbhYbq6ep2-RQyaj2SZejePXwpGVChd71IPk7DPQIALZu2UKnNIE5BVoeNvJICo12560uL8mxpsA7i10H7UYGVB3yWgdKKdq6mur2OXaV5gCXZFWA/s1600/Addition_and_subtraction.png" width="304" /></a></div><div style="text-align: left;"><br /></div>And och or</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLquz760GrmELVAtuOCfOomK4WB1ynq9936XFqljWJcvwoH87QME8LD-ARTeDnRLw4iVhKWhbw1qwptPzq7eCwr1ypIXLNBTmrQHigycloN3tLJU7stnVw77PS-Wl1dbJkh5u9ky9swRIbS6RUZtjEp-Csyz7wxpvniAqF3BM7Ugxh5rjAZ23Ew_Yt9A/s167/and_or.png" style="clear: left; display: inline; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="116" data-original-width="167" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLquz760GrmELVAtuOCfOomK4WB1ynq9936XFqljWJcvwoH87QME8LD-ARTeDnRLw4iVhKWhbw1qwptPzq7eCwr1ypIXLNBTmrQHigycloN3tLJU7stnVw77PS-Wl1dbJkh5u9ky9swRIbS6RUZtjEp-Csyz7wxpvniAqF3BM7Ugxh5rjAZ23Ew_Yt9A/s1600/and_or.png" width="167" /></a></div><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;"><br /></div><div style="text-align: left;">Definiera variabler och tilldela värde</div><div style="text-align: left;"><img border="0" data-original-height="119" data-original-width="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5jAXscNAKZV9RlIZPBLfvj6DEee-TgnG8FQ8cGSmtpsRXYfhh-TAA9_XU9TYTKA7c_oMmb14InCtC6REihNS8MJWU6id9raVe1QIaYr8XaVSXhvzmfgsW_u8PG1Ye_jujWR2U-xtJ8dX1xF3E4I5rLGqN0EzdlMCVdMSLC075PMCQs3rKYqxjhnHh0g/s16000/define_and_recall.png" /></div></div></div><div><br /></div><div>If-satser<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgp8VH-lQgQV2ihUvJN9VImGMn-lGaPAG2wospMGc0UmJwhCnzp5M7wbvkphPV5YiwdE0MoQTqKTJLOS8-w1-Yo618tsALKUuRwFfVio2vZkYmDgA6OMzH9iO3U99pFfmjsx-JzeGs1RtAFC1vHG9ntKYPO77Ud1RZFM0CILa70geDuyhGiwJQxyrmAA/s142/if.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="77" data-original-width="142" height="77" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgp8VH-lQgQV2ihUvJN9VImGMn-lGaPAG2wospMGc0UmJwhCnzp5M7wbvkphPV5YiwdE0MoQTqKTJLOS8-w1-Yo618tsALKUuRwFfVio2vZkYmDgA6OMzH9iO3U99pFfmjsx-JzeGs1RtAFC1vHG9ntKYPO77Ud1RZFM0CILa70geDuyhGiwJQxyrmAA/s1600/if.png" width="142" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Titta på koden kan du göra här: <a href="https://github.com/carlbjorknas/sicp-laboration">https://github.com/carlbjorknas/sicp-laboration</a></div></div><div>När jag skrev detta inlägg var jag på denna <a href="https://github.com/carlbjorknas/sicp-laboration/tree/8d1cae3fb05c7c680fb4fff54272f4942686c416" target="_blank">commit</a>.</div><div><br /></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-56637050924759506752022-02-06T09:19:00.007+01:002022-02-06T09:26:30.201+01:00Gherkin - det gemensamma "språket" från produktägare till utvecklare<h2 style="text-align: left;">Gherkin</h2><p>Jag har nu haft möjligheten att använda Gherkin på jobbet, ett språk, eller kanske mer en mall, som används för att skriva systemtest så att de ska bli läsbara och förståeliga hela vägen från produktägare till utvecklare. Vi är bara i början av resan, men det verkar mycket lovande och intressant! Rekommenderar!</p><p>Om du är som jag och undrar varför saker heter som de heter så kan jag avslöja att gherkin betyder "liten picklad gurka". Och språket Gherkin används i testramverket Cucumber, <a href="https://www.infoq.com/news/2018/04/cucumber-bdd-ten-years/" target="_blank">vilket frun till skaparen fick namnge</a>:</p><blockquote>My wife suggested I call it Cucumber (for no particular reason), so that's how it got its name. I also decided to give the Given-When-Then syntax a name, to separate it from the tool. That's why it's called Gherkin (a small, pickled Cucumber).</blockquote><p><br /></p><p>Cucumber är ett Ruby-ramverk, sitter du med .net så är det <a href="https://specflow.org/" target="_blank">SpecFlow </a>som gäller om du vill skriva test med Gherkin.</p><p>För att du ska få en känsla för hur språket ser ut så kommer här ett exempel, där de fetkursiva orden, samt möjligheten till den korta beskrivningen på raden under <i>scenario</i>, tillhör Gherkin:</p><p><span style="background-color: #eeeeee; font-family: courier;"><b><i>Scenario</i>:</b> Duplicate email</span></p><p><span style="background-color: #eeeeee; font-family: courier;">Where someone tries to create an account for an email address that already exists.</span></p><p><span style="background-color: #eeeeee; font-family: courier;"><b><i>Given </i></b>I have chosen to sign up</span></p><p><span style="background-color: #eeeeee; font-family: courier;"><b><i>But </i></b>I enter an email address that has already registered</span></p><p><span style="background-color: #eeeeee; font-family: courier;"><b><i>Then </i></b>I should be told that the email is already registered</span></p><p><span style="background-color: #eeeeee; font-family: courier;"><b><i>And </i></b>I should be offered the option to recover my password</span></p><p><span style="font-family: courier;"><br /></span></p>
<div style="text-align: center;"><img alt="plant, fruit, food, green, produce, vegetable, fresh, kitchen, gourd, eating, vegetables, cucumber, cucurbita, cucumbers, gherkin, preparations, flowering plant, pickled cucumber, ensiling cucumbers, mizeria, land plant, cucumber gourd and melon family, summer squash, Free Images In PxHere" height="226" src="https://c.pxhere.com/photos/66/18/cucumbers_vegetables_food_green_kitchen_ensiling_cucumbers_preparations_mizeria-1394991.jpg!d" srcset="https://c.pxhere.com/photos/66/18/cucumbers_vegetables_food_green_kitchen_ensiling_cucumbers_preparations_mizeria-1394991.jpg!d" width="320" /></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div><h2 style="text-align: left;">Godbitar jag hittat</h2><p>För att komma in i testskrivandet lite snabbare så läste jag <a href="https://www.adlibris.com/se/bok/the-cucumber-book-2e-9781680502381" target="_blank">The Cucumber Book - Behaviour-Driven Development for Testers and Developers</a>. Här nedan kommer de partier jag markerat som "kom ihåg" under läsning.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://s1.adlibris.com/images/29634754/the-cucumber-book-2e.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="241" data-original-width="201" height="241" src="https://s1.adlibris.com/images/29634754/the-cucumber-book-2e.jpg" width="201" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><br /><h3 style="text-align: left;">Readability</h3><div> When you're writing Cucumber features, make readability your main goal. Otherwise, a reader can easily feel more like they're reading a computer program than a specification document, which is something we want you to try to avoid at all costs. After all, if your features aren't easy for nonprogrammers to read, you might as well just be writing your tests in plain old Ruby code. The real key to expressive scenarios is having a healthy vocabulary of domain language to use to express your requirements. That said, using only the basic set of Gherkin keywords can often make your features repetitive, making them cluttered and awkward to read. By the end of this chapter you'll know everything there is to know about Gherkin's syntax, giving you all the tools you need to write clear, readable Cubumber acceptance tests.</div><div><br /></div><h3 style="text-align: left;">System tests Vs unit tests</h3>It's also worth thinking about whether some of the behavior you've specified in Cucumber scenarios could be pushed down and expressed in fast unit tests instead. Teams that enthusiastically embrace Cucumber sometimes forget to write unit tests as well and rely too much on slow integration tests for feedback. Try to think of your Cucumber scenarios as broad brush strokes that communicate the general behavior of the code to the business, but still try to get as good a coverage as you can from fast unit tests. Help make this happen by having testers and programmers work in pairs when implementing Cucumber scenarios. This pair can make good decisions about whether a piece of behavior necessarily needs to be implemented in a slow end-to-end Cucumber scenario and drive out the behavior using a fast unit test instead.<div><br /></div><h3 style="text-align: left;">Överflödiga detaljer</h3><div>Nedanstående test tas upp som ett exempel på ett test som innehåller alldeles för mycket detaljer på fel nivå.</div><div><br /></div>Ett scenario för en e-postklient på webben:<div><br /><div><span style="font-family: courier;">Scenario: Check inbox</span></div><div><span style="font-family: courier;">Given a User "Dave" with password "password"</span></div><div><span style="font-family: courier;">And a User "Sue" with password "secret"</span></div><div><span style="font-family: courier;">And an email to "Dave" from "Sue"</span></div><div><span style="font-family: courier;">When I sign in as "Dave" with password "password"</span></div><div><span style="font-family: courier;">Then I should see 1 email from "Sue" in my inbox</span></div><div><br /></div><div>Användarnamnen är användbara, eftersom de är viktiga beståndsdelar i scenariot, men lösenorden är bara brus, de har inget att göra med det som testas och gör testet svårare att läsa. Till exempel så har Sue ett annat lösenord än Dave, vilket kan leda till att du som läsare av testet börjar fundera över om den delen är relevant och tappar då fokus från scenariots huvudsakliga mening, dvs: att testa att Dave kan se Sues email.</div><div><br /></div><div>Lösenorden är alltså överflödiga detaljer (incidental details), detaljer som nämns i scenariot, men som saknar relevans för scenariots uppgift. </div><div><br /></div><div>Här är testet utan lösenord:</div><div><br /></div><div><div><span style="font-family: courier;">Scenario: Check inbox</span></div><div><span style="font-family: courier;">Given a User "Dave"</span></div><div><span style="font-family: courier;">And a User "Sue"</span></div><div><span style="font-family: courier;">And an email to "Dave" from "Sue"</span></div><div><span style="font-family: courier;">When I sign in as "Dave"</span></div><div><span style="font-family: courier;">Then I should see 1 email from "Sue" in my inbox</span></div></div><div><br /></div><div>En klar förbättring, mer lättläst och testets betydelse framträder tydligare. Ännu mer brus kan tas bort:</div><div><br /></div><div><div><span style="font-family: courier;">Scenario: Check inbox</span></div><div><span style="font-family: courier;">Given I have received an email from "Sue"</span></div><div><span style="font-family: courier;">When I sign in</span></div><div><span style="font-family: courier;">Then I should see 1 email from "Sue" in my inbox</span></div></div><div><br /></div><div>Nu är det ett koncist trestegs-scenario, som också är lättare att underhålla. Om användarautentiseringen måste ändras, så påverkar det inte själva testet utan bara koden bakom. </div><div><br /></div><h3 style="text-align: left;">When Cucumbers Go Bad: Imperative Steps</h3></div><div>In computer programming, there are two contrasting styles for expressing the instructions you give to a computer to make it do something for you. These styles are called <i>imperative programming</i> and <i>declarative programming</i>.</div><div><br /></div><div>Imperative programming means using a sequence of commands for the computer to perform in a particular order. Ruby is an example of an imperative language: you write a program as a series of statements that Ruby runs one at a time. </div><div>A declarative program tells the computer <i>what </i>it should do without prescribing precisely <i>how </i>to do it. CSS is an example of a declarative language: you tell the computer what the various elements on a web page should look like, and you leave it to take care of the rest.</div><div><br /></div><div>Exempel i imperativ stil:</div><div><br /></div><div><span style="font-family: courier;">Scenario: Redirect user to originally requested page after logging in</span></div><div><span style="font-family: courier;">Given a User "dave" exists with password "secret"</span></div><div><span style="font-family: courier;">And I am not logged in</span></div><div><span style="font-family: courier;">When I navigate to the home page</span></div><div><span style="font-family: courier;">Then I am redirected to the login form</span></div><div><span style="font-family: courier;">When I fill in "Username" with "dave"</span></div><div><span style="font-family: courier;">And I fill in "Password" with "secret"</span></div><div><span style="font-family: courier;">And I press "Login"</span></div><div><span style="font-family: courier;">Then I should be on the home page</span></div><div><br /></div><div>Enligt författaren så kan man argumentera att ovanstående testexempel har en del fördelar. Men han menar på att man snart kommer drabbas av problem med test som lätt går sönder och uttråkade intressenter, t ex produktägaren. Test som skrivs på den stilen blir brusiga, långa, tråkiga att läsa och går lätt sönder. Till exempel en så liten ändring som en omdöpning av knappen från "Login" till "Log in" får testet att gå sönder.</div><div><br /></div><div>Men det värsta är att språket inte tillhör den egentliga problemdomänen, utan blir mer lågnivå-språk med ord som "fill in" och "press", vilka tillhör gui-domänen.</div><div><br /></div><div>Exemplet i deklarativ stil:</div><div><br /></div><div><div><span style="font-family: courier;">Scenario: Redirect user to originally requested page after logging in</span></div><div><span style="font-family: courier;">Given I am an unauthenticated User</span></div><div><span style="font-family: courier;">When I attempt to view som restriced content</span></div><div><span style="font-family: courier;">Then I am shown a login form</span></div><div><span style="font-family: courier;">When I authenticate with valid credentials</span></div><div><span style="font-family: courier;">Then I should be shown the restricted content</span></div></div><div><span style="font-family: courier;"><br /></span></div>Författaren skriver att det snygga med detta är att testet inte kopplas till en specifik implementation av användargränssnittet. Samma scenario kan användas för en desktop-app som en mobil-app.<div>Orden som används (<i>unauthenticated</i>, <i>restricted</i>, <i>credentials</i>) är förståeliga för en intressent som håller på med säkerhet.</div><div><br /></div><blockquote><div>It's true that using declarative style will mean you have to write more step definitions, but you can keep the code in those step definitions short and easy to maintain by pushing the actual work off into helper methods in your support code.</div></blockquote>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-49941713154612653172022-01-05T11:30:00.003+01:002022-01-09T08:49:48.831+01:00DevOps i 40-talets kolgruvor<p></p><p><b><span style="font-size: medium;">Grundtankarna i DevOps inget nytt</span></b><br />Boken <a href="https://www.bokus.com/bok/9781789133639/devops-paradox/">DevOps Paradox - The truth about DevOps by the people on the front line</a> av Viktor Farcic är en samling intervjuer med framträdande personer inom DevOps-rörelsen, där de får möjlighet att beskriva hur de definierar DevOps och deras tankar runt det, eftersom DevOps inte är en väldefinierad process enligt Victor:</p><p></p><blockquote><div>The thing is, if there's anything that my years of working in the field have taught me, it's that DevOps is not a well-defined process. There is no set of rules that must be followed. As I discovered in my journey, and as you'll read in these pages, it's even questionable whether there is such a thing as a "DevOps department" or a "DevOps engineer". This ambiguity is exactly why DevOps is so fascinating to me, and I hope to you, the reader, as well.</div></blockquote><div>En av personerna som intervjuas är Kevin Behr, som i sin intervju lyfter att DevOps-tänket med gemensamt mål, samarbete över gränser, kontinuerligt experimenterande och lärande användes naturligt som en "överlevnadsinstinkt" dolt nere i kolgruvorna på 40-talet. Nedan är en översättning av exemplet han tar upp i intervjun ihopbakat med lite av det han tar upp i sin dragning <a href="https://www.youtube.com/watch?v=QdGkOyB0bT0">First In Last Out - devops roots in coal mining - Kevin Behr - devopsdays Pittsburgh 2014</a></div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://images-na.ssl-images-amazon.com/images/I/41yZDu72rTS._SX331_BO1,204,203,200_.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="499" data-original-width="333" height="200" src="https://images-na.ssl-images-amazon.com/images/I/41yZDu72rTS._SX331_BO1,204,203,200_.jpg" width="133" /></a></div></div><div><br /></div><div><div><b><span style="font-size: medium;">Sociologer till kolgruvorna</span></b></div><div>Efter andra världskriget behövde kolproduktionen i Storbritannien öka som ett led i att snabba på återuppbyggandet av landet efter all förstörelse från kriget. Det låg alltså i nationens intresse att kolgruvornas produktion maximerades. För att uppnå detta anställde regeringen två sociologer, Eric Trist och Elliott Jacques, för att de skulle undersöka gruvorna som ett led i att se vilka som var mest produktiva och vad som gjorde att de var det.</div><div><br /><div>Trist och Jacques upptäckte att alla lågproducerande gruvor hade en hög grad av automatisering, men att automatiseringen inte uppnådde förväntad produktivitetshöjning.</div><div><br /></div><div><b><span style="font-size: medium;">Vad funkar bäst? Team work!</span></b></div><div>Bland de många olika typerna av gruvdrifter hittade de en design som verkligen särskiljde sig, en design som hade flera gånger högre kolproduktion än de andra. Utöver hög produktion så hade den även signifikant färre skador och en mycket stark lagkänsla!</div><div><br /></div><div>En annan skillnad de upptäckte var att arbetarna kom till jobbet som de skulle, vilket var en aning udda, för i andra gruvor var som regel 30% av arbetsstyrkan borta. Att jobba i kolgruva var farligt och det fanns många andra jobb i efterkrigstidens Storbritannien.</div><div><br /></div><div>För att få reda på orsaken till arbetarnas höga närvaro i de högproducerande gruvorna så pratade Trist och Jacques med arbetarna när de kom tillbaka efter sina skift, men det gav inga ledtrådar till vad som kunde vara annorlunda. Så de började följa med arbetarna ner i gruvorna.</div><div><br /></div>
<a class="gie-single" href="http://www.gettyimages.se/detail/3285109" id="5LtUqaguR9lm2grlM1AbhA" style="border: none; color: #a7a7a7; display: inline-block; font-weight: normal; text-decoration: none;" target="_blank">Embed from Getty Images</a><script>window.gie=window.gie||function(c){(gie.q=gie.q||[]).push(c)};gie(function(){gie.widgets.load({id:'5LtUqaguR9lm2grlM1AbhA',sig:'lleS5Nr7PSv_a8BBeZfsuYpZJ7g4szoYMCjjlG329U4=',w:'594px',h:'420px',items:'3285109',caption: true ,tld:'se',is360: false })});</script><script async="" charset="utf-8" src="//embed-cdn.gettyimages.com/widgets.js"></script>
<div><i>circa 1955: Welsh miners at work in a coal mine.</i></div><div><b><br /></b></div><div><b><span style="font-size: medium;">Självorganisering</span></b></div><div>Ovan jord så samlade skiftledaren alla arbetarna och gick igenom vad de förväntades göra. Men sen, väl nere i gruvan så märkte de direkt en skillnad: gruppen demokratiserade arbetet. De fokuserade på hela uppgiften, vad de skulle åstadkomma som arbetslag, istället för "jag fokuserar på mitt så gör du ditt".</div><div><br /></div><div>De pratade om vad som skulle göras och delade upp arbetet mellan sig på ett lämpligt sätt, t ex "Vem drack inte igår? Ok, du får hantera sprängmedlen idag." Vem håller koll på säkerheten? Vem kör borren? De var självorganiserade och självreglerade.</div><div><br /></div><div>Samtidigt prioriterade de att lära varandra sina uppgifter. På så sätt påverkades arbetsgruppens insats mindre en dag då någon hade ont eller kanske var tankspridd på grund av nåt som hänt i familjen så att personen inte klarade av sina vanliga uppgifter. Det var heller inte helt lätt att ta sig upp ur gruvan om nån blev allvarligt skadad under arbetet, därför behövde flera känna till hur man manövrerade de fordon och maskiner som behövdes för att ta sig ut.</div><div><br /></div><div><b><span style="font-size: medium;">Pareto-principen vid kunskapsspridning</span></b></div><div><a href="https://sv.wikipedia.org/wiki/Paretoprincipen">Wikipedia </a>beskriver Paretoprincipen såhär:</div><blockquote>Paretoprincipen är en matematisk fördelning enligt vilken 20 procent av orsakerna ofta står för 80 procent av verkan; den kallas ibland även 80/20-regeln. Vilfredo Pareto visade att 20 procent av den italienska befolkningen innehade 80 procent av egendomen och denna observation har av andra senare generaliserats.</blockquote><div>Inom mjukvaruutveckling <a href="https://en.wikipedia.org/wiki/Pareto_principle" target="_blank">verkar nedanstående gälla</a>:</div><div><ul style="text-align: left;"><li>80% av koden kan skrivas på 20% av tiden</li><li>20% av koden har 80% av buggarna</li><li>20% av funktionaliteten i ett program används 80% av tiden</li></ul></div><div>Kevin Behr teoretiserar att gruvarbetarna utnyttjade Paretoprincipen för sin kunskapsspridning, det vill säga "lär mig 20% av kunskapen som behövs för att utföra din upgift till 80%". </div><div><br /></div><div>Om att lära sig varandras uppgifter på det sättet säger han: "And that is what DevOps is!"</div></div></div><div><br /></div><div><b><span style="font-size: medium;">Sociotechnical systems (STS)</span></b></div><div>Utifrån sin forskning angående kolgruvornas effektivitet så var Eric Trist med och myntade begreppet <i><a href="https://en.wikipedia.org/wiki/Sociotechnical_system">sociotechnical systems</a>, </i>där <i>sociotechnical</i> refererar till kopplingen mellan de sociala och tekniska aspekterna av en organisation eller samhället som helhet. På grund av att de tekniska och de sociala bitarna kan gå in i varandra så mycket, så måste man vid en optimering av en process ta hänsyn till båda bitarna (teknisk utveckling och kvalitén på personernas arbetsliv). För optimerar man bara en del så riskerar oväntade effekter från den andra delen att motverka optimeringen.</div><div><br /></div><div>I kolgruvornas fall var det att man automatiserade gruvorna, men automatiseringen ledde till mer ensamarbete och arbetarnas arbetslivskvalité sjönk, vilket ledde till sämre mående och sämre arbetsmoral. Detta tas upp i podcasten <a href="https://www.talkingaboutorganizations.com/about-taop/">Talking About Organizations</a> avsnitt 34 <a href="https://www.talkingaboutorganizations.com/e34/">Sociotechnical Systems – Trist and Bamforth</a></div><div><br /></div><div><b><span style="font-size: medium;">Vad ta med sig från detta?</span></b><br />Ja, vad man ska dra för lärdom av detta? Kanske att om man är på gång att införa DevOps på arbetsplatsen inte stirra sig blind på processerna och verktygen för automatisering av kontinuerlig integration/installation och automatiserade tester utan även ha fokus på det sociala samarbetet?</div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-4047865596667089072021-10-30T21:18:00.002+02:002021-10-30T21:29:08.547+02:00Blazor gotcha: Use the @key attribute when visibility of list items can be toggled <h2 style="text-align: left;">Finding the "bug"</h2><p>We're building a Blazor web from scratch for the first time in a project at work. I like it and we've been able to go pretty fast although it's a new framework for all the devs in the team. But we ran into a strange behavior that looked like a bug.</p><p>In the web app a user can add locomotives and wagons to a list to create a train. Each of the vehicles in the list is represented of a header and a body, where the body can be collapsed or expanded.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkJ2MzlcYK5ugfnW2n48FzWe6IdQIkHWOmaRc2JNrEZIUx0wQY_xzqQID9bMwXBNTWslVX3yDAyQ9lFT0KrGKTpZTOl-YFsGNUK6cKRKIuUOomVx7poN7RMLXTAFr8Lvj3zhAwRJopbcLz/s635/Screenshot_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="396" data-original-width="635" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkJ2MzlcYK5ugfnW2n48FzWe6IdQIkHWOmaRc2JNrEZIUx0wQY_xzqQID9bMwXBNTWslVX3yDAyQ9lFT0KrGKTpZTOl-YFsGNUK6cKRKIuUOomVx7poN7RMLXTAFr8Lvj3zhAwRJopbcLz/w400-h250/Screenshot_1.png" width="400" /></a></div><p>User input for each vehicle is validated after entry. When a field is invalid a red frame is shown around the field and a validation error message is shown beneath it.</p><p>The strange behavior appeared when the body for one vehicle was expanded at the same time as the body for another vehicle was collapsed. When the use entered an invalid value in a field for one of the vehicles, the field <i>for the other vehicle</i> was marked as erroneous!</p><h2 style="text-align: left;">Reporting the "bug"</h2><p>I recreated the strange behavior in a minimal project and reported it as a bug in Blazor: <a href="https://github.com/dotnet/aspnetcore/issues/37391#">Input validation status gets mixed up when toggling content</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx8zIzy1_P76U5JEQjhIOeNE9ZgOVVQI3Jq7vTyO0ZPCG9TLAPvVSMxiPVmjTiFmCFsAavH9BGlh__F3QQSY0EnrZ09vFM9C1Xf4lh_PGiWfBgwc18ehut9MkcMp6o-GNq_eDht0b8ocZI/s672/Toggling+in+blazor.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="328" data-original-width="672" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx8zIzy1_P76U5JEQjhIOeNE9ZgOVVQI3Jq7vTyO0ZPCG9TLAPvVSMxiPVmjTiFmCFsAavH9BGlh__F3QQSY0EnrZ09vFM9C1Xf4lh_PGiWfBgwc18ehut9MkcMp6o-GNq_eDht0b8ocZI/w640-h312/Toggling+in+blazor.gif" width="640" /></a></div><p>After a few days I got the reponse:</p><p><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"" style="background-color: white; color: #24292f; font-size: 14px;"></span></p><blockquote><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"" style="background-color: white; color: #24292f; font-size: 14px;">Thanks for contacting us. It looks like you're missing the </span><code style="border-radius: 6px; box-sizing: border-box; color: #24292f; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 11.9px; margin: 0px; padding: 0.2em 0.4em;">@key</code><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"" style="background-color: white; color: #24292f; font-size: 14px;"> attribute for the elements which are rendered in a loop. You can learn more about this from </span><a href="https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-6.0#use-key-to-control-the-preservation-of-elements-and-components" rel="nofollow" style="background-color: white; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; text-decoration-line: none;">https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-6.0#use-key-to-control-the-preservation-of-elements-and-components</a></blockquote><p>The linked page says: </p><p><span face=""Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #171717; font-size: 16px;"></span></p><blockquote><span face=""Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #171717; font-size: 16px;">The mapping process of elements or components to a collection can be controlled with the </span><a data-linktype="relative-path" href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-6.0#key" style="background-color: white; box-sizing: inherit; cursor: pointer; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;"><code style="box-sizing: inherit; direction: ltr; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1em; outline-color: inherit;">@key</code></a><span face=""Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #171717; font-size: 16px;"> directive attribute. Use of </span><a data-linktype="relative-path" href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-6.0#key" style="background-color: white; box-sizing: inherit; cursor: pointer; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;"><code style="box-sizing: inherit; direction: ltr; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1em; outline-color: inherit;">@key</code></a><span face=""Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #171717; font-size: 16px;"> guarantees the preservation of elements or components based on the key's value.</span> </blockquote><p></p><a href="https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-6.0#use-key-to-control-the-preservation-of-elements-and-components" rel="nofollow" style="background-color: white; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 14px; text-decoration-line: none;"></a><p></p>It can be used like this:<p><span style="font-family: courier;"><ol><br /> @foreach (var person in people)<br /> {<br /> <li><br /> <Details @key="person" Data="@person.Data" /><br /> </li><br /> }<br /></ol></span></p><h2 style="text-align: left;">Not seen in any material</h2><p>I dont't remember seeing this in any Blazor material I've studied so far (pluralsight.com and the book "Blazor in Action"), so if you're going to use Blazor and create something with similar behavior, keep this post in mind! :)</p>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-32647904258108722912021-06-18T22:57:00.002+02:002021-06-18T23:05:03.201+02:00Write a ray tracer guided by Jamis Buck's test suite<p><span style="font-size: medium;"><b>Background</b></span></p><p>Having seen people write their own ray tracers, I've been curious about writing my own. And for a while I also believed I just could sit down and write one, without any help, until I tried. At least I failed fast :)</p><p>Fast forward a few years to the moment when I listened to the podcast <a href="https://developeronfire.com/podcast/episode-424-adam-gordon-bell-collecting-solutions" target="_blank">Developer On Fire</a>, where the interviewer asks the interviewee for book recommendations and the book <i>The Ray Tracer Challenge - A Test-Driven Guide to Your First 3D</i> <i>renderer </i>by Jamis Buck is mentioned. I bought <a href="https://pragprog.com/titles/jbtracer/the-ray-tracer-challenge/" target="_blank">it</a> and started coding.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeisBUExdY_6zTunor1W5zQmRIM5GOeKBhU0konoQHKSJa3fmPQ7BgHtBugg8PBLlvWkzj7DMB4ZgB-gnyWUw6wOf_rx-0P1-2Ly6Hsux3ewxXGxeDBqBJW6_eQxOAeRbIVy9lrXo7yd5y/s743/ray+tracer+front.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="743" data-original-width="617" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeisBUExdY_6zTunor1W5zQmRIM5GOeKBhU0konoQHKSJa3fmPQ7BgHtBugg8PBLlvWkzj7DMB4ZgB-gnyWUw6wOf_rx-0P1-2Ly6Hsux3ewxXGxeDBqBJW6_eQxOAeRbIVy9lrXo7yd5y/s320/ray+tracer+front.PNG" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><b>About the book</b></span></div><div class="separator" style="clear: both; text-align: left;">The book explains the theory you need and contains unit tests in <a href="https://cucumber.io/docs/gherkin/reference/" target="_blank">Gherkin</a>, which means that you can translate them to whichever programming language you want to use. </div><div class="separator" style="clear: both; text-align: left;">Here's an example of a test that subtracts a point from another, which should result in a vector:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEbs02myr3r2VhfZ4UceS42FL2SaBRDOHy_e1VrXqHIcUQT3aaWkA4G2pckxBbM2VUO1jmF8NCbve7jCHLYUE3c0e4wOAf1-6wkTCwTgFQCxt3JdLtQxUocGsZLRyx4lbyRPbD3-pqi9Di/s347/gherkin+example.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="347" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEbs02myr3r2VhfZ4UceS42FL2SaBRDOHy_e1VrXqHIcUQT3aaWkA4G2pckxBbM2VUO1jmF8NCbve7jCHLYUE3c0e4wOAf1-6wkTCwTgFQCxt3JdLtQxUocGsZLRyx4lbyRPbD3-pqi9Di/s16000/gherkin+example.PNG" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I used C# and NUnit, which made my test implementation look like this:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfP_ZAr3hmRQjggYUZ0Sf2os5cHg08vM4inKsjci8LTlUYVROPAuPCK8d042Txqj7HjsXa0AUjGmfwLjvFa77oJWXpGpuuktNTaYDjdnV3L8iIpeAN0bFJWu1CnM4m6S5LSTP22FkLcjzr/s377/unit+test+example+in+csharp.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="147" data-original-width="377" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfP_ZAr3hmRQjggYUZ0Sf2os5cHg08vM4inKsjci8LTlUYVROPAuPCK8d042Txqj7HjsXa0AUjGmfwLjvFa77oJWXpGpuuktNTaYDjdnV3L8iIpeAN0bFJWu1CnM4m6S5LSTP22FkLcjzr/s16000/unit+test+example+in+csharp.PNG" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">The algorithms that make the tests pass are written in pseudocode, so you have to translate them as well.</div><br /><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><b>What I learned</b></span></div><div class="separator" style="clear: both; text-align: left;"><u>Test first</u></div><div class="separator" style="clear: both; text-align: left;">I really liked the test first way of coding. It catched errors early which made it easier to spot and correct the bugs. It was good to build up a safety net of tests, because the code got pretty math intense and would be pretty hard to debug without them.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><u>Funny / not funny</u></div><div class="separator" style="clear: both; text-align: left;">The fun part was the coding and to see the resulting images. But creating sceneries and trying out different settings was not that fun, which makes it pretty useless to have my own ray tracer to play around with...</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><u>Recreational coding</u></div><div class="separator" style="clear: both; text-align: left;">Jamis Buck has also written a book about how to generate mazes, something he did when recovering from a burn out. He's sharing that story in the pod <a href="https://corecursive.com/025-burn-out-and-recreational-programming/" target="_blank">Corecursive</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><b>Examples of created images</b></span></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here's two examples of images I created. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><u>Snowflakes</u></div><div class="separator" style="clear: both; text-align: left;">This is supposed to look like falling snowflakes. I made it after learning how to create cylinders and cones and how to group simple shapes together.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwjXYKksGuBnV5t6lGZyvQiW6lmMi_pmBfxqB74v9JJKwJ3Nq0Al31l33mKKccSMQRfOQ5X6lhXlibHDYFOw0puxyqAFEfLujYWAZFjwReWPmzAahr4bZqXo3kWzi9URsatNJIBF4lZ7ef/s397/snowflakes.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="397" data-original-width="396" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwjXYKksGuBnV5t6lGZyvQiW6lmMi_pmBfxqB74v9JJKwJ3Nq0Al31l33mKKccSMQRfOQ5X6lhXlibHDYFOw0puxyqAFEfLujYWAZFjwReWPmzAahr4bZqXo3kWzi9URsatNJIBF4lZ7ef/s320/snowflakes.PNG" /></a></div><br /><p><u>The making of a kitchen table</u></p><p>Here's after learning to do cubes and planes and manipulate them, like scaling in different directions, move them and give them color and patterns. Also tried to do a kitchen lamp, but found out that the shadow logic was too simple so that a transparent object shadows as much as an opaque object.</p><p>Yes, I had at hard time positioning the table legs :)</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dw8rCbN_HIY-g4xC1iItywj3Rh2ManeThC5IHGFdjt_3nJqMu9q7U0JZbpkL2iCKPLsQuHLkrbuB0en_v7a4w' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p><span style="font-size: medium;"><b>The code</b></span></p><p>It took me quite a while to finish the book. The commit history shows that I began in June 2019 and finished in June 2021. I worked with it in bursts and often had long periods of inactivity.</p><p>I skipped the code for matrix manipulation, I used the <a href="https://numerics.mathdotnet.com/" target="_blank">MathNet.Numerics nuget package</a> instead to faster advance to the chapters that resulted in images.</p><p>My <a href="https://github.com/carlbjorknas/TheRayTracerChallenge" target="_blank">github repo</a> for this project.</p><p>When <a href="https://github.com/search?q=the+ray+tracer+challenge" target="_blank">searching for<i> The ray tracer challenge</i> at github</a>, I get 254 repo hits in 10 languages, where the most are in Rust (51), C++ (48), C# (32) and Go (17).</p><p>After finishing the book I also noticed that people have posted their learning journey on youtube, like <a href="https://www.youtube.com/playlist?list=PLAp0ZhYvW6Xbt-VMIde2pe_EpJ9d8tx4E" target="_blank">this playlist.</a></p>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-59532827490530112512021-04-25T21:48:00.003+02:002021-05-01T15:43:40.678+02:00A SourceTree lover sees Visual Studio catching up<h2 style="text-align: left;"><span style="font-family: verdana;">Background</span></h2><div><span style="font-family: verdana;">This was supposed to be a post about features that I find important for the daily work I do that the git gui SourceTree has and that Visual Studio's git tool lacks. But instead I learned that Visual Studio is catching up with its <i>Visual Studio 2019 16.10 Preview 2.1 </i>release!</span></div><div><span style="font-family: verdana;"><br /></span></div><h2 style="text-align: left;"><span style="font-family: verdana;">File change preview for historic commits</span></h2><div><span style="font-family: verdana;">Navigating the commit history and looking at file changes in Visual Studio is a pain, but today I downloaded <i>Visual Studio 2019 16.10 Preview 2.1 </i>and explored the news in its git tool. Looking at changes in historic commits is no longer a pain!</span></div><div><span style="font-family: verdana;"><br /></span></div><div><span style="font-family: verdana;">I also learned that Visual Studio can show diffs as inline or side-by-side.</span></div><div><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtqJgHwGnQCbfcYVPFU7NMS5I7fIDsRk6YCjoIdqIARgkgz7SdaFDaY6u7X-bWys8RSV3lC1_VT7ip2EefsKGLuTLS7h8Db42PRNdi4uJ7uXZq3Sf6yAqRMKmHpjFHVAMMxOUCvshuLLPp/s1176/Historic+changes.gif" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="831" data-original-width="1176" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtqJgHwGnQCbfcYVPFU7NMS5I7fIDsRk6YCjoIdqIARgkgz7SdaFDaY6u7X-bWys8RSV3lC1_VT7ip2EefsKGLuTLS7h8Db42PRNdi4uJ7uXZq3Sf6yAqRMKmHpjFHVAMMxOUCvshuLLPp/w320-h226/Historic+changes.gif" width="320" /></span></a></div><span style="font-family: verdana;"><br /></span><h2><span style="font-family: verdana;">SourceTree shows all branches in history</span></h2><h2><div style="text-align: left;"><span style="font-family: verdana; font-size: small; font-weight: normal;">In SourceTree you see ALL branches by default, which is the way I like it because I get the full latest commit history context immediately. This isn't possible in Visual Studio, you have to select the branch that has the latest commit to be able to see the history for all branches.</span></div><div><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqVR_6TNnvJqoouNrHohlo3dIwan1p_69Q7-Pfuy4Few7F1lyBzVLgyay-RnylcKgmSVsZkT8AXmUjHw-2K9zrpV6ZtzNYUj8Tu_h9jftvbv7yQaZqRT9Acgz0Fz_vpAw4YPiS7GyUgbA2/s1199/All+branches.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="492" data-original-width="1199" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqVR_6TNnvJqoouNrHohlo3dIwan1p_69Q7-Pfuy4Few7F1lyBzVLgyay-RnylcKgmSVsZkT8AXmUjHw-2K9zrpV6ZtzNYUj8Tu_h9jftvbv7yQaZqRT9Acgz0Fz_vpAw4YPiS7GyUgbA2/w400-h164/All+branches.png" width="400" /></span></a></div><span style="font-family: verdana;"><br /></span><div><span style="font-family: verdana; font-size: small; font-weight: normal;">If you ever would like to not see all branches in SourceTree, you can easily turn it off by selecting <i>Current Branch</i> in the dropdown, like this.</span></div><div><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb2VXj76IVaoRonHkc5fy4NZ8mOqwN5Z-qQisSbRwBVzmAzujP8r2bp-hF4AYWyChrOmeykOyMzf_nFv3BxKWedwo2xcASDRdCTvnY_izHI9tJQpVR_uuG406IbgfyfuP69H6clTKfx5LV/s810/Current+branch.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="270" data-original-width="810" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb2VXj76IVaoRonHkc5fy4NZ8mOqwN5Z-qQisSbRwBVzmAzujP8r2bp-hF4AYWyChrOmeykOyMzf_nFv3BxKWedwo2xcASDRdCTvnY_izHI9tJQpVR_uuG406IbgfyfuP69H6clTKfx5LV/w640-h213/Current+branch.png" width="640" /></span></a></div><span style="font-family: verdana;"><br /></span><div><span style="font-weight: normal;"><span style="font-family: verdana; font-size: small;">To show all branches is a feature under review by Microsoft </span></span></div><span style="font-family: verdana; font-size: small;"><span style="font-weight: 400;"><a href="https://developercommunity.visualstudio.com/t/how-do-i-view-the-history-of-all-branches-in-git/934801">https://developercommunity.visualstudio.com/t/how-do-i-view-the-history-of-all-branches-in-git/934801</a></span></span></h2><div><h2><span style="font-family: verdana;">Merges are shown better in SourceTree</span></h2><div><span style="font-family: verdana;">I find the branch history tree to be more clear in SourceTree. Compare these two images that pictures a branch branched off of <i>master</i>, and then the branch is merged back to <i>master</i>.</span></div><div><span style="font-family: verdana;"><br /></span></div><div><span style="font-family: verdana;">In SourceTree it looks just like that, a branch going out from <i>master </i>and then coming back to <i>master</i>.</span></div><div><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBMJ8ShzLQ0ZosSmzn22PJdbrlvtT6K9M0dVfphUqH_g3WapjUpOM6FBlPwvapEoWEC91Dh9yWfPryo3owtvFDNextA84OqismeQgiyFM5klKaVAEQXb32Ci2U__ZxCsuDppIKgsjA2HA/s627/Merge+SourceTree.JPG" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="120" data-original-width="627" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBMJ8ShzLQ0ZosSmzn22PJdbrlvtT6K9M0dVfphUqH_g3WapjUpOM6FBlPwvapEoWEC91Dh9yWfPryo3owtvFDNextA84OqismeQgiyFM5klKaVAEQXb32Ci2U__ZxCsuDppIKgsjA2HA/s16000/Merge+SourceTree.JPG" /></span></a></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-family: verdana;">In Visual Studio it looks like a branch has been branched off from <i>master</i>, but then it looks like <i>master </i>has been merged to the branch!? When merging, the merge commit has two parents instead of one. There is a primary parent (the branch merged to) and a secondary parent (the branch merged from) and VS seems to mix them up.</span></div><span style="font-family: verdana;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqWm4vZ0KUb-ljXEY1XZdjV22uhMLNQ8u1dd0pavOyODc5QDfD1WC25irg3yozPJ3Oc4xIZ_jtzBdX_YaDiuT1dz0EFPpdyetJLDlMgCWGHR28r5kaEu7k2AWwkwvFgnZ94J70dF4kiJ6d/s597/Merge+VS.JPG" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="109" data-original-width="597" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqWm4vZ0KUb-ljXEY1XZdjV22uhMLNQ8u1dd0pavOyODc5QDfD1WC25irg3yozPJ3Oc4xIZ_jtzBdX_YaDiuT1dz0EFPpdyetJLDlMgCWGHR28r5kaEu7k2AWwkwvFgnZ94J70dF4kiJ6d/s16000/Merge+VS.JPG" /></span></a></div></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: verdana;">I added a <a href="https://developercommunity.visualstudio.com/t/show-a-merge-commit-correctly-in-the-commit-tree/1407339" target="_blank">ticket</a> regarding this.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: verdana;">But the image below, taken from this <a href="https://developercommunity.visualstudio.com/t/how-do-i-view-the-history-of-all-branches-in-git/934801" target="_blank">ticket</a> hints about a rewrite of the the commit history tree visualization in VS. No merge is shown, but the tree looks different, and hopefully it will be easier to follow.</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: verdana;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirWvIoytyaAPXh2Lsq91ylSznh3m7y0lBj87IcG07o-Sxr0KrhyV54OviTBGMGwWzw8iEjqHsUHp5qOzoMQRYkX1ZL_PxmdYyNvZDOvFb58B61Rx5HZeifLrrSFu1hVeVlsIw5rACgySim/s470/new_history_tree.JPG" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: verdana;"><img border="0" data-original-height="298" data-original-width="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirWvIoytyaAPXh2Lsq91ylSznh3m7y0lBj87IcG07o-Sxr0KrhyV54OviTBGMGwWzw8iEjqHsUHp5qOzoMQRYkX1ZL_PxmdYyNvZDOvFb58B61Rx5HZeifLrrSFu1hVeVlsIw5rACgySim/s16000/new_history_tree.JPG" /></span></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><h2 style="text-align: left;"><span style="font-family: verdana;">SourceTree auto-adds commits message for merge with conflicts</span></h2><div><span style="font-family: verdana;">When doing a merge and the merge results in conflicts, a commit message like this the one below<span style="background-color: white; font-size: 16px;"> </span>is added automatically by SourceTree. Visual Studio adds nothing. </span></div><div><blockquote><span style="font-family: verdana;">Merged ‘master’ into 'a_feature_branch'. Conflicts: # Foo.h # Bar.cpp</span></blockquote><p><span style="font-family: verdana;">To be able to see which files that have had conflicts can be of help when you know that a feature has been added in a file, but that feature suddenly is gone or is buggy, because it probably disappeared in a manual merge conflict resolution that went wrong.</span></p></div><div><span style="font-family: verdana;">This also seems to be a feature under review.</span></div><div><a href="https://developercommunity.visualstudio.com/t/VS2019-auto-populate-git-merge-commit-me/586587"><span style="font-family: verdana;">https://developercommunity.visualstudio.com/t/VS2019-auto-populate-git-merge-commit-me/586587</span></a></div><div><span style="font-family: verdana;"><br /></span></div><h2 style="text-align: left;"><span style="font-family: verdana;">In SourceTree you can pull a branch that isn't currently active</span></h2><div><div><span style="font-family: verdana;">Yes, you can, and I thought it was something that made my branch handling smoother, but when writing this I can't come up with a scenario where it is needed.</span></div></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-60276219897781429652021-03-03T10:39:00.004+01:002021-03-03T10:58:57.831+01:00E-handla kläder med din digitala tvilling<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4DnIzrCbPQK_SEEMz5mmqu-qtp_LJ3I9TMAXipJjXLp1xZmRvB2l978oi5GsDNsr72TLXpkFgfSqgGx4jLE06eK7ksQ8j3Sz_FPcPHEbC3Juy26tyMt8f4eHf7cSqUT_U5245ivAJrOW/s2048/zizr+digital+twin+parts.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1424" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4DnIzrCbPQK_SEEMz5mmqu-qtp_LJ3I9TMAXipJjXLp1xZmRvB2l978oi5GsDNsr72TLXpkFgfSqgGx4jLE06eK7ksQ8j3Sz_FPcPHEbC3Juy26tyMt8f4eHf7cSqUT_U5245ivAJrOW/w278-h400/zizr+digital+twin+parts.gif" width="278" /></a></div><br /><p>Att e-handla kläder kan vara svårt, bland annat att gissa vilken storlek som passar bäst. Storleksangivelsen ger en fingervisning, men är långt ifrån en sanning om plagget kommer passa dig, eftersom storlekar kan skilja från tillverkare till tillverkare.</p><p>Och om du är osäker på storlek så kanske du beställer flera olika storlekar av samma plagg och skickar tillbaka resten. Det är det <a href="https://www.gu.se/nyheter/e-handelns-returer-av-klader-ar-en-miljobov" target="_blank">många som gör</a>. En himla massa paketskickande blir det totalt, vilket är ett slöseri. </p><p>För att lösa en del av den här problematiken så har Knowit skapat tjänsten Zizr, <a href="https://zizr.id/,">https://zizr.id/,</a> en tjänst där du kan ange vad du köpt och vilken storlek som passade dig. Utifrån dina köp och en massa andra klädköpares köpdata så kommer Zizr kunna hitta andra som har din storlek och därmed kunna ge storleksrekommendationer på kläder som de andra köpt och angett att de passar. </p><p>Dina digitala kroppsstorlekstvillingar behöver inte vara helkroppstvillingar, utan kan vara delkroppstvillingar, eftersom matchningen delas upp i fötter, underkropp och överkropp.</p><p>Det här är en existerande tjänst, dock är den än så länge bara i beta-stadie och har samarbete med endast två butiker, Junkyard och Kleins, men planen är såklart att knyta till sig så många butiker som möjligt.</p><p>Jag har skapat konto och skummat de två klädbutikerna. Än så länge har det inte blivit nåt köp, men jag gillar idén skarpt! Konceptet digitala tvillingar känns underutnyttjat, det är ett kraftfullt verktyg som skulle kunna användas för <a href="https://medicalfuturist.com/digital-twin-and-the-promise-of-personalized-medicine/" target="_blank">så mycket mer</a>. Men såklart, det är inte helt oproblematiskt med att dela med sig av sin personliga data inom alla områden.</p><p><a href="https://app.sli.do/event/2vibl5d0/live/questions" target="_blank">Här kan du titta</a> på en presentation om hela utvecklingsresan av Zizr.</p><p><br /></p>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-32250355572956717392021-03-02T16:35:00.000+01:002021-03-02T16:35:23.148+01:00Kontinuerlig ordvits<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZDOUnoNylIOpr_xLwRR0IaS6sgsqYNvWe8HTvwKy2RqtEJ-SGZFP27xq1kvI1pWsh4vIA32YzJgXIA2TslTmUjt0ZkjLwQ7DmUT4nTyha6A4A2oRWayIcU7lyqhKYc4B9eUnV3ey9cYRT/s1612/20210302_162556.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1209" data-original-width="1612" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZDOUnoNylIOpr_xLwRR0IaS6sgsqYNvWe8HTvwKy2RqtEJ-SGZFP27xq1kvI1pWsh4vIA32YzJgXIA2TslTmUjt0ZkjLwQ7DmUT4nTyha6A4A2oRWayIcU7lyqhKYc4B9eUnV3ey9cYRT/w400-h300/20210302_162556.jpg" width="400" /></a></div><br /><p></p>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-51361648004593204252020-12-22T12:38:00.003+01:002020-12-22T12:45:06.822+01:00Det går troll i mjukvarulitteraturen<h3 style="text-align: left;"> Gamla "sanningar"</h3><div>Jag har läst en hel del mjukvarulitteratur och märkt att en del exempel är återkommande och anges med referenser till forskning. Jag minns inte att jag någonsin tidigare ställt mig frågan <i>Kan det här verkligen vara sant?</i> och börjat gräva i referenser. Till exempel läste jag "Facts and Fallacies of Software Engineering", en bok med en förtroendeingivande titel och en inledning som hyllar forskning, vilket invaggade mig i nån slags tro att <i>den här författaren, han har gjort sitt undersökningsjobb. </i>Men nu verkar det inte bättre än att han ramlat i samma grop som så många andra.</div><div><br /></div><div>Om det är nån mer som är lika "lättlurad" som jag så skulle jag vilja rekommendera en bok som är något av en ögonöppnare "<a href="https://leanpub.com/leprechauns" target="_blank">The Leprechauns of Software Engineering: How folklore turns into fact and what to do about it</a>", för där har författaren verkligen följt referenser och försökt hitta källan till flera av de här återkommande exemplen. Du kanske har hört talas om att forskning visar att det finns en stor skillnad, upp till 28 gånger, i produktivitet mellan olika programmerare? Eller sett <i>The cone of uncertainty</i>, som sägs beskriva osäkerheten i projektestimat vid olika tidpunkter av projektet<i>?</i></div><div><i><br /></i></div><div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgRWk7Z6QtdooCz0aYmu-StL5nIxo7ivrXPVZFIu3ujkeWpSxjUHQE5dJD2wNSxjHKgh6VuByAn3d1u0ycgLTDbPFpcr9EtrQgPINXdEDFYkyH4Iar4NTVvr50k9NO0OhYKHbB8GxVyngM/s734/The+cone+of+uncertainty.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="561" data-original-width="734" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgRWk7Z6QtdooCz0aYmu-StL5nIxo7ivrXPVZFIu3ujkeWpSxjUHQE5dJD2wNSxjHKgh6VuByAn3d1u0ycgLTDbPFpcr9EtrQgPINXdEDFYkyH4Iar4NTVvr50k9NO0OhYKHbB8GxVyngM/w400-h306/The+cone+of+uncertainty.PNG" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Bilden tagen från https://www.construx.com/books/the-cone-of-uncertainty/</td></tr></tbody></table><br />Vad tror du att författaren Laurent Bossavit hittar när han följer spåren av referenser för nyss nämnda exempel, och ett par till, allt djupare? Jo, till exempel att:</div><div style="text-align: left;"><ul><li>the papers are not really empirical research </li><li>the papers support weaker versions of the claim </li><li>the papers don’t support the claim directly, but only cite research that does</li><li>the more recent papers are not original research, but only cite older ones </li><li>the papers are in fact books or book-length, and you’ll be looking for a needle in a haystack</li><li>the papers are obscure, hard to find, out of print or paywalled, and thus hard to verify </li><li>the papers are selected only on one “side” of an ongoing controversy</li></ul><div><br /></div>Som en som läst om de här exemplen återkommande gånger så tyckte jag det här var en riktigt intressant bok! Och jag har börjat bli lite mer ifrågasättande av författares referenshantering och även av forskningsresultat och försökt gräva själv några gånger. Slarv med källor och referenser verkar inte bara vara nåt som görs i mjukvarulitteratur, det förekommer nog överallt. Till exempel det här med <a href="http://www.codingswede.se/2020/12/ger-domare-oftare-en-fallande-dom-nar.html" target="_blank">hur juridiska domare dömer vid olika tider på dagen</a>.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://leanpub.com/leprechauns" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="1132" data-original-width="800" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6LWWJUQ1JhFFmIEyUcTgVYPBgAZ3D_YSyKTwhcez0cRE5CgtmFkeDMka1gW_7RNpZ6BndCdEKSZC37Q-417U42spgAYfC70I9SeIc5GJEWLHC65i-kYZay2Ew9B-kSTxH04TunlzOiaWx/w283-h400/hero2x.png" width="283" /></a></div><br /><div><br /></div><div>Med lite referenser så verkar allmänt kända sanningar kunna skapas :)<br /><blockquote><i>Early results were often criticized, but decades of
research have now accumulated in support of the incontrovertible fact that bugs are caused by bugproducing leprechauns who live in Northern Ireland
fairy rings. (Broom 1968, Falk 1972, Palton-Spall
1981, Falk & Grimberg 1988, Demetrios 1995, Haviland 2001)
</i></blockquote></div><div><br /></div><div><br /></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-68285159252917583292020-12-12T23:22:00.000+01:002020-12-12T23:22:36.208+01:00Ger domare oftare en fällande dom när de är hungriga?<h3 style="text-align: left;"><span style="font-family: arial;">Välkänd studie</span></h3><p><span style="font-family: arial;">Du kanske har hört talas om studien som tittar på mönstret hur juridiska domare dömer under olika tider på dagen, att de oftare ger fällande domar när de är hungriga före sina måltider? Den är citerad i flertalet böcker, bland annat i:</span></p><p></p><ul style="text-align: left;"><li><span style="font-family: arial;"><i>Thinking, Fast and Slow</i><br />Delar upp hjärnan i två system, System 1 som är snabbt men slarvigt och System 2 som är korrekt men energikrävande. Studien passar in i tankarna i boken om att när energinivåerna är låga så sätter inte System 2 igång och System 1 tillåts ta slarviga beslut.<br /><br /></span></li><li><span style="font-family: arial;"><i>Black box thinking</i><br />Handlar om förbättringsarbete och hur det försvåras när berörda personers självbild krockar med fakta, t ex en domares självbild som ofelbar. Studien används för att påvisa behovet av förbättringar inom rättsväsendet.<br /><br /></span></li><li><span style="font-family: arial;"><i>Life 3.0, Being Human in the Age of Artificial Intelligence</i><br />Tar upp studien som ett exempel på var en AI skulle kunna göra ett bättre jobb, en robot-domare.</span></li></ul><p></p><p><span style="font-family: arial;">Jag tycker att det låter både troligt och otroligt på samma gång, men är studien tillförlitlig?</span></p><h3 style="text-align: left;"><span style="font-family: arial;">Om studien <i>Extraneous factors in judicial decisions</i></span></h3><div><span style="font-family: arial;">Tre forskare, Shai Danziger, Jonathan Levav och Liora Avnaim-Pesso ville undersöka om det fanns någon sanning i talesättet <i>justice is what the judge ate for breakfast</i>. Är domare rationella eller påverkas de av yttre juridiskt ovidkommande faktorer som hunger eller mental utmattning när de dömer.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Deras <a href="https://www.pnas.org/content/108/17/6889">forskningsartikel</a> publicerades 2011 och handlade om en 10 månader lång studie där data samlats in under 50 dagar och täckte 1 112 domar, dömda av åtta domare. Domarna presiderade i två olika rättegångsnämnder för villkorlig frigivning som nyttjades av fyra större fängelser i Israel.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Dagarna delades upp i tre sessioner, med två måltider emellan. En domare dömde från 14 fall upp till 35 fall per dag, där ett fall i medel tog cirka 6 minuter.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Det de upptäckte var att andelen friande domar i början av varje session började på cirka 65 procent, för att sedan sjunka under sessionens gång och i slutet komma ner till nästan 0 procent friande domar! </span></div><div><span style="font-family: arial;">En fånge skulle ha 35 gånger större chans att få villkorlig frigivning om denne kommer först istället för sist i en session, <a href="http://journal.sjdm.org/16/16823/jdm16823.html">enligt Andreas Glöckner</a>.</span></div><div><span style="font-family: arial;"><br /></span></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSwzqolQsznX7c3CsWiE9yMdaCVfM7j0BsliniXyd84Ei4Ct3M2t4R0Tts5roJRo0VX-uZlGu9EUt4NAXkp-txsjrdaeIh3RqKjg8TachM5SNIeHeA4FOJKhLQ9Not0Sj_OMWQxY6HBJkp/s1289/Proportion+favorable+decisions.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><span style="font-family: arial;"><img border="0" data-original-height="778" data-original-width="1289" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSwzqolQsznX7c3CsWiE9yMdaCVfM7j0BsliniXyd84Ei4Ct3M2t4R0Tts5roJRo0VX-uZlGu9EUt4NAXkp-txsjrdaeIh3RqKjg8TachM5SNIeHeA4FOJKhLQ9Not0Sj_OMWQxY6HBJkp/w400-h241/Proportion+favorable+decisions.PNG" width="400" /></span></a></td></tr><tr><td class="tr-caption"><span style="font-family: arial; font-size: x-small;">Proportion of rulings in favor of the prisoners by ordinal position. Circled points indicate the first decision in each of the three decision sessions; tick marks on x axis denote every third case; dotted line denotes food break. Because unequal session lengths resulted in a low number of cases for some of the later ordinal positions, the graph is based on the first 95% of the data from each session.</span></td></tr></tbody></table><div><span style="font-family: arial;"><br /></span></div><h3 style="text-align: left;"><span style="font-family: arial;">Kan siffrorna stämma?</span></h3><div><span style="font-family: arial;">Studien har blivit populär och välkänd, men att "hungereffekten" eller "utmattningsseffekten" skulle ha så stor påverkan är det flera som har reagerat på. En motreaktion som inte alls fått samma genomslag.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Keren Weinshall-Margel och John Shapard har besvarat forskningsartikeln med ett brev, <a href="https://www.pnas.org/content/108/42/E833.full">Overlooked factors in the analysis of parole decisions</a>, där de - efter att ha intervjuat tre försvarsadvokater, en domare och fem fängelseanställda - tar upp några faktorer de tänker har förbisetts som kan ha påverkat utfallet.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Studien gjorde gällande att fallens ordning kom i slumpartad ordning. Men under intervjuerna framkom att det fanns flera saker som påverkade fallens ordning. Till exempel att alla fångar från ett fängelse skulle hinnas med innan man tog rast och efter rasten fortsatte man med fångar från ett annat fängelse. Inom varje session så var det vanligt att fallen med fångar som hade advokat hanterades före de som saknade advokat. Att företrädas av en advokat ökar sannolikheten till bifall från 15% till 35%.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">En annan faktor var att både fall med avslag och fall som sköts upp räknades som avslag. Uppskjutning av fall förekom oftare senare i en session. Forskarna försvarade det med att för domaren innebar beslut om uppskjutning samma sak, att status quo bibehölls, ett lättare beslut att ta om man är trött. Totalt avslogs 64,2% av fallen, varav 48,4% var uppskjutningar.</span></div><div><span style="font-family: arial;"><br /></span></div><span style="font-family: arial;">Andreas Glöckner har också ifrågasatt studien och gjort <a href="http://journal.sjdm.org/16/16823/jdm16823.html">simuleringar</a> som påvisar att effekterna är övervärderade. En orsak han lyfter som påverkar de sjunkande kurvorna är att olika många fall hinns med i olika sessioner, vilket leder till att gruppstorleken minskar ju senare i en session de har hanterats. Så de domar för de senare fallen i en session med många fall får högre genomslag. Lägger man ihop det med att fall för fångar utan advokat kommer sist och att de fallen oftare får avslag så blir det i sig en sjunkande kurva.</span><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Danïel Lakens <a href="http://nautil.us/blog/impossibly-hungry-judges">avfärdar resultaten</a> baserat på den orealistiska storleken av effekten med:</span></div><div><blockquote><i><span style="font-family: arial;">If hunger had an effect on our mental resources of this magnitude, our society would fall into minor chaos every day at 11:45 a.m. Or at the very least, our society would have organized itself around this incredibly strong effect of mental depletion. Just like manufacturers take size differences between men and women into account when producing items such as golf clubs or watches, we would stop teaching in the time before lunch, doctors would not schedule surgery, and driving before lunch would be illegal. If a psychological effect is this big, we don’t need to discover it and publish it in a scientific journal—you would already know it exists. Sort of how the “after lunch dip” is a strong and replicable finding that you can feel yourself (and that, as it happens, is directly in conflict with the finding that judges perform better immediately after lunch—surprisingly, the authors don’t discuss the after lunch dip).</span></i></blockquote><p><span style="font-family: arial;">Ja, vad ska man tro? Forskning och statistik verkar iallafall komplext :)</span></p><h3 style="text-align: left;"><span style="font-family: arial;">Referenser</span></h3><div><b><span style="font-family: arial;">Forskningsartikeln</span></b></div><div><span style="font-family: arial;"><i>Extraneous factors in judicial decisions</i> </span></div><div><a href="https://www.pnas.org/content/108/17/6889"><span style="font-family: arial;">https://www.pnas.org/content/108/17/6889</span></a></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Brevet</span></b></div><i><span style="font-family: arial;">Overlooked factors in the analysis of parole decisions</span></i><div><a href="https://www.pnas.org/content/108/42/E833.full"><span style="font-family: arial;">https://www.pnas.org/content/108/42/E833.full</span></a></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Forskarnas svar på brevet</span></b></div><i><span style="font-family: arial;">Reply to Weinshall-Margel and Shapard: Extraneous factors in judicial decisions persist</span></i><div><a href="https://www.pnas.org/content/108/42/E834"><span style="font-family: arial;">https://www.pnas.org/content/108/42/E834</span></a></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Andreas Glöckners simuleringar</span></b></div><i><span style="font-family: arial;">The irrational hungry judge effect revisited: Simulations reveal that the magnitude of the effect is overestimated</span></i><div><a href="http://journal.sjdm.org/16/16823/jdm16823.html"><span style="font-family: arial;">http://journal.sjdm.org/16/16823/jdm16823.html</span></a></div><div><span style="font-family: arial;"><br /></span></div><div><b><span style="font-family: arial;">Danïel Lakens bloggpost</span></b></div><i><span style="font-family: arial;">Impossibly Hungry Judges</span></i><div><a href="http://nautil.us/blog/impossibly-hungry-judges"><span style="font-family: arial;">http://nautil.us/blog/impossibly-hungry-judges</span></a></div><div><br /></div></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com5tag:blogger.com,1999:blog-1674838990122718975.post-64313231531972160012020-11-22T15:40:00.000+01:002020-11-22T15:45:53.803+01:00Kanban for Software Development consists of three rules only (my memory told me anyway)<h3 style="text-align: left;">The three rules (in my head)</h3><div>Kanban used for software development has in my mind been built on the three rules below.</div><div><ul><li><b>Visualize the workflow</b></li><li><b>Limit Work In Progress (WIP)</b><br /></li><li><b>Measure the lead time</b></li></ul><div>And depending on the situation the team exists in, the rules can be narrowed down even more. Like, if the predictability isn't a big concern, the rule about measuring lead time can be left out. </div></div><div>And also, if team members are conscientious enough about not starting too much new work before finishing already initiated work, the WIP limits don't seem to add much.</div><div>In that case, the only thing needed is to visualize your workflow. But if you don't do <b>that either</b>, then I find it hard to get anything out of Kanban.</div><div><br /></div><div>So, that's the reason that one day when it became obvious that the tasks on my team's Kanban board was out of sync with reality, I told the developers:</div><div>- "If we don't keep the Kanban board in sync with reality, we follow <b>none of the three rules only</b> of Kanban!" </div><div>One of them responded teasingly:</div><div>- "Well, what do you expect from a bunch of we'll-do-as-we-pleases?"</div><div>(The word used was "rättshaverister", but I can't translate that into a word that describes what I think the person meant).</div><div><br /></div><div>There was no further discussion and the board was adjusted after a while. But having referred to rules brought up from my memory, I also remembered that when reading about them a few years ago I hadn't got a good grip on where they come from, what their original source is. So, before banging them in anyone's head again, it was time for a bit of research :)</div><div><br /></div><h3 style="text-align: left;">The closest source: <i>Kanban and Scrum, making the most of both</i></h3><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Hp1sR0xlW0WIHv0IWdwJNdcsaFo4kmeXPXheTeiaB2tJZwg9z2U-Z7yEcjtGvADQhp9YNAkD4Kpg4RZLI8Fv2J4O7r9Mpzurv52e7fbS19IQpWiG5a2wRBEURRR7tAbs0wo7HQVP0n2I/s358/Kanban+and+Scrum%252C+making++the+most+of+both.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="358" data-original-width="251" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Hp1sR0xlW0WIHv0IWdwJNdcsaFo4kmeXPXheTeiaB2tJZwg9z2U-Z7yEcjtGvADQhp9YNAkD4Kpg4RZLI8Fv2J4O7r9Mpzurv52e7fbS19IQpWiG5a2wRBEURRR7tAbs0wo7HQVP0n2I/w140-h200/Kanban+and+Scrum%252C+making++the+most+of+both.PNG" width="140" /></a></div>I remembered that I read about the rules in the book <i>Kanban and Scrum, making the most of both </i>by <i>Henrik Kniberg</i> and <i>Mattias Skarin. </i></div><div><br /></div><div>So I began with trying to find more info there. There they were, with a short explanation for each rule. But I lost the word "rules", because the only thing the book says about them is "<i>Kanban in a nutshell</i>" and then lists the three points. Not a word about "rule".</div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Next up: <i>Crisp's homepage</i></h3><div>Both Henrik Kniberg and Mattias Skarin works at Crisp, so I took a look at Crisp's homepage. And yes, the same points are mentioned <a href="https://www.crisp.se/gratis-material-och-guider/kanban">there</a>, with just a touch of more context: </div><div>"<i>There are many flavors, but the core of Kanban means</i>:"</div><div>Ok, so there are different flavors?! Like "Standards are good, everyone should have their own."?</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3MlMKlHZD7ynTAIGMMw2Jzbq5JcdS8HQkvCAWpbmEVpDZicGjSLDjYA58-7bpOSyrpAebru97ljcSoGgYDMHYIfTLc6NM8U46xYSDO4P-jqozK28mN5DrWeYoEruO4nqMObU6uKaGO-P/s482/How+does+kanban+work.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="442" data-original-width="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3MlMKlHZD7ynTAIGMMw2Jzbq5JcdS8HQkvCAWpbmEVpDZicGjSLDjYA58-7bpOSyrpAebru97ljcSoGgYDMHYIfTLc6NM8U46xYSDO4P-jqozK28mN5DrWeYoEruO4nqMObU6uKaGO-P/s16000/How+does+kanban+work.PNG" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div>On the page I also found this:<div><i><blockquote>At Toyota, Kanban is the term used for the visual & physical signaling system that ties together the whole Lean Production system. Most agile methods such as Scrum and XP are already well aligned with lean principles. In 2004, however, David Anderson pioneered a more direct implementation of <a href="http://en.wikipedia.org/wiki/Lean_Thinking">Lean Thinking</a> and <a href="http://en.wikipedia.org/wiki/Theory_of_constraints">Theory of Constraints</a> to software development. Under the guidance of experts such as <a href="http://www.reinertsenassociates.com/">Don Reinertsen</a>, this evolved into what David called a ”Kanban system for software development”, and which most people now simply refer to as ”Kanban”.</blockquote></i>Wow, a pioneer, David Anderson seemed as a promising track to research further!<br /><div><br /></div><h3 style="text-align: left;">David Anderson, a pioneer<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWRMt17EOsCBVt_jrI-dJ9SGEaw7W-vgYmZR-I2iUfZeFv1cFH-mB3_NrbCegpTQM7fEJo7bq69BxnxM-62XXwEMuSrhLjGba1zhOP9eCcMbI78DlkqhRC0uSoFpBnqcYTPgmICe0vs3HF/s319/Kanban.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="319" data-original-width="262" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWRMt17EOsCBVt_jrI-dJ9SGEaw7W-vgYmZR-I2iUfZeFv1cFH-mB3_NrbCegpTQM7fEJo7bq69BxnxM-62XXwEMuSrhLjGba1zhOP9eCcMbI78DlkqhRC0uSoFpBnqcYTPgmICe0vs3HF/w164-h200/Kanban.PNG" width="164" /></a></div></h3><div>Crisp's homepage linked to the book <i><a href="https://www.amazon.com/Kanban-Successful-Evolutionary-Technology-Business/dp/0984521402">Kanban: Successful Evolutionary Change for Your Technology Business</a> </i>by <i>David Anderson. <br /></i></div><div><i><br /></i></div><div>"<i>If there is any book that will bring clarity to this, it will be this one!</i>", I thought. </div><div><br /></div><div>What I found was:</div><div><blockquote><div><i>Kanban uses five core properties to create an emergent set of Lean behaviors in organizations. These properties have been present in every succesful implementation, including the one at Microsoft described in chapter 4.</i></div><div><i>The five properties are:</i></div><div><ul><li><i>Visualize Workflow</i></li><li><i>Limit Work-in-Progress</i></li><li><i>Measure and Manage Flow</i></li><li><i>Make Process Policies Explicit</i></li><li><i>Use Models to Recognize Improvement Opportunities</i></li></ul></div></blockquote></div><div>Ok... so "Properties", not "Rules". </div><div><br /></div><div>But <i>five </i>instead of <i>three</i>? The first three properties maps well to the ones mentioned before, but what do the two extra mean and why did Henrik and Mattias drop them?<i> </i></div><div><i><br /></i></div><h4 style="text-align: left;">What the two "new" Kanban properties means</h4><div><u>Make process policies explicit</u></div><div>This can be done by agreeing on and writing down the "Defintion of Done" policies you use between the different stages in your process. and perhaps putting them up on your board for good visibility.</div><div><br /></div><div><u>Use models to recognize improvement opportunities</u></div><div>Your process can probably be improved by reducing "waste" or finding and act on bottlenecks. There are models for doing that, as David says:</div><div><i></i><blockquote><i>Common models in use with Kanban includes the Theory of Constraints, Systems Thinking, an understanding of variability through the teachings of W. Edwards Deming, and the concept of </i>muda <i>(waste) from the Toyota Production System. The models used with Kanban are continually evolving, and ideas from other fields, such as sociology, psychology, and risk management are appearing in some implementations.</i></blockquote><i></i></div><h4 style="text-align: left;">Why were they dropped?</h4><div>David's book predates Henrik's, why has the number of properties gone from five to three? I asked that question on Crisp's Facebook page. None of the original authors answered me, but another author did, he pointed me to the next book, <i>Kanban in action</i>.</div><div><br /></div><h3 style="text-align: left;">Others have been pondering this too in <i>Kanban in Action</i></h3><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqIEiQNCegxi1-gQ-M8nPbfxF1uBVVQxPrJ_ZjCfaWOnEnHnao9184JfkOdU9eShfIi2qFqT0MpX4XR-NvdW1VZqMJQr1YsL2MIZjrp32DwK-dL9Uw3CZqux2xN7KttZrH7KzzfXROmGZc/s346/Kanban+in+action.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="346" data-original-width="260" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqIEiQNCegxi1-gQ-M8nPbfxF1uBVVQxPrJ_ZjCfaWOnEnHnao9184JfkOdU9eShfIi2qFqT0MpX4XR-NvdW1VZqMJQr1YsL2MIZjrp32DwK-dL9Uw3CZqux2xN7KttZrH7KzzfXROmGZc/w150-h200/Kanban+in+action.PNG" width="150" /></a></div>At first, reading the book <i>Kanban in Action</i> by <i>Marcus Hammarberg</i> and <i>Joakim Sundén </i>made it even<br /> messier! But also revealed interesting info.</div><div><br /></div><div>There is a section titled</div><div><i><b>Three principles? I thought it was five properties. Or was it six practices? </b></i></div><div>which indicates that others have had a hard time finding their way to getting clarity about this. That section contains the text below.</div><blockquote><div><i>The three basic principles we describe in this section make up the foundation that kanban is based on. Recently, David J. Anderson and others have extended the three basic principles to five properties and later six practices; these are now referred to as the </i>core practices<i>.</i></div></blockquote><p>Anyway, this info and Google led me to David Anderson's latest defintion, called <i>Principles and General Practices of Kanban.</i></p><h3 style="text-align: left;">A blog post about <i>Principles and General Practices of Kanban</i></h3><div>In March 18, 2020, David Anderson added a <a href="https://djaa.com/principles-and-general-practices-of-the-kanban-method/">post on his blog</a>, from where I've copied the text below. In his post he also examines each point a bit deeper.</div></div><div><br /></div><span style="font-family: verdana; font-size: x-small;"><i>In my book, Kanban – Successful Evolutionary Change for your Technology Business, I identified what I called the “5 core properties” that I’d observed to be present in each successful implementation of Kanban.<br /><br />Since the book was published, we’ve expanded this list and they are now known as the Principles and General Practices of Kanban.</i></span><div><span style="font-family: verdana; font-size: x-small;"><i><br /><b>Principles of the Kanban Method …</b><br /><ul style="text-align: left;"><li><span style="font-family: verdana;">Start with what you do now</span></li><li>Agree to pursue incremental, evolutionary change</li><li>Respect the current process, roles, responsibilities & titles</li><li>Encourage acts of leadership at all levels in your organization</li></ul><b>General Practices of the Kanban Method …</b><br /><ol style="text-align: left;"><li><span style="font-family: verdana;">Visualize (the work, workflow and business risks)</span></li><li>Limit WIP</li><li>Manage Flow</li><li>Make Process Explicit</li><li>Implement Feedback Loops</li><li>Improve Collaboratively, Evolve Experimentally (using models & the scientific method)</li></ol></i></span><h3 style="text-align: left;"><br /></h3><h3 style="text-align: left;">But <i>Three</i>, where did <i>Three </i>come from?</h3><div>Well, I can't tell for sure. I've already put too much research effort into this and I think I can live without knowing that, although it doesn't feel like full closure... :) Anyway, now I know more about the history of Kanban used in software development, which I hadn't if I hadn't tried finding the root of the <i>Three Kanban rules </i>in my mind<i>.</i></div></div><div><br /></div><div>Please, do leave a comment if you have interesting info regarding this! :)</div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com2tag:blogger.com,1999:blog-1674838990122718975.post-56681235964207206822020-10-30T18:40:00.001+01:002020-10-30T18:43:34.849+01:00The guest quotes about Clean Code in the book Clean Code<h2 style="text-align: left;">Clean code and code quality</h2><p>The introduction of the book <i>Clean Code </i>by<i> Robert C Martin</i> begins with the image below, which I find funny beacuse its true. Even when the code is good, you can get wtf moments, but maybe more of surprise of becoming aware of odd things the program has to handle or usable stuff in the framework you didn't know existed than of strange or overcomplicated solutions.</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF9t5IirpHu06BsPO6WsMngNRIUOKK_C57blqTfPkSDq8cp2IZpRNc0ILW9IZ8I6JwQKWgOs-wpnURPA1w1MuBUiXQlH_w63xpbEctau_WBoLAhNgbsBKW3CxtAidKWx00sC1F4vbHOxb2/s500/wtfm.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="471" data-original-width="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF9t5IirpHu06BsPO6WsMngNRIUOKK_C57blqTfPkSDq8cp2IZpRNc0ILW9IZ8I6JwQKWgOs-wpnURPA1w1MuBUiXQlH_w63xpbEctau_WBoLAhNgbsBKW3CxtAidKWx00sC1F4vbHOxb2/s16000/wtfm.jpg" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><h2 style="clear: both; text-align: left;">What is clean code?</h2><div>The focus of this post is on the content of the first chapter, which contains answers from other well-known and deeply experienced programmers on what they think defines Clean Code. Just to have all the quotes in a single place and easily retrievable.</div><div><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Bjarne Stroustrup</b>, inventor of C++ and author of <i>The C++ Programming Language</i></div><div class="separator" style="clear: both; text-align: left;"><i></i><blockquote><i>I like my code to be elegant and efficient. The logic should be straightforward to make it hard for bugs to hide, the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy, and performance close to optimal so as not to tempt people to make the code messy with unprincipled optimizations. Clean code does one thing well.</i></blockquote><p> </p><p><b>Grady Booch</b>, author of <i>Object Oriented Analysis and Design with Applications</i> </p><p><i></i></p><blockquote><i>Clean code is simple and direct. Clean code reads like well-written prose. Clean code never obscures the designer's intent but rather is full of crisp abstractions and straightforward lines of control.</i></blockquote><p><i> </i></p><p></p></div><b>"Big" Dave Thomas</b>, founder of OTI, godfather of the Eclipse strategy<p></p><p></p><blockquote style="font-style: italic;">Clean code can be read, and enhanced by a developer other than its original author. It has unit and acceptance tests. It has meaningful names. It provides one way rather than many ways for doing one thing. It has minimal dependencies, which are explicitly defined, and provides a clear and minimal API. Code should be literate since depending on the language, not all necessary information can be expressed clearly in code alone.</blockquote><p> </p><p><b>Michael Feathers</b>, author of <i>Working Effectively with Legacy Code</i></p><p></p><blockquote style="font-style: italic;">I could list all of the qualities that I notice in clean code, but there is one overarching quality that leads to all of them. Clean code always looks like it was written by someone who cares. There is nothing obvious that you can do to make it better. All of those things were thought about by the code's author, and if you try to imagine improvements, you're led back to where you are, sitting in appreciation of the code someone left for you - code left by someone who cares deeply about the craft.</blockquote><p> </p><p><b>Ward Cunningham</b>, inventor of Wiki, inventor of Fit, coinventor of eXtreme Programming. Motive force behind design patterns. Smalltalk and OO thought leader. The godfather of all those who care about code.</p><p></p><blockquote style="font-style: italic;">You know you are working on clean code when each routine you read turns out to be pretty much what you expected. You can call it beautiful code when the code also makes it look like the language was made for the problem.</blockquote><p style="font-style: italic;"><br /></p><p>And the longest last<i>...</i></p><p><b>Ron Jeffries, </b>author of <i>Extreme Programming Installed</i> and <i>Extreme Programming Adventures in C#</i></p><p></p><blockquote><i>In recent years I begin, and nearly end, with <a href="https://martinfowler.com/bliki/BeckDesignRules.html">Beck's rules of simple code</a>. In priority order, simple code:<br /><ul style="text-align: left;"><li><i>Runs all the tests;</i></li><li>Contains no duplication;</li><li>Expresses all the design ideas that are in the system;</li><li>Minimizes the number of entities such as classes, methods, functions and the like.</li></ul></i></blockquote><blockquote><p><i>Of these, I focus mostly on duplication. When the same thing is done over and over, it's a sign that there is an idea in out mind that is not well represented in the code. I try to figure out what it is. Then I try to express that idea more clearly.</i></p></blockquote><blockquote><p><i>Expressiveness to me includes meaningful names, and I am likely to change the names of things several times before I settle in. With modern coding tools such as Eclipse, renaming is quire inexpensive, so it doesn't trouble me to change.</i> </p></blockquote><blockquote><p><i>Expressiveness goes beyond names, however. I also look at whether an object or method is doing more than one thing. If it's an object, it probably needs to be broken into two or more objects. If it's a method, I will always use the Extract Method refactoring on it, resulting in one method that says more clearly what it does, and some submethods saying how it is done.</i></p></blockquote><blockquote><p> <i>Duplication and expressiveness take me a very long way into what I consider clean code, and improving dirty code with just these two things in mind can make a huge difference. There is, however, one other thing that I'm aware of doing, which is a bit harder to explain.</i></p></blockquote><blockquote><p><i>After years of doing this work, it seems to me that all programs are made up of very similar elements. One example is "find things in a collection". Whether we have a database of employee records, or a hash map of keys and values, or an array of items of some kind, we often find ourselves wanting a particular item from that collection. When I find that happening, I will often wrap the particular implementation in a more abstract method or class. That gives me a couple of interesting advantages.</i></p></blockquote><blockquote><p><i>I can implement the functionality now with something simple, say a hash map, but since now all the references to that search are covered by my little abstraction, I can change the implementation any time I want. I can go forward quickly while preserving my ability to change later. In addition, the collection abstraction often calls my attention to what's "really" going on, and keeps me from running down the path of implementing arbitrary collection behavior when all I really need is a few fairly simple ways of finding what I want.</i></p></blockquote><blockquote><p><i>Reduced duplication, high expressiveness, and early building of simple abstractions. That's what makes clean code for me.</i> </p></blockquote><h2 style="text-align: left;">Rather watch the movie instead of reading the book?</h2><div>Here you have hour after hour with uncle Bob (Robert C Martin), speaking about that same things that's in the book.</div><div><ul style="text-align: left;"><li><a href="https://www.youtube.com/watch?v=7EmboKQH8lM">Clean Code Lesson 1</a></li><li><a href="https://www.youtube.com/watch?v=2a_ytyt9sf8">Clean Code Lesson 2</a></li><li><a href="https://www.youtube.com/watch?v=Qjywrq2gM8o">Clean Code Lesson 3</a></li><li><a href="https://www.youtube.com/watch?v=58jGpV2Cg50">Clean Code Lesson 4</a></li><li><a href="https://www.youtube.com/watch?v=sn0aFEMVTpA">Clean Code Lesson 5</a></li><li><a href="https://www.youtube.com/watch?v=l-gF0vDhJVI">Clean Code Lesson 6</a></li></ul><div>Keep it clean! :)</div></div><p></p><p></p><p></p><p></p>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-46144688642679913642020-10-26T22:16:00.000+01:002020-10-26T22:16:01.037+01:00My glasses crackled within a year...<p>I saw something that looked like lots and lots of tiny scratches on my glasses. They are almost invisible in bad lighting, but clear when looking at them in sunshine. The seller didn't even care to look at them, just told me surface treatment probably had crackled. She also said that heat is often the culprit, like using them in the sauna.</p><p>But I hadn't been using them in the sauna and had also avoided the steam coming out from the oven when opening the oven door. Also been really careful when cleaning them. </p><p>I tried to find images of crackled glasses on the web to compare with, but found nothing. So, to provide the web with content, here are images of my old, probably crakled glasses and of my new ones for comparison.</p><div class="separator" style="clear: both; text-align: left;">Glasses with crackled surface treatment.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGX5i7qAbo2MNK_cFXqzCwY-Pv1kMpnk8o8GZoGDaGLAJ4VySDFoCc2uGR0YN_TPSHqz7RBLe1UijKpYRVfqPhKugg9CaNiGmdGP7KDBCgMNi9bKhyphenhyphenau-PLJKZciD0L8vmUR9PN0DhJI7-/s906/Krackelerade+glas%25C3%25B6gon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="699" data-original-width="906" height="494" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGX5i7qAbo2MNK_cFXqzCwY-Pv1kMpnk8o8GZoGDaGLAJ4VySDFoCc2uGR0YN_TPSHqz7RBLe1UijKpYRVfqPhKugg9CaNiGmdGP7KDBCgMNi9bKhyphenhyphenau-PLJKZciD0L8vmUR9PN0DhJI7-/w640-h494/Krackelerade+glas%25C3%25B6gon.jpg" width="640" /></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMtFgusoe4eS56MPwpdgta39VwBqWKhi8LkErCat5J8FiQ0MQyd3OyEGCYqQN0PlxgFmd3uwdEPeBqhSiZhLVFJfefz6lvraBOh2ULe0rdOfRUissIU751_KaLdjQ5svLfI7Xun4j0CuC_/s891/Krackelerade+glas%25C3%25B6gon+2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="663" data-original-width="891" height="475" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMtFgusoe4eS56MPwpdgta39VwBqWKhi8LkErCat5J8FiQ0MQyd3OyEGCYqQN0PlxgFmd3uwdEPeBqhSiZhLVFJfefz6lvraBOh2ULe0rdOfRUissIU751_KaLdjQ5svLfI7Xun4j0CuC_/w640-h475/Krackelerade+glas%25C3%25B6gon+2.jpg" width="640" /></a></div><br /><div><br /></div>Because it hadn't passed a year since I bought them, I got new ones on warranty. And they looked like this:<div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbSMHK-DaqXI8bhbpscfAuGM8zOz3i7Ap5Z9sMWUERpA7B6NGZWsm330u4DAabkOVo50yITB9FakI4Z4HiXEHeOiaH0AdlaA4t31wDN0QP1-Vf5U3VN-CR9NMPH-BHOaS-oISlukomIpP/s908/Nya+glas.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="758" data-original-width="908" height="534" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbSMHK-DaqXI8bhbpscfAuGM8zOz3i7Ap5Z9sMWUERpA7B6NGZWsm330u4DAabkOVo50yITB9FakI4Z4HiXEHeOiaH0AdlaA4t31wDN0QP1-Vf5U3VN-CR9NMPH-BHOaS-oISlukomIpP/w640-h534/Nya+glas.jpg" width="640" /></a></div><br /><p>And a few swedish words for the search engines :)</p><p>Krackelerade glasögon. Krackelerad ytbehandling.</p></div>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-6555037191974712412020-03-08T11:08:00.002+01:002021-01-06T16:29:37.883+01:00Har du en gmail-adress? Känner du till att du då har många adresser?<span face="Arial, Helvetica, sans-serif" style="font-size: large;">Ett konto, flera adresser</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Gmail hanterar e-postadresser lite annorlunda än andra, de har en mer "förlåtande" hantering av punktplacering.</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Nedan är deras egen beskrivning från supportsidan </span><a href="https://support.google.com/mail/answer/7436150?hl=sv" style="font-family: Arial, Helvetica, sans-serif;" target="_blank">Punkter spelar ingen roll i Gmail-adresser</a>:<br />
<blockquote class="tr_bq">
<div style="background-color: white; color: #3c4043; font-family: Roboto, "Helvetica Neue", Helvetica, sans-serif; font-size: 14px; margin-bottom: 0.75rem; margin-top: 0.25rem;">
Om<span id="339515E"></span> någon skickar ett e-postmeddelande till dig och råkar lägga till punkter i adressen skickas meddelandet till dig ändå. Om du till exempel har e-postadressen förnamnefternamn@gmail.com äger du även alla versioner av adressen med punkter:</div>
<ul style="background-color: white; color: #3c4043; font-family: Roboto, "Helvetica Neue", Helvetica, sans-serif; font-size: 14px; margin: 0.25rem 0px 0.75rem; outline: 0px; padding: 0px; vertical-align: baseline;">
<li style="list-style-type: none; margin: 0.25rem 0px; padding-left: 1rem;">förnamn.efternamn@gmail.com</li>
<li style="list-style-type: none; margin: 0.25rem 0px; padding-left: 1rem;">förnamn.efter.namn@gmail.com</li>
<li style="list-style-type: none; margin: 0.25rem 0px; padding-left: 1rem;">f.ö.r.n.a.m.n.e.f.t.e.r.n.a.m.n@gmail.com</li>
</ul>
</blockquote>
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Användandet av punkter måste ändå följa e-postadresstandarden, så adressen får inte börja eller sluta med en punkt och en punkt får inte åtföljas av en punkt.</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Förutom att det kan vara bra att känna till, kan man dra nytta av det? </span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Tja... </span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Man kan ju på vissa abonnemangstjänster som använder e-postadressen som kontoidentifierare registrera sig flera gånger med olika varianter av sin adress för att få tillgång till flera gratis prova-på-perioder. Om man känner sig sparsam. Och inte läser tjänstens villkor för noga.</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Man KAN ju också använda det som ett trubbigt verktyg för att upptäcka hur din adress sprids/säljs vidare av någon du ger den till. Anta att en sajt erbjuder nåt du får ladda ner gratis, om du bara ger dem din e-postadress. Om du då använder en variant av din adress som är unik för den sajten och du sedan börjar få spam till ditt konto, riktat till just den adressen, så är det stor sannolikhet att det var just den sajten som inte skyddade din adress som de borde. Sen är frågan vad du kan göra med den informationen...</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif" style="font-size: large;">Behöver du ännu fler adresser?</span><br />
<br />
<span face="Arial, Helvetica, sans-serif">En annan sak som gmail har stöd för är <a href="https://support.google.com/mail/answer/22370" target="_blank">adresser med "kategorier"</a>. Du kan lägga till en kategori i din adress genom att skriva ett plus följt av ett kategorinamn, såhär:</span><br />
<blockquote class="tr_bq">
<span face="Arial, Helvetica, sans-serif">dinadress+valfri_kategori@gmail.com</span></blockquote>
<span face="Arial, Helvetica, sans-serif">Det här kan dras nytta av på samma sätt som den fria punktplaceringen, men också för att hålla ordning i din inkorg. Du kanske är med i två föreningar och får många mail från dess medlemmar. Då kan du ge dem två olika adresser</span><br />
<br />
<ul>
<li><span face="Arial, Helvetica, sans-serif">dinadress+minigolf@gmail.com</span></li>
<li><span face="Arial, Helvetica, sans-serif">dinadress+bowling@gmail.com</span></li>
</ul>
<br />
<span face="Arial, Helvetica, sans-serif">och sedan sätta upp <a href="https://webapps.stackexchange.com/a/11872" target="_blank">sorteringsregler</a> för var de ska läggas i din inkorg.</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Plustecknet är fullt tillåtet att använda i e-postadresser, MEN det är inte så vanligt förekommande och därför kan din adress anses ogiltig av vissa sajter och program.</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">För att kunna skicka från en "plus"-adress så måste den först <a href="https://webapps.stackexchange.com/questions/3598/is-there-any-way-to-send-an-email-from-a-gmail-plus-address" target="_blank">sättas upp som ett alias</a>.</span><br />
<br />
<span face="Arial, Helvetica, sans-serif" style="font-size: large;">Användbart?</span><br />
<span face="Arial, Helvetica, sans-serif"><br /></span>
<span face="Arial, Helvetica, sans-serif">Det känns som att det finns potential att göra smartare saker med detta än vad jag tagit upp. Kände du till det här och använder det på nåt intressant sätt? Det vore kul att veta, så skriv gärna en kommentar om det!</span>Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com2tag:blogger.com,1999:blog-1674838990122718975.post-52218688505142431282020-02-15T00:38:00.000+01:002020-02-15T17:37:59.172+01:00Känner du till topp fem nyckelelement som särskiljer effektiva team enligt Googles forskning?<span style="font-size: large;">Den som söker, finner </span>(ibland nåt annat än den tänkt sig)<br />
<br />
<a href="https://rework.withgoogle.com/blog/five-keys-to-a-successful-google-team/" target="_blank">Google ägnade två år</a> till att bland annat titta på fler än 250 attribut hos 180 team för att försöka hitta den perfekta mixen av personligheter och färdigheter som leder till ett dream team.<br />
<br />
Det visade sig att de letade efter fel saker...<br />
<b>Vem </b>som är med i ett team spelar mindre roll än hur teammedlemmarna interagerar, strukturerar sitt arbete och ser på vad de bidrar med.<br />
<br />
De upptäckte fem nyckelelement som särskiljde de framgångsrika teamen från de andra:<br />
<ul>
<li><b>Dependability</b><br />Can we count on each other to do high quality work on time?</li>
<li><b>Structure & clarity</b><br />Are goals, roles, and execution plans on our team clear?</li>
<li><b>Meaning of work</b><br />Are we working on something that is personally important for each of us?</li>
<li><b>Impact of work</b><br />Do we fundamentally believe that the work we’re doing matters?</li>
</ul>
<br />
Men det mest intressanta är <span style="background-color: #ffd966;">det femte nyckelelementet, som beskrivs som <b>överlägset viktigast</b> samt <b>grundläggande </b>för de övriga fyra, och det var: <b>psykologisk trygghet </b></span><br />
<ul>
<li><b style="font-weight: bold;">Psychological safety</b><b> </b><br />Can we take risks on this team without feeling insecure or embarrassed?</li>
</ul>
<div>
<br /></div>
<div>
<span style="font-size: large;">Men vad är psykologisk trygghet egentligen?</span></div>
<div>
<br /></div>
<div>
Jag hittade beskrivning nedan i bloggposten <a href="https://blog.andfrankly.com/sv/sa-blir-ni-mer-agila-borja-med-psykologisk-trygghet" target="_blank">Så blir ni mer agila – börja med psykologisk trygghet</a>, en beskrivning jag tycker stämmer överens med vad Amy C. Edmondson skriver i sin bok</div>
<div>
<a href="https://www.amazon.com/Fearless-Organization-Psychological-Workplace-Innovation/dp/1119477247" target="_blank">The Fearless Organization: Creating Psychological Safety in the Workplace for Learning, Innovation, and Growth</a></div>
<blockquote class="tr_bq">
<i>Psykologisk trygghet handlar om känslan av att jag kan vara mig själv, att jag kan uttrycka vad jag upplever, känner och tycker, att jag kan ställa ”dumma” frågor, presentera nya idéer och erkänna misstag utan att riskera att bli bestraffad.</i></blockquote>
<br />
<span style="font-size: large;">Öka psykologiska tryggheten - värt att prova? Hur?</span><br />
<br />
Texten nedan beskriver vilka effekter Google upptäckte att en hög psykologisk trygghet har.<br />
<blockquote class="tr_bq">
<i>Individuals on teams with higher psychological safety are less likely to leave Google, they’re more likely to harness the power of diverse ideas from their teammates, they bring in more revenue, and they’re rated as effective twice as often by executives.</i></blockquote>
Tidningen Chef beskriver vad Amy Edmondson <a href="https://chef.se/forskning-darfor-ar-oradda-chefer-mer-framgangsrika/" target="_blank">upptäckte</a>.<br />
<div>
<blockquote class="tr_bq">
<i>Amy Edmondson ingick tidigt i sin karriär i ett forskningsteam som skulle undersöka effekterna av fel och misstag på ett antal sjukhus. Hon fann till sin häpnad att de mest framgångsrika teamen rapporterade flest misstag, fler än de mindre framgångsrika teamen.<br />Så småningom upptäckte hon dock att de bra teamen hade en större öppenhet vilket gjorde det lättare att erkänna och diskutera misstag. Bra team gör med andra ord inte fler misstag, de bara rapporterar dem oftare – och lär sig av dem.</i></blockquote>
<div>
<br />
Så effekterna är bland annat högre trivsel på jobbet och färre gjorda fel, men öppen och förlåtande inställning till dem när de väl råkat göras. De effekterna verkar ju värda att sträva efter, men hur gå tillväga, ja, det är frågan jag själv håller på att gräva i. Det mest gedigna är förmodligen att försöka mäta dagens nivå av psykologisk trygghet i teamet, sen prova på något som ska öka den psykologiska tryggheten och sen mäta igen och se om det haft nån effekt.<br />
<br />
Det enda sättet att "mäta" jag hittat hittills är <a href="https://blog.andfrankly.com/sv/sa-blir-ni-mer-agila-borja-med-psykologisk-trygghet" target="_blank">frågorna</a> nedan, vilket känns lite tunt, men jag har heller inte testat dem.<br />
<ol>
<li>Känner du dig trygg i vår organisation?</li>
<li>Om du gör ett misstag, kan du berätta om det utan att bli bestraffad eller kritiserad?</li>
<li>Upplever du att ledarna i vår organisation erkänner sina misstag?</li>
<li>I din relation med dina kollegor, kan du vara dig själv?</li>
<li>Vad skulle göra att du kände dig (ännu) tryggare i vår organisation?</li>
</ol>
Och än så länge så är det <a href="http://www.codingswede.se/2019/12/oka-psykologiska-tryggheten-i-teamet.html" target="_blank">Orangino Work</a> jag testar och hoppas på att eventuella effekter ska vara kännbara och upplevda snarare än uppmätta, även om det kan vara roligt att ha siffror på saker :)<br />
<br />
Min känsla just nu är att en riktigt hög nivå av psykologisk trygghet kan vara den pusselbit jag saknat för att oftare få till de starka synergieffekter inom teamarbete som jag älskar när de uppstår! Så klart värt att prova, eller hur?<br />
<br />
<br />
<i>Uppdatering 2020-02-15</i><br />
<span style="font-size: large;">Frågor för att mäta psykologisk trygghet</span><br />
<br />
Amy Edmondson använde sig av nedanstående påståenden för att mäta nivån av psykologisk trygghet hos ett team. Teammedlemmarna fick svara hur pass mycket de tyckte att varje påstående stämde överens med deras upplevelse av teamet.<br />
<ol>
<li><span style="font-family: inherit;">If you make a mistake on this team, it is often held against you.</span></li>
<li><span style="font-family: inherit;">Members of this team are able to bring up problems and tough issues.</span></li>
<li><span style="font-family: inherit;">People on this team sometimes reject others for being different.</span></li>
<li><span style="font-family: inherit;">It is safe to take a risk on this team.</span></li>
<li><span style="font-family: inherit;">It is difficult to ask other members of this team for help.</span></li>
<li><span style="font-family: inherit;">No one on this team would deliberately act in a way that undermines my efforts.</span></li>
<li><span style="font-family: inherit;">Working with members of this team, my unique skills and talents are valued and utilized.</span></li>
</ol>
<br /></div>
</div>
Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-66855840520489024132019-12-26T14:15:00.001+01:002022-05-07T07:57:52.601+02:00Öka psykologiska tryggheten i teamet med Orangino Work<span style="font-size: large;">Hur väl känner du ditt team och dina teammedlemmar?</span><br />
<br />
Hur väl känner du ditt team? Vet du vad dina teammedlemmar värdesätter? Har ni några diskussioner om hur ni beter er som team och som individer?<br />
<br />
Att ha koll på vad dina kollegor värdesätter och hur de tänker kan leda till att du känner dig tryggare med dem. Och ju tryggare ni känner er med varandra, desto smidigare går förmodligen ert samarbete.<br />
<br />
<a href="https://oranginowork.com/" target="_blank">Orangino Work</a> är ett spelifierat kommunikationsverktyg som hjälper er att komma igång med de diskussioner som kan hjälpa er att uppnå en högre psykologisk trygghet.<br />
<br />
Jag har nyss gått en kurs för att leda processen. Hittills har jag endast lett en enda workshop inom systemutvecklarteamet jag ingår i, så det är för tidigt för mig att komma med nån riktig utvärdering, men under den timmen vi hade på oss så förde vi diskussioner vi förmodligen aldrig skulle haft annars och lärde känna varandra lite bättre. Det känns lovande!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgClyxII_mpjwxgU99lYdKmXLzAOcWNjauZ563mO1i-Md_t979apEKQH5amIHw8uQPabn_UIt4m8vkZtzESaOEAyQFn4k4mhbIzOke9r47hJ-5fUJiPYtSwUEW8rpMJqZON1r9eFQZ_LJsj/s1600/Diplom+Orangino+Work.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1160" data-original-width="818" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgClyxII_mpjwxgU99lYdKmXLzAOcWNjauZ563mO1i-Md_t979apEKQH5amIHw8uQPabn_UIt4m8vkZtzESaOEAyQFn4k4mhbIzOke9r47hJ-5fUJiPYtSwUEW8rpMJqZON1r9eFQZ_LJsj/s640/Diplom+Orangino+Work.jpg" width="451" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-size: large;">Hur går det till?</span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Under kursen gick vi igenom två varianter av vad verktyget kan användas till: <b>teamdialog</b> och <b>parvis feedback</b>. För båda dessa används de två korttyper som man får med sig i en liten "spellåda".</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKFD0A96UXCti5oynPfkVEus08yY06E1gYDw5XkKwK0LcNHPihz5L15t05d_o24w9qQmdyeUMXFLgHQbE5O7x6EiPIGci8ItyZ6bskH7PHM3hksmkVOi0_i2DuSJG6IcafZfrzV1iCP1xz/s1600/l%25C3%25A5dan.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1210" data-original-width="908" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKFD0A96UXCti5oynPfkVEus08yY06E1gYDw5XkKwK0LcNHPihz5L15t05d_o24w9qQmdyeUMXFLgHQbE5O7x6EiPIGci8ItyZ6bskH7PHM3hksmkVOi0_i2DuSJG6IcafZfrzV1iCP1xz/s400/l%25C3%25A5dan.jpg" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Den ena korttypen är <b>skattningskort</b> med siffrorna ett till fyra, som motsvarar:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>Stämmer inte</li>
<li>Stämmer till någon del</li>
<li>Stämmer i huvudsak</li>
<li>Stämmer helt</li>
</ol>
<div>
Varje person behöver två grupper av dessa kort, så korten i lådan räcker till åtta personer.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCpmGto7Nn8JTGR-sNJppWBV_UqI7m4bB3W8rQKDJ5qABuE14Dwt8kx4Ss1rRjN0WSUUsDs0jIJ_mAwb-9YShCfwFBN51IEfBcr0GvnATm74ZFv7Y2_v9IvYm2colhR6nOlLROVFqjHWGe/s1600/Skattningskort.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="908" data-original-width="1210" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCpmGto7Nn8JTGR-sNJppWBV_UqI7m4bB3W8rQKDJ5qABuE14Dwt8kx4Ss1rRjN0WSUUsDs0jIJ_mAwb-9YShCfwFBN51IEfBcr0GvnATm74ZFv7Y2_v9IvYm2colhR6nOlLROVFqjHWGe/s400/Skattningskort.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div>
<br /></div>
Den andra korttypen är <b>beteendekort</b>, som har ett ord för ett beteende som åtföljs av en kort definition. Det finns 220 stycken.<br />
<br />
Några exempel:<br />
<br />
<ul>
<li>Kort 1: Helhetssyn<br /><i>Jag har förmåga att fokusera på helheten</i></li>
<li>Kort 10: Dynamisk<br /><i>Jag får saker att hända</i></li>
<li>Kort 15: Ifrågasättande<br /><i>Jag tar inget för givet utan att vända och vrida på frågan och motivet bakom</i></li>
<li>Kort 17: Ber om hjälp<br /><i>Jag vågar be andra om hjälp i mitt arbete när så behövs</i></li>
</ul>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyif5O5j5Z2N4ouDxnbMf_Pv3D34pKb3Nd82aSePYcZvLmjj8Y7ZSv6W32U8qh3asI5cUrsJy5FrLfORzC8H5vluP8AhPvbZAXWvph9idkhtS6yEWnRl6B9rYV7MGoHg89hDthMbdatn4p/s1600/kort_ifr%25C3%25A5gas%25C3%25A4ttande.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="908" data-original-width="1210" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyif5O5j5Z2N4ouDxnbMf_Pv3D34pKb3Nd82aSePYcZvLmjj8Y7ZSv6W32U8qh3asI5cUrsJy5FrLfORzC8H5vluP8AhPvbZAXWvph9idkhtS6yEWnRl6B9rYV7MGoHg89hDthMbdatn4p/s400/kort_ifr%25C3%25A5gas%25C3%25A4ttande.jpg" width="400" /></a></div>
<br />
<br />
<span style="font-size: large;">Teamdialog</span><br />
<br />
Kort beskrivet går en teamdialog till enligt nedan.<br />
<br />
<i>Steg 1: skattning</i><br />
<ul>
<li>Teamet sitter tillsammans. Varje person har dubbla uppsättningar av skattningskort.</li>
<ul>
<li>En uppsättning till vänster som används för att skatta sitt eget beteende</li>
<li>En uppsättning till höger som används för att skatta teamets beteende</li>
</ul>
<li>Personen som leder processen väljer ett beteendekort och läser upp kortet för teamet.</li>
<li>Varje teammedlem skattar nu med hjälp av skattningskorten, dolt och under tystnad för att inte påverka varandra, hur pass väl överens denne tycker att beteendet stämmer överens med hur teamet agerar.</li>
<li>På samma sätt skattar man sedan hur väl man tycker att beteendet stämmer överens med hur man själv agerar.</li>
</ul>
<div>
<i>Steg 2: delning</i></div>
<div>
<ul>
<li>Alla vänder upp den skattning man gjort för teamet.</li>
<li>Var och en motiverar varför man har satt den skattning man har gjort</li>
<li>När alla motiverat så är det fritt att diskutera tankar som uppstått när man hört vad de andra delat.</li>
</ul>
</div>
<div>
<ul>
<li>Alla vänder upp den skattning man gjort för sig själv.</li>
<li>Var och en, som vill, kommenterar/motiverar varför man satt den skattning man har gjort. </li>
</ul>
</div>
<div>
<i>Steg 3: reflektion</i></div>
<div>
När skattning och delning gjorts för ett antal kort, förslagsvis tre till sex stycken, så är det dags för reflektion kring de beteenden som behandlats.</div>
<div>
<br /></div>
<div>
Parvis reflekterar man bland annat över:</div>
<div>
<ul>
<li>Teamets syn på olika beteenden, samstämmighet eller olika syn?</li>
<li>Vilka beteenden är viktigast för ett gott samarbete?</li>
<li>Hur samtalen gick:</li>
<ul>
<li>Fick alla lika mycket tid?</li>
<li>Kände man sig lyssnad på?</li>
<li>Öppenhet?</li>
</ul>
</ul>
<div>
Det paren kommit fram till delas sedan i gruppen.</div>
</div>
<div>
<br /></div>
<div>
<i>Steg 4(?): förbättringsarbete</i></div>
<div>
Något som jag ser i de papper jag fått efter kursen, men som jag inte minns att vi gick igenom under kurstillfället är reflektion med fokus på förbättringsarbete. Förmodligen är det aktiviteter som kan göras när teamet har hunnit gå igenom en lite större mängd kort, kanske efter tio och över.</div>
<div>
<ul>
<li>Framsållning av de beteenden som teamet anser viktiga för teamet, som man redan är bra på.</li>
<li>Framsållning av de beteenden som teamet anser viktiga för teamet, som man behöver förbättra.</li>
<li>Framtagning av förslag på aktiviteter för att förbättra de beteenden man nyss kommit överens om behöver förbättras.</li>
</ul>
<div>
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">Parvis feedback</span><br />
<br />
Parvis feedback går till på liknande sätt som teamdialog.</div>
</div>
<div>
<br /></div>
<div>
<i>Skattning</i></div>
<div>
<ul>
<li>Två personer väljer var för sig ut ett par beteendekort de vill ha feedback på.</li>
<li>De sätter sig tillsammans och väljer ut ett av de nyss utvalda beteendekorten.</li>
<li>Båda har dubbla uppsättningar skattningskort och skattar först dolt sin syn på hur beteendet stämmer överens med den andra personen och lägger kortet till höger.</li>
<li>Sedan skattar man sig själv och lägger kortet till vänster.</li>
</ul>
<div>
<i>Delning</i></div>
</div>
<div>
<ul>
<li>Båda personerna vänder upp den skattning de gjort för sig själva.</li>
<li>Båda motiverar sin skattning.</li>
<li>Båda personerna vänder upp den skattning de gjort för den andra personen.</li>
<li>Båda ger den andre feedback.</li>
</ul>
<div>
<span style="font-size: large;"><br /></span></div>
<div>
<span style="font-size: large;">Forskning</span></div>
</div>
<div>
<br /></div>
<div>
På hemsidan för Orangino Work står det att nedanstående forskning påverkat utformningen av verktyget.</div>
<div>
<ul>
<li>Dialogprocessen är utformad att kombinera intuitivt och reflekterande tänkande beskriven av D. Kahneman.<br /><i>Nobelpristagare och författare till "<a href="https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555/" target="_blank">Thinking fast and slow</a>".</i></li>
<li>Beteendekorten grundas i Edgar Scheins forskning om organisationskultur.<br /><i>Författare till "<a href="https://www.amazon.com/Organizational-Leadership-Jossey-Bass-Business-Management/dp/1119212049/" target="_blank">Organisational Culture and Leadership</a>".</i></li>
<li>Amy Edmondsons forskning om psykologisk trygghet och dess grund för hög prestation.<br /><i>Författare till “<a href="https://www.amazon.com/Fearless-Organization-Psychological-Workplace-Innovation/dp/1119477247/" target="_blank">The fearless organization</a>”.</i></li>
<li>Brené Browns teorier om att känslor som sårbarhet, skam, mod och tillit även är betydelsefulla i arbetslivet.<br /><i>TED talks: <a href="https://www.ted.com/talks/brene_brown_the_power_of_vulnerability" target="_blank">The power of vulnerability</a>, <a href="https://www.ted.com/talks/brene_brown_listening_to_shame" target="_blank">Listening to shame</a></i></li>
</ul>
<div>
Verktyget har även varit med i forskning utförd av Lunds universitet.</div>
<ul>
<li>Lunds universitets artikel om studien: <a href="https://www.lu.se/article/ny-studie-traning-i-dialog-ger-driftiga-och-trygga-arbetsteam" target="_blank">Träning i dialog ger driftiga och trygga arbetsteam</a><br />Artikeln sammanfattar forskningsresultatet med att medarbetare som fick träning i dialogövningar upplevde</li>
<ul>
<li>Ökad samhörighet med gruppen</li>
<li>Ökad inre arbetsmotivation</li>
<li>Ökad kompetens vad gäller att skapa bra arbetsmål och göra ett bra jobb</li>
<li>Ökad känsla av autonomi</li>
</ul>
<li>Den publicerade studien<br /><a href="http://rdcu.be/wG0H" target="_blank">How Colleagues Can Support Each Other's Needs and Motivation: An Intervention on Employee Work Motivation</a></li>
</ul>
<div>
<br /></div>
<div>
<span style="font-size: large;">Finns det en koppling mellan sällskapsspelet Orangino och Orangino Work?</span></div>
<div>
<br /></div>
<div>
Det finns ett sällskapsspel som heter <a href="https://www.spelexperten.com/sallskapsspel/festspel/orangino.html" target="_blank">Orangino</a> som är mycket likt Orangino Work i uppbyggnad. Jag hörde talas om sällskapsspelet före kursen, dels från teamet och dels var det med i tv-serien Sjölyckan. </div>
<div>
<br /></div>
<div>
I Sjölyckan slutade en spelomgång med att spelarna blev rejält osams, det hade kanske inte så mycket med spelet som de spelande personerna och deras relationer att göra. Men något verkar det ligga i det, eftersom jag vet en person som blivit avrådd av en expedit att köpa spelet med orden "Tänkte du spela det där med släkten i jul? Gör inte det, ni blir bara osams!"</div>
<div>
<br /></div>
<div>
I alla fall, enligt kursledaren är upphovsmakaren bakom båda produkterna densamma, Ulla Osterman. Om jag förstod rätt så hade Ulla en sömndröm om att familjen satt och spelade ett lär-känna-varann-bättre-spel och gjorde sedan verklighet av det och resultatet blev sällskapsspelet Orangino. När hon sedan fick höra att det var vanligt att spelet togs med till jobbet och spelades där så kände hon typ att "Nä, det var inte så det var tänkt och det passar inte så bra på det sättet, en sån produkt kan göras bättre!" och utvecklade då det arbetslivsanpassade Orangino Work för den målgruppen.</div>
<div>
<br /></div>
</div>
<div>
<span style="font-size: large;">Hur jag ramlade över Orangino Work</span></div>
<div>
<br /></div>
<div>
Som det står i min profilbeskrivning här på bloggen så gillar jag verkligen när det uppstår synergieffekter vid teamwork. Därför är jag nyfiken på hur man får till och ökar de synergieffekterna. </div>
<div>
<br /></div>
<div>
En bästsäljare inom ämnet är Patrick Lencionis <a href="https://www.amazon.com/Five-Dysfunctions-Team-Leadership-Fable/dp/0787960756/" target="_blank">The five dysfunctions of a team: A leadership fable</a>, där denna pyramid presenteras och gås igenom:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1UZCAVEpLzgfLWzEQihXveWrQFZ2dFnMEbY7wewXtDWckOBiG-JwxbPcGSCaymKH7kYU2RAJdiRBXRNIYHhMwF0eYsUXX6eeQ7CE0DhtEIF7_6xCUM09aaFprW_mRRY9jB6xCbn5uFf_u/s1600/fem_brister_i_lagarbete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="464" data-original-width="624" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1UZCAVEpLzgfLWzEQihXveWrQFZ2dFnMEbY7wewXtDWckOBiG-JwxbPcGSCaymKH7kYU2RAJdiRBXRNIYHhMwF0eYsUXX6eeQ7CE0DhtEIF7_6xCUM09aaFprW_mRRY9jB6xCbn5uFf_u/s1600/fem_brister_i_lagarbete.png" /></a></div>
<div>
<a href="https://www.slideshare.net/AndersHolmberg/frutsttningar-fr-samarbete">https://www.slideshare.net/AndersHolmberg/frutsttningar-fr-samarbete</a></div>
<div>
<br /></div>
<div>
Den boken presenterar mest problemen och ger få svar, så frågestormen från läsarna till Lencioni ledde till uppföljaren: <a href="https://www.amazon.com/Overcoming-Five-Dysfunctions-Team-Facilitators/dp/0787976377/" target="_blank"><b>OVERCOMING</b> the Five Dysfunctions of a Team</a>.</div>
<div>
<br /></div>
<div>
Jag uppfattade det som att uppföljarboken, gällande psykologisk trygghet, lade en stor tyngdpunkt på ett personlighetstest av typen <a href="https://sv.wikipedia.org/wiki/Myers-Briggs_Type_Indicator" target="_blank">Myers-Briggs</a>, som författaren anser är det mest vetenskapliga. Han skriver att ämnet "tillit" är ett av de viktigaste, men verkar tycka att nedanstående övningar räcker för att uppnå en bra nivå av tillit/psykologisk trygghet: </div>
<div>
<ul>
<li>gör personlighetstestet</li>
<li>dela och diskutera resultatet med varandra</li>
<li>berätta några saker om dig själv</li>
<ul>
<li>var jag växt upp</li>
<li>hur många syskon jag har och i vilken ordning jag själv kom</li>
<li>min svåraste eller viktigaste utmaning som barn</li>
</ul>
</ul>
<div>
Det kändes inte så uttömmande och i kombination med <a href="https://randsinrepose.com/archives/fred-hates-it/" target="_blank">blogginlägget om off-sites</a> av Michael Lopp, där han beskriver personlighetstest som fusk enligt nedan, så kändes det som att det fattades nåt viktigt.</div>
<blockquote class="tr_bq">
Personality tests. If you’re working the team bonding off-site, personality tests are going to be tempting. The idea of starting the off-site with perspective-altering personality tests feels… right. I want them to better understand each other, so have them answer a bunch of questions and we’ll explain ourselves to each other and — WHAM — understanding. Personality tests in their endless variety do exactly that. They tell you which well-defined bucket you comfortably belong in and explain to others your bucket’s intricacies. These buckets become social tent poles of the off-site and suddenly everyone erroneously believes they’ve figured each other out. And while, yes, they now have convenient labels for each other, they haven’t really figured each other out: they’ve cheated. You’ve bypassed the process of learning via a set of clever labels.If you want to understand someone, my advice is to sit next to them and solve a very hard problem together. You will learn who they are by watching how they think.</blockquote>
<div>
Jobbar och löser svåra problem tillsammans gör vi i stort sett dagligen och visst lär man sig saker om varandra då, men kanske inte på den nivå som behövs, så Michaels tips kommer man inte långt med heller. Så jag började googla efter andra sätt att jobba med tillit och psykologisk trygghet och hamnade rätt snart på Orangino Work, trots att det är så pass nytt och ännu rätt begränsat i spridning. Det verkar ha hittat sin nisch, ett enkelt verktyg för att få igång de diskussioner som behövs för att lära känna varandra och jobba bättre ihop.</div>
</div>
<div>
<br /></div>
<div>
Nu ska det bli intressant att se hur det utvecklas, både verktygets fortsättning hos teamet jag ingår i samt vilken effekt det har hos andra team i världen. Väntar på att få läsa om hur det funkar i verkligheten hos nån annan!</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0tag:blogger.com,1999:blog-1674838990122718975.post-19065917705794567962019-09-19T18:46:00.000+02:002019-09-19T18:46:04.819+02:00Kan du sätta ord på dina känslor?<br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBObjLWzLkLFwzZ8f7QEq3K2xIe0p3uykrJB27P6iFlp98TWdSXDoYfnomuv6hQldG7-PtZbZmEEzf0xnLEKZMrlyu4fVWmd8ruX7VfVGTRhNhxhyfnEyp0c4sFPLxiULadJy2oW0hRB7r/s1600/kortlek_nvc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="310" data-original-width="502" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBObjLWzLkLFwzZ8f7QEq3K2xIe0p3uykrJB27P6iFlp98TWdSXDoYfnomuv6hQldG7-PtZbZmEEzf0xnLEKZMrlyu4fVWmd8ruX7VfVGTRhNhxhyfnEyp0c4sFPLxiULadJy2oW0hRB7r/s400/kortlek_nvc.png" width="400" /></a></div>
<br /></div>
<div>
<br /></div>
<div>
Jag har lett några förbättringsmöten (retrospectives) på sistone och inlett dem med aktiviteten <a href="http://www.funretrospectives.com/one-word/" target="_blank">One Word check-in</a> med frågan: "Hur skulle du beskriva senaste sprinten med en känsla?"</div>
<div>
<br /></div>
<div>
Det verkar inte vara helt lätt att hitta orden för att beskriva sina känslor. Så här nedan kommer en lista med känslor. De kommer från en kortlek jag har haft sen jag lärde mig om <a href="https://sv.wikipedia.org/wiki/Nonviolent_Communication" target="_blank">nonviolent communication (nvc) eller giraffspråket</a>. Eftersom nvc fokuserar mycket på både känslor och behov och båda fanns med i kortleken så fick det här inlägget därför en lista med behov som bonus!<br />
<br />
En senare version av kortleken finns att beställa <a href="https://w86863.shop.textalk.se/sv/nonviolent-communication/samatalskort/kanslo-behovskort-m-bilder.html" target="_blank">här</a>.<br />
<br />
På nätet hittade jag <a href="http://www.therightword.info/nvc/giraffspraket-resurser/lista-kanslor-pos/" target="_blank">en sida som listar känslor man kan ha när ens behov är tillgodosedda</a> och <a href="http://www.therightword.info/nvc/giraffspraket-resurser/ordlista-kanslor-neg/" target="_blank">en sida för känslor när det är tvärtom</a>.<br />
<br /></div>
<h3>
Lista med känslor</h3>
<div>
Korten i kortleken var färgkodade som en slags gruppering. Ingen gruppering var dock namngiven, men det kanske är hyfsat tydligt ändå. Orden inom parentes antar jag är synonymer eller i alla fall ligger nära det första ordet.</div>
<ul>
<li>Entusiastisk</li>
<li>Full av energi (energisk, livfull)</li>
<li>Glad (nöjd)</li>
<li>Lugn (avspänd, centrerad)</li>
<li>Lycklig (lekfull)</li>
<li>Lättad</li>
<li>Redo (startklar, i form)</li>
<li>Stolt (nöjd)</li>
<li>Säker</li>
<li>Tillfreds (fridfull)</li>
<li>Vaken (alert)</li>
</ul>
<div>
<br /></div>
<ul>
<li>Berörd (lättad)</li>
<li>Förvånad (nyfiken)</li>
</ul>
<div>
<br /></div>
<br />
<ul>
<li>Deprimerad</li>
<li>Förbannad (arg)</li>
<li>Hat (hämndlysten)</li>
<li>Naken (blottad)</li>
<li>Skuld</li>
<li>Sur (bitter)</li>
<li>Svartsjuk (avundsjuk)</li>
</ul>
<div>
<br /></div>
<ul>
<li>Arg (irriterad)</li>
<li>Bekymrad (olycklig)</li>
<li>Besviken</li>
<li>Blyg (generad)</li>
<li>Ensam (liten)</li>
<li>Förakt (avsky)</li>
<li>Förtvivlad</li>
<li>Förvirrad (perplex)</li>
<li>Hungrig (sugen)</li>
<li>Illamående (äckel, avsmak)</li>
<li>Irriterad (frustrerad)</li>
<li>Ledsen (sorgsen)</li>
<li>Likgiltig (uttråkad)</li>
<li>Låg (energilös)</li>
<li>Maktlös (låg)</li>
<li>Nervös (spänd, orolig)</li>
<li>Otrygg (orolig)</li>
<li>Otålig (rastlös)</li>
<li>Panikslagen</li>
<li>Paralyserad</li>
<li>På dåligt humör (låg, nere)</li>
<li>Rasande</li>
<li>Rädd (ångestfylld)</li>
<li>Skamsen (ångerfull, skam)</li>
<li>Smärta</li>
<li>Sorgsen (deppad, nere)</li>
<li>Splittrad (disträ, kluven)</li>
<li>Sömnig (trött)</li>
<li>Trött (slutkörd)</li>
<li>Tveksam (splittrad, osäker)</li>
<li>Törstig</li>
<li>Utmattad (slut)</li>
</ul>
<br />
<h3>
Lista med behov</h3>
<ul>
<li>Acceptans (betydelsefullhet) </li>
<li>Att bli förstådd (att bli sedd, empati) </li>
<li>Att bli lyssnad på (empati) </li>
<li>Att bli sedd (bekräftelse, erkännande) </li>
<li>Att följa sin drömmar </li>
<li>Att förstå (information) </li>
<li>Att ge till andra (att bidra) </li>
<li>Att hålla löften (integritet) </li>
<li>Att lära sig nåt nytt (utveckling, växande) </li>
<li>Att må bra (hälsa, hygien) </li>
<li>Att påverka (att göra skillnad, mening) </li>
<li>Att sörja (utrymme att sörja) </li>
<li>Äventyr (variation) </li>
<li>Avslappning (bus, avspänning) </li>
<li>Balans (jämvikt, ömsesidighet) </li>
<li>Bus (att ha kul, att fira) </li>
<li>Fred (harmoni, frid) </li>
<li>Frihet (frihet att välja - autonomi) </li>
<li>Gemenskap (samhörighet) </li>
<li>Hjälp (stöd) </li>
<li>Inspiration (kreativitet, att skapa) </li>
<li>Intimitet (sexuellt uttryck, sex) </li>
<li>Kärlek (värme, närhet) </li>
<li>Kommunikation (kontakt) </li>
<li>Lugn (ro) </li>
<li>Mat och dryck (näring) </li>
<li>Omtanke (ömhet, omsorg) </li>
<li>Omväxling (stimulans) </li>
<li>Ordning (reda, struktur) </li>
<li>Respekt (integritet) </li>
<li>Respekt (värdighet, självvärde) </li>
<li>Rörelse (motion) </li>
<li>Säkerhet (trygghet, förutsägbarhet) </li>
<li>Samarbete (delaktighet) </li>
<li>Sammanhang (mening) </li>
<li>Skönhet </li>
<li>Tillit (tilltro, förtroende) </li>
<li>Trygghet (skydd) </li>
<li>Värme (trygghet) </li>
<li>Vila (sömn)</li>
</ul>
Carl Björknäshttp://www.blogger.com/profile/16808348275695703208noreply@blogger.com0