Blog

Notes to “Mózg: fascynacje, problemy, tajemnice”

Mózg: Fascynacje, problemy, tajemnice

Mózg: Fascynacje, problemy, tajemnice by Jerzy Vetulani

My rating: 5 of 5 stars

Książka tłumaczy wiele zawiłości i zależności biochemicznych oraz neurologicznych dziejących się w naszej głowie. To istotne by rozumieć dlaczego myślimy jak myślimy oraz na co wpływają poszczególne reakcje chemiczne odbywające się pod czaszką. Obowiązkowa lektura dla biohackerów.

View all my reviews

      • Czlowiek to jedyna istota na ziemi wrazliwa na piekno i sztuke
      • Brzydkość powoduje zachowanie obronne w lewej korze motorycznej
      • Udowodniono że geny odpowiedzialne za uwage poznawcza łączą sie z regulacja czynnosci dopaminy
      • ADHD wiaze sie z niskim poziomem uwagi poznawczej.
      • uwage poznawcza rozwija kontakt ze sztuka
      • Funkcjonalnie mozg można podzielić na 3 części : archeocortex (archeopallium), paleocortex (paleopallium) i neocortex (neopallium).
        • Archeocortex – “mozg przezycia”: agresja, bron sie lub uciekaj, termoregulacja, reprodukcja, motoryka.
        • Paleocortex – emocje, przyjemność, nastrój, motywacja.
        • Neopalium – mózg racjonalny, kora mozgowa silnie rozwinieta u czlowieka: odpowiedzialny za myślenie, przewidywanie, intelekt
      • Problemy bezosobowe aktywuja obszary kognitywne (poznawcze) mózgu. Problemy osobowe/społeczne  aktywują obszary emocjonalne mozgu. Przy problemach spolecznych obszary emocjonalne aktywuja sie silniej i dzieje sie to “automatycznie” – potrzebna jest “praca” (a wiec i czas) aby aktywowac obszary kognitywne i np dopiero po chwili podjac decyzje racjonalna (na przykladzie paradoksu decyzyjnego z płaczącym dzieckiem czy pociągiem i dźwignią zwrotnicy)
      • Mozg jest plastyczny. Aktywnosc zmyslowa i psychiczna moduluje jego fizyczną strukturę. Jego fizyczny stan wplywa na procesy psychiczne. Co ciekawe na procesy neurogenezy (proces powstawania nowych komorek nerwowych czyli neuronow) maja wplyw:
        • Wzbogacone srodowisko (bombardowanie umyslu wrazeniami wymagajacymu odpowiedzi) –  np nowe otoczenie
        • Wysilek fizyczny (!)
        • Restrykcje kaloryczne czyli glodowki (!)
        • Wysiłek intelektualny (np uczenie sie, zapamietywanie)
      • Neurony lustrzane – neurony aktywujace sie wtedy kiedy osoba wykonuje dana czynność lub widzi(!) kogos innego wykonujaca dana czynność. Stad bierze sie np empatia.
        Z tymi neuronami robiono doświadczenia, które udowodniły, że osoby które są smutne, agresywne lepiej rozumieją teksty które są smutne lub agresywne. Osoby które się często uśmiechają lepiej dostrzegają teksty wesołe
      • Teoria lewo-półkulowego interpretatora pokazuje ze czlowiek ma silna potrzebe racjonalizowania swoich wyborow (eksperyment z zahipnozowana i parasolka). Etyka, obrzedy a wiec i moralnosc istnialy juz ponad 10k lat temu. Religii wtedy nie bylo. Wg autora – to co ewoluuje to moralnosc a religia, zgodnie z teoria lewopulkolowego interpretatora, sluzy racjonalizacji naszych dzialan
      • Materia mozgu wplywa na aktywnosc psychiczna. Aktywnosc psychiczna wplywa na materie mozgu. Stad wniosek ze psychoterapia ma rownie silne uwarunkowania neurobiologiczne co farmakoterapia (!)
      • Posiadamy 7 rodzajow inteligencji (wg Gardnera): językowa, muzyczna, logiczno-matematyczna, przestrzenna, motoryczna, intrapersonalna, interpersonalna
      • Badania na bliźniakach (wychowywanych osobno) pokazały że Inteligencja jest genetycznie determinowana choć nadal można ją modyfikować poprzez ćwiczenia (lub ich brak). Występuje silna korelacja między Inteligencja a iloscia istoty szarej w mózgu
      • Inteligencja skrystalizowana (gc) – wiedza, zdolnosc uczenia sie, zapamietywania, przypominania.
        Inteligencja plynna (gf) – zdolnosc porownywania, laczenia kropek, odnajdywania sie w nowych sytuacjach. Badania pokazaly ze jest ona silnie zalezna od edukacji (niezalezna genetycznie) – efekt Flynna
      • Inteligencja w pewnym stopniu (ok.50%) jest determinowana genetycznie. Wystepuje korelacja pomiedzy wysoka inteligencja a nizszym (!) zapotrzebowaniem na glukoze przez neurony
      • Naczelnym celem czlowieka nie jest (jak czasem sie mysli) reprodukcja – gwalt nie ma przyzwoleno spolecznego, a ludzie potrafia miec rozne cele w zyciu. To co jednak jest niezmienne dla wszystkich to poszukiwanie dobrostanu.
      • Agresja dzieli sie na emocjonalna (fight or flight, inicjowana w archeocortex i modyfikowana w paleocortex) i chlodna (plan and act, dodatkowo modyfikowana w neocortex). Zalezna od procesow biochemicznych. Agresja emocjonalna jest alternatywna biochemicznie wzgledem agresji chlodnej (stad trudno o natychmiastowa zmiane jednej agresji w druga). Jej dzialanie oslabia serotonina (wytwarzana z tryptofanu) i brak testosteronu. Uklad serotoniczny jest dziedziczony genetycznie jednak udowodniono ze ekspresja genow serotoninergicznych moze byc zupelnie zmodyfikowana wplywami srodowiskowymi i kulturowymi (za wyjatkiem przypadkow patologii)
      • przyjemnosc dzieli sie na apetytywna (np patrzenie jak ktos gra) oraz konsumatywna (np kiedy samemu się gra)
      • Seks jest istotny w cementowaniu zwiazku – uwalniana podczas niego oksytocyna oraz wazopresyjna powoduja powstanie silnej wiezi uczuciowej
      • Orientacja seksualna jest zwiazana z budowa mózgu. Kobiety oraz homoseksualisci maja mniejsze jadro INAH-3 niz heteroseksualne samce. Jest tak zarowno u ludzi jak i u zwierzat – np baranow
      • Niski poziom serotoniny moze powodowac odhamowanie ukladu seksualnego (czyli zwiekszyc poped celem uzupelnienia brakow serotoniny)
      • Charakterystyczną różnicą między chłopcami a dziewczynkami jest preferencja zabawek : chłopcy wola zabawki mechaniczne, dziewczynki lalki. Czy to cecha uwarunkowana kulturowo? Badania na makakach sugeruja ze jest to różnica wytworzona w ciągu ewolucji u wyższych naczelnych. Samczyki makakow wola zabawki “meskie”, pobudzające do ruchu (piłka, samochodzik), a samiczki – “kobiece” (lalka, miska). U dzieci trudno zmienić wrodzone determinowane płcią wzorce zabawy: pięcioletnia Kinga, która dostala ciężarówkę, traktuje ją jak lalke, otula kocykiem i kolysze do snu.
      • Stres powoduje zanik neuronow i zmniejsza liczbe połączeń miedzy nimi o polowe, w strukturach zwiazanych z aktywnoscia poznawcza, a nasila rozrost neuronow w strukturach związanych z emocjami – damn! To by wiele wyjasnialo!
      • Reakcje neuronow jadra migdalowatego na ostry stres sa u obu plci przeciwne: u samcow stres powoduje zwiększenie liczebnosci kolcow synaptycznych w hipokampie co wiaze sie z poprawa pamieci i sprawnosci myslenia, samice na ostry stres reaguja zmniejszeniem plastycznosci hipokampu i pogorszeniem funkcji poznawczych. Ale już przy stresie chronicznym mezczyzni radza sobie gorzej od kobiet.
      • Pożądanie jest napedzane przez hormony plciowe (testosteron, estriadol), podniecenie przez dopamine i noradrenalinę, a hamowane przez serotonine.
      • Pamięć ze wzgledu na czas trwania opisuje sie jako ENGRAMY.
        • Engram natychmistowy – trwa kilka-kilkanascie sekund. Pozwala na przeprocesowanie informacji, ale bez jej zapamietania
        • Engram krotkotrwaly – jesli informacja jest wazniejsza mozg moze engram “tmp” zamienic w “short” trzymajacy informacje przez okres kilku-kilkuset minut.
        • Engram dlugotrwaly – jesli informacja bedzie powtarzana to jej engram zostanie zamieniony w “long” trwajacy kilka-kilkaset miesiecy
      • Pamiec krotkotrwala jest realizowana za pomoca zmian elektrycznych w mózgu. Natomiast pamiec dlugotrwala jest realizowana na podlozu materialnym. Dowiedziono tego zatrzymując calkowicie aktywność mózgu (hibernacja chomika), a nastepnie wybudzajac go i sprawdzajac czy pamieta on wyuczone wczesniej rzeczy. Nie ma natomiast pewności czy jest to za sprawa zmian neurochemicznych czy strukturalnych (plastycznosc synaps) mozgu. Wiadomo natomiast ze rozne obszary mozgu komunikuja sie ze soba (wzajemnie aktywuja) w procesie zapamietywania (ogolna teoria sieciowa)
      • Głównym osrodkiem procesowania  (dyspozytornia) pamieci jest hipokamp. Hipokamp rowniez odpowiada za prymitywne reakcje (flight or fight) i zmysl wechu (archicortex sklada sie glownie z hipokampu oraz z fragmentow kory srodwechowej)
      • Okolo 60% neuronow używa kwasu glutaminowego jako neurotransmitera. Hipokamp jest unerwiany właśnie przez neurony glutaminergiczne dochadzace don wylacznie z kory przysrodkowej. Najwyzsze w mozgu stezenie receptorow NMDA (ponudzanych kwasem glutaminowyn) wystepuje w polu CA1 hipokampa.
      • Drugim poza kora pod wzgledem waznosci z punktu widzenia procesów kognitywnych jest uklad jader podstawnych przedmozgowia. Jego neurony jako neuroprzekaznika uzywaja acetylocholiny.
      • Engramy pamieci roboczej wymagaja aktywnego czuwania poniewaz to w tym stanie poziom acetylocholiny w mozgu jest wysoki. Jego stezenie pobudza receptory muskarynowe M2 hamujace pobudzakace sprzezenia zwrotne i ulatwiaja kodowanie nowych informacji.
        • Engramy pamieci dlugotrwalej wymagaja niskiej aktywności czuwania (snu, odpoczynku) ktore wymagaja niskiego stezenia acetylocholiny.
      • Uklad cholinergiczny jest rowniez istotne do przenoszenia informacji z obszarow pamieci dlugotrwalej do obszarow pamieci roboczej
      • Benzodiazepiny pobudzaja receptory GABA. Ich pobudzenie powoduje uspokojenie, sennisc, otepienie. Te receptory blokuja takze receptory glutaminergiczne jak i uwalnianie acetylocholiny.
      • Wysilek fizyczny powoduje generację neutrofiny BDNF która zapewnia żywotność komorek nerwowych a także nasila długotrwale transmisję synaptyczną
      • Leki takie jak Modafinil czy Ritalin znoszą osłabienia funkcji poznawczych wywołane przez senność. Ich badacze sugeruja ze mogą to być bezpieczne środki poprawiające czynności intelektualne nawet u zdrowych osób
      • Leki zwiększające dostępność acetylocholiny:
        • poprawiają ukrwienie mozgu
        • zwiększają tworzenie ATP
        • zwiększają pobór tlenu i glukozy przez neurony
      • Namawianie “na sile” do “popędzania” naszego mozgu jest równie etyczne, jak namawianie w reklamie środka przeciwbólowego do wzięcia go, gdy pojawia się ostry ból kiedy się  jest z dziećmi w wesołym miasteczku. Ból może sygnalizować przemijającą dolegliwość ale tez zbliżający się zawał czy udar mózgu, a wtedy dodatkowy wysilek może być zabójczy. Matka umierająca na karuzeli nie będzie najlepszym wspomnieniem dzieci z popołudnia w lunaparku. Często nasz organizm jest mądrzejszy od nas samych.
      • Czy dopalacze sa zle? Czy sa nieetyczne? Tutaj uczeni nie sa zgodni. Czesc uwaza za sle (jak doping, moga uszkodzic mozg) a czesc za naturalne (a czy okulary/kofeina sa etyczne? ponadto jak wiadomo “kazdy lek niewlasciwie stosowany…”,  wielu wybitnych stosowalo nawet mocniejsze formy wspomagania oparte o amfetamine – edison, pius X. Niektorzy np Gary Stix uwazaja ze to kwestia czasu jak vigil (modafinil) czy concerta (ritalin) beda staly obok gripexu.
      • Uogolniajac mozg kontroluje 3 uklady:
        • uklad pobudzenia (czuwanie, sen) dla celow percepcji zjawisk i uwagi
        • uklad kognitywny (pamiec, zapominanie) dla celow swiadomosci i uczenia sie
        • uklad nagrody (przyjemnosc, bol) dla celow rozrozniania dobrego i zlego
    • Efekt Collidge’a – samiec po kilkukrotnym stosunku z samica nie ma ochoty na dalszą kopulację z nią natomiast mógłby kopulować z inną samica.
    • Substancjami zmieniającymi receptory są przekaźniki nerwowe, biorące udział w przekazywaniu informacji z neuronu do neuronu. Np naturalne neuropeptydy, endorfiny i enkefaliny łącza się z receptorami opiatowymi, przenosząc sygnały powodujące euforię u zmniejszenie bólu. Tak się złożyło że analogicznie pobudza ten receptor morfina (niewystępująca w organizmie zwierząt). Nikotyna udaje acetylocholine. Benzodiazepiny pobudzaja receptory GABA. Amfetamina i kokaina pobudzaja posrednio receptory dapaminowe.
    • Narkomania jest olbrzymim, bardzo szkodliwym zjawiskiem społecznym. Niestety, równie niebezpiecznym problemem jest rozprzestrzeniająca się narkofobia: ślepa agresja wymierzona przeciwko wszelkim substancjom uznanym w danej kulturze za narkotyki. Zjawisko to utrudnia sensowne podejście do problemu walki z narkotykami a takze racjonalne podejscie do suplementacji i wspomagania organizmu substancjami zewnetrznymi.

Notes to “Quiet: The Power of Introverts in the world that can’t top talking”

GoodReads Review:

Quiet: The Power of Introverts in a World That Can't Stop TalkingQuiet: The Power of Introverts in a World That Can’t Stop Talking by Susan Cain
My rating: 5 of 5 stars

Kolejna książka, która otworzyła mi oczy na brak jasnych podziałów co do definicji cech osobowości człowieka.
Na bazie badań oraz przykładów (Steve Jobs, Bill Gates czy Dale Carnegie) autorka pokazuje, że ludzie są mieszaniną różnych cech – często nawet tych wykluczających się (a jednak jak widać nie).
Można być nieśmiałym ekstrawertykiem jak i śmiałym introwertykiem.
Można być “natural introvert” oraz “conscious extravert”.
Co ważne autorka pokazuje, że choć pewne cechy osobowości sprzyjają pewnym zawodom (np ekstrawertyk będzie lepszym sprzedawcą), to obala ona mit, że introwertycy nie będą w stanie stać się ekstrawertykami (“conscious extravert”).

Ciekawe cytaty:
1. “Kluczowe dla osiagniecia mistrzostwa jest pracować samemu(!) w skupieniu.”
2. System dopaminowy ekstrawertyków silniej reaguje na sukcesy niż u introwertyków

View all my reviews

Notatki:

  • ~30% ludzi na swiecie jest introwertyczna
  • Introwertyzm jest często mylony z niesmialoscia tymczasem nie ma z nia nic wspolnego – mozna byc niesmialym ekstrawertykiem jak i smialym introwertykiem (Bill Gates)
  • Introweryzm pomaga podejmowac przemyslane decyzje, introwertycy takze chetniej sluchaja rad innych dzięki czemu wykorzystują okazję do poprawy produktu czy ulepszenia procesu.
    Ekstrawertycy za to częściej podejmują ryzyko i decyduja sie na dzialania przy niedostatecznej liczbie danych – takie ryzykanctwo pozwala im dzialac szybciej i z wyprzedzeniem. Lepiej takze radza sobie w szybko zmieniajacym sie srodowisku. To dlatego sprzedawca musi byc ekstrawertykiem.
  • Introwertyzm można pogodzić z ekstrawertyzmem – np Dale Carnegie czy Tony Robbins choc ich zachowanie sceniczne mogloby pokazywac co innego. “You’d better act like an extravert if you don’t want to flub the sales call and watch your family die like pigs in hell”.
    Możesz także połączyć siły z kimś o odmiennym profilu osobowosci – jak steve jobs i steve wozniak
  • Being like extravert means – being open, love others, BELIEVE in what you say, be kind to others, be confident in your words and actions
  • Wydaje mi sie ze polaczenie “natural introvert” z “conscious extravert” jest sluszne i zarazem przydatne
  • Guy Kawasaki – autor i propagator idei technicznego ewangelizmu mowil o sobie ze jest introwertykiem
  • Introwertycy chetniej dzielą sie swoim życiem postami online i zabieraja głos w dyskusjach
  • Kluczowe dla osiagniexia mistrzostwa jest pracować samemu(!) w skupieniu. M.in. Potwierdzaja to badania przeprowadzone przez Toma DeMarco i Toma Listera o efektywnosci programistow pod katem srodowiska pracy.
  • Wg powyzszego badania 62% najlepszych programistow mowi ze ma pomieszczeni zapewniajace prywatność i skupienie, kontrole nad otoczeniem i brak przeszkadzania. 73% najgorszych programistow mowi ze czesto ktos przeszkadza im blachymi sprawami.
  • Badania z roznych industry pokazuja ze w open spaces:
    – zmniejszaja produktywnosc
    – pogarszaja pamiec (poprzez brak nieprzerwanego i glebokiego skupienia)
    – potrafia wzmagac poczucie dyskomfortu
    – obnizac pewnosc siebie
    – podwyzszac poziom stresu i cisnienie krwi
    – zwiekszaja lekowosc co dodatkowo wydziela kortyzol (wchodzenie w dyskusje na argumenty, szpiegowanie cudzych aktywnosci, duzo podejrzliwosci, wiele powierzchownych relacji kosztem szczerych i glebokich relacji)
    – rodza agresje
  • Jestesmy bardziej zlozeni niz nam sie wydaje. Robiono badania nad korelacja temperamentu, ekstrawersji/introwersji i wygladu fizycznego – okazalo sie ze sa korelacje (np osoby o wysokiej aktywnosci beda raczej ekstrawertykami, i także beda mialy brazowe oczy) ale mimo wszystko ciezko powiedziec jednoznacznie co jest przyczyna. Wiemy ze w duzej mierze sa to geny (badania na blizniakach wychowanych w roznych rodzinach) ale…to troche jak z upalami/huraganami – czy przyczyna ich wystepowania sa zmiany temperatury, wplyw czlowieka czy cos innego? Nie da sie jednoznacznie wskazac – wszystko po trochu, kolo sie zamyka – klimat dziala na czlowieka, czlowiek wplywa na klimat. I tak samo jest z determinacja naszej ekstrawersji/introwersji
  • Badania zrealizowane przez Grażyna Kochańska pokazują Że dzieci o wysokiej inteligencji emocjonalnej są bardziej empatyczne, rzadziej kłamią, mają bardziej klarowne reguły moralne oraz ogólnie maja mniej problemów w życiu
  • W celu najlepszego efektu nauki potrzebny jest wlasciwy poziom pobudzenia (pobudzenie biofizyczne, bodzce otoczenia jak muzyka). Introwertycy lepiej dzialaja przy niskim pobudzeniu, ekstrawertycy za to wyzsze skupienie osiagaja przy wysokim pobudzeniu.
  • Introwertycy i ekstrawertycy różnią sie pod kątem reakcji systemu dopaminowego na zdarzenia – ekstrawertycy reaguja silniej na sukcesy, a introwertycy slabiej. To implikuje kilka rzeczy:
    – introwertycy sa z reguly bardziej zachowawczy i ostrozniejsi w dzialaniu (ich system dopaminowy nie jest tak wysoko nagradzany)
    – ekstrawertycy sa bardziej sklonni do ryzyka (ich system dopaminowy produkuje duze dawki co uzależnia)
    – ekstrwertycy, w przeciwieństwie do introwertykow, są mniej podatni na porażki – gdy maja do wykonania 10 sales calls to kazdy zly telefon traktuja jako cos naturalnego i wrecz koniecznego co tylko ich umacnia
    – ekstrawertycy za bardziej zmotywowani i zdeterminowani (wizja silnego zastrzyku dopaminowego motywuje)
  • Wg wielu psychologow osobowości ludzi charakter sprowadza się do 5 składowych:
    – ekstrawertyzm
    – introwertyzm
    – ugodowosc
    – swiadomosc
    – stabilność emocjonalna
  • 3 reguły by wygladac na pewnego siebie :
    – stoj wyprostowany
    – usmiechaj sie
    – patrz w oczy innym (rozmowcy)
  • Dostosuj zachowanie wobec dzieci do ich bycia. Np introwertyczne dzieci wola bycie 1:1 niz w grupie
  • Wszystko to kwestia szacunku unikalności drugiej osoby
  • Jeśli masz firmę to pamiętaj że możesz mieć w niej zarówno ekstrawertykow jak i introwertykow

Swipe Gesture in PowerApps

There are scenarios where drag’n’drop capabilities or gestures recognition missed so much in Power Apps. Fortunately there are some tricks that allows you to achieve some of these effects ie. Drag’n’Drop or Swipe. In this blog post I’ll show you how you can create a swipe gesture in PowerApps.

WOW Effect

On the last Modern Workplace Conference 2019 in Paris I had a session with Tomasz Poszytek about “Support in-field employees with Office 365, PowerApps and more“. During 50 minutes talk we explained business context of our solution, describe solution architecture and build the solution…from scratch! No prepared screens, no hidden code snippets or pre-configured platforms. The audience were like:

whose line is it anyway applause GIF

But the true bomb cam at the end. We showed what could be next steps and further development of the whole solution. We’ve presented versions 2.0 of our favorites parts (that was prepared before the session of course). Tomasz showed his “specialite” which was actionable message inside Microsoft Teams channel – it was beautiful and superbly improve readability of the message. My “specialite” was Power Apps for quick approve/reject of requested job.

Adaptive cards looks like this:

Power Apps looks like this:

And people were like:

oh my god wow GIF

Also the day before the session there was a question regarding implementation of swipe gesture in PowerApps on twitter PowerAddicts group. So I decided to write this post 🙂

Adoption is a key

If you want to increase your app adoption (for whatever reasons: revenue, targets or just ambitions) you have to care about UX (User Experience). Swipe behaviors can help you with that. How?

  • Positive effect of the Swipe gesture is connected to our brain neurology. The move, if used in a write context, contribute to a feeling of empowerment in the user. The more positive effect your app has – the higher is its adoption.
  • The tendency to abandon a shopping session is often attributed to choice paralysis — the inability to make a decision in the face of too many options and too much information. Swipe supports a binary output: yes or no, right or wrong, accept or reject, left or right.
  • Swiping behavior are more attractive to mobile users
  • Swipe will be natural in eCommerce, gastronomy and all company processes that requires binary decisions preferably with an image information

(Source: https://medium.com/app-partner-academy/the-psychology-of-swiping-in-apps-464895b2b485 )

Another point is that gallery control in Power Apps may cause delay in items display when user quickly scroll so using swiping behavior with one item display at a time can positively influence overall app UX.

The technique

As an example let’s implement Tinder-alike Swipe Gesture PowerApps . Items that user will move left or right are stored on a SharePoint Online list. To manage which item user should see on the screen we would use a variable that we will increase on every swipe. After every swipe user should see some feedback information. On the YT video above I’ve presented 2 different approaches (with extra screen and with simple toast notification). Below instruction applies to extra screen implementation.

The trick goes like this:

  • On app start set a variable that we will be using as an iterator
    Set(Iterator,1);
  • In screen OnVisible function load an item in the place equivalent to the iterator value
    Set(DisplayedItem,Last(FirstN(SPOSourceList,Iterator)))
  • Place an item on the screen you want a user to move (ie. an Image1 control). Remember to set Image value to value of proper column of DisplayedItem.
  • Add slider control and put it above of added item in tree view
  • Set the item X value as:
    (‘Screen1’.Width*Slider1.Value/100)-Image1.Width/2
    Above function counts the position of the item center based on the slider handle value
  • Remember to make slider big enough so a user always hit its handle. In my case I’ve used handle size of 200. Your screen should look and behave like this now:
  • Now in slider OnChange place below function. The function make action once a slider handle will be placed on the left or right side of the screen. In my case I’m Navigating user to screen AND do Patch function to update data source.
If(
    Slider1.Value < 40,
    Navigate(Rejected,ScreenTransition.Cover);
    Patch(
        SPOSourceList,
        DisplayedItem,
        {<yourColumnName>: false}
    ),
    Slider1.Value > 60,
    Navigate(Accepted,ScreenTransition.CoverRight);
    Patch(
        SPOSourceList,
        DisplayedItem,
        {<yourColumnName>: true}
    );
);
  • On both screens (Accepted and Rejected) I have invisible timers that after (OnTimerEnd property) 1 second (1000 ms) run following function
Set(Iterator,Iterator+1); //increase iterator
Reset(Slider1); //place next image to display in the middle of the screen
Navigate('Screen1',ScreenTransition.Fade) //navigate

And this is how you can implement Swipe Gesture in PowerApps! Simple, right? 🙂

When persistence becomes a waste of time & energy

For many years I repeated that if your company is thinking about Office365 subscription then you should choose Microsoft Teams instead of Slack.

No matter if you’re Windows fan , Mac fan or Linux fan (yes, yes, yes: https://microsoftteams.uservoice.com/forums/555103-public/suggestions/16911565-linux-client).

Especially if you already have Office365 subscription it’s the only reasonable choice. Reasonable from the perspective of:

  • financial costs. Teams are part of Office365. And Office365 is so many tools that constantly evolve, new features are deployed and they’re being integrated which covers more and more scenarios (old but cool features, fresh and tasty integration). Oh and the PowerPlatform…the only word that comes to my mind when I think about PowerPlatform is: OMG-IT’S-A-GAMECHANGER-AND-I-LOVE-IT. Low Code is becoming strong branch in IT.
  • environment integration. I’ll just repeat what I wrote above: integration between different tools are covering more and more scenarios (old but cool features, fresh and tasty integration). This helps yourself to switch from tools context to task context = you can focus on your task: conversation, attaching a file or assigning task right from the same application. Even if in fact there are many apps used in the back-end.
  • extension capabilities. API, bots, Power Apps, connectors, tabs to name a few.

Anyway I remember hundreds of discussions when I was trying to convince people to above perspective but they didn’t listen to me. They loved Slack, loved Linux, hate Microsoft…and payed for Office365 licenses for the whole company (sic!). And when I explained to them the Microsoft strategy they called me a blind MS fanboy. Meh…

My message is this: sometimes people are deaf for arguments you tell them. In such situation you have 2 options:

  1. Fight as long as needed to crush the resistance. A drop drills a rock.
  2. Do this ¯\_(ツ)_/¯ and walk away to bring good somewhere else. Somewhere where people are more open for a discussion and listen your arguments. Look for a place when you can work less and do more good at the same time.

The latter is my secret strategy. To leave instead of to fight despite the costs. I see such approach not as a surrender but as a wise move. Because life is too short and your time too precious to not respect it. Thanks to that each year brings me to better place, better clients, better projects and deliveries. Persistently trying to change others against their will is not a grit (great book btw). It’s waste of time and energy.

P.S. I know I was not writing for a long time. You can’t imagined how much I was missing this. But there was always something more important, more urgent…baby, my company, community…Ah, forget it. Just cross your fingers for a come back 🙂

PowerApps Document Translator app

Today I would like to present you one of my favorites apps of my own. I think it’s insanely useful. Especially when you receive an email like below from your client:

The Story

//todo

Usage

Architecture

App consists of following steps:

  1. PowerApps present user interface to let him pick a document (Word or PowerPoint) and select languages he/she wants to translate document to.
  2. A document is uploaded to SharePoint with all metadata (author, desired translated languages)
  3. Microsoft Flow takes a document and pass it to Custom Azure Function
  4. Azure Function open the document and take out each paragraph separately from XML structure.
  5. The paragraph is then translated using Cognitive Service Translation Text API (Azure SaaS) – I used OOB service configuration but it allows for many different tweaks to improve translation output
  6. Azure Function put translated document all together and send it back to Microsoft Flow
  7. Flow saves each translated document as separate file in SharePoint. Thanks to this manner each document content is searchable in SharePoint search. Flow is also responsible to notify user that the documents has been translated.
  8. User can access translated documents directly from the email or using the PowerApps app.

Share PowerApps to external users

This week I wanted to test out new PowerApps capability that is sharing PowerApps Canvas Apps to guest users. And as you may already know – it works like a charm! 🙂

If you’d like to know more about it here is great resource that cover this topic in details (licensing, connectors that supports it etc).

How to use Flow on elevated privileges in SharePoint Online

In this article I’ll show you what is elevated privileges, when you may need it and how to run a Microsoft Flow in elevated privilages in SharePoint Online.

Elevated Privileges

Back days, when I was a SharePoint on-premise developer, there was a code method named RunWithElevatedPrivileges() which allows to accomplishing an operation with a higher permissions. The same functionality was available in the SharePoint Designer for workflows under the name: “App Step”

Technically speaking: using RunWithElevatedPrivileges() method run code with Full Control rights despite of the permissions that come from the user context. It was possible due to executing code under the Application Pool Identity (System Account), which has Site Collection Administrator privileges on all Site Collection hosted by that Application Pool.

However In Microsoft Flow there is no such option of running flow with higher permissions. But this is not without a reason! Even though you may think the best way is to override user permissions just to accomplish one operation, a good practice is to improve your solution architecture first. But sometime you won’t have another choice. When it may happen?

When you may need to elevate user permissions?

Some time ago on polish Microsoft 365 User Group I saw following question: “Can I create / configure the flow to be run on elevated privileges for SharePoint Online?”.

First tendency of repliers were to discourage the author of doing so. But he had a good reason.

Case 1

The author tried to achieve a two-level approval. Everything setup on a list of requests and a status field on it. Users and approvers should only have read access on this list and the logic (status update) should be done seamlessly “under the hood”. So in this case, no matter from which list or platform (ie. PowerApps) you start the flow, it still run under user context…a user who shouldn’t have access to the list with requests.

To be honest, when I though for a seconds I’ve found next example when you may need to run flow with an elevated privileges.

Case 2

Imagine that your users need to submit a request or an order that is stored in a simple SharePoint list. But in the same time you want to submit a record anonymously that is HIDE USER CONTEXT.

Is it possible? Actually it is 🙂

Impersonating Microsoft Flow

Please note that from now on I’ll stop using “elevated privileges” or “elevated permissions” and use “Flow Impersonation” because it’s more coherent to what we will really do. We will not give the user higher permissions, we will use another account with a higher permissions instead.

To explain you the architecture I’m going to use the sample of another solutions of mine: Whistleblowing app. The architecture of that app is as followed:

  • PowerApp gets information from a user and pass to flow. On this stage everything is personalized in PowerApps and Flow. We know who send what.
  • Flow A pass over HTTP request data to a Flow B. This is the exact moment where we pass data that is essential for the business logic, lose all context information, and impersonate user.

Impersonation is possible because connectors in Flow triggered by HTTP request runs under the accounts which was used during configuration step.

The whole IKEA-alike instruction of setting this up you can find in below video 🙂

How to work with option set in PowerApps

In this article I’ll share my experience and everything I learned about Option Set in PowerApps. Check out my cheat sheet.

Prepare for a battle

Before I start a project I prepare myself and gather all information that helps me to avoid getting into technical dead ends, improve project delivery pace and work efficiency. I read documentation, articles, watch tutorials and do proper exams (for PowerApps & CDS I can recommend MB-200 exam). Like Abraham Lincoln once said:

Image result for abraham lincoln give me six hours meaning

At the same time, no matter how hard you try you won’t be prepared to everything. Especially in IT projects where you can expect the unexpected. Sometimes you’ll need to solve those corner cases which are “very specific only to your project & to this very unique setup” only you have. But sometimes you just try to do some “ordinary operation” (at least as you think about it) and you discovered that it’s not possible or at least is not easy. The common reason for such situations is that the functionality or feature is so new that documentation does not cover it sufficiently and you can’t find ANYTHING (video, article, blog) that completely covers the topic.

Option Sets for PowerApps Canvas apps are one of those topics and this article is about to group all information together.

CDS Option Set cheat sheet for PowerApps

Did you know: You can contact me if you need my help with PowerApps and Flow. I conduct trainings, consultations, build PoC or Solution and also make an audit of your PowerApps app.

What is Option Set? A field type
What it contains? List of text values
Technical synonyms A dictionary, an array of enums
Main pros Centrally managed
Dynamic extending No, only predefined values
When not to use it? Case 1: 
If you need to reference to Option Set values without creating connection to Entity with this Option Set.
Solution:
For local usage use Collection.
For global usage use Entity.

Case 2:
You need additional metadata to Option Set values (ie. Country Population)
Solution: Use Entity.

Option Sets in PowerApps

In PowerApps Option set is one of the field types you can use in your Entity. The information type that Option Set stores is a list of text values. And here comes the Option Set advantage – once you define its text values you can centrally managed it.

Imagine you have a list of countries you have offices in. Once you define such list you can use it in any of your apps. And even more than that – you can use it in PowerBi reports, Flow, Dynamics365 and all other applications that can integrate with CDS.

CASE 1: You’re doing so well that you’re opening a new office in a new country. Would you update all solutions that use your Option Set? Of course not! You only need to update your Option Set definition.

Case 2: You’re doing even better and your office in England start to operate all over United Kingdom. Would you add new text value to a list and update all solutions that use your Option Set? Of course not! You only need to rename England to United Kingdom. And that’s it – this is possible because technically speaking Option Set is a table with 2 columns: Id and Text.

The Text column is only for us – the humans. The Id is used by them – computers, programs, solutions etc. And this is where all misunderstandings begins. People are confused “why I can’t use a text value to set Options Set value? Machines are confused “why humans does not appreciate I can distinguish 2 options even if they have the same text value?”

Yes, in CDS Option Set you can have 2 items with the same name. CDS will use Id value to differentiate them.

How to work with the field in PowerApps and Flow?

Let’s split the above question on 2 parts:

  1. How to reference an Option Set Value in Microsoft Flow?
  2. How to use Option Set field in PowerApps?
    • Option Set with Dropdown
    • Filter by Option Set field
    • Update Option Set field using Patch function

How to reference an Option Set value?

Long story short: use the item Id. How to find it?

  1. In PowerApps website open Option Sets
  2. Open your Option Set
  3. Click on “…” > View More

Elaiza Benitez recorded a video where she shows how to use option set value in Flow so I’ll skip reinventing a wheel and just give you a link to the video already starting in the right time.

How to use the field?

Option Set with Choice dropdown

Using Choices function with a name of Option Set works great.

Filter by Option Set field

Use special [@ColumnName] reference that directly point to the Option Set. You’ll see the Option Set values you can easily choose from.

Disclaimer: Last year there was anupdate that improved how PowerApps makers could reference to Option Set field values but…somehow it doesn’t work for me no matter on how many tenants I tried that :(. But I’m sure sooner or later described in above article method (that is reference using ‘OptionSetName (Entity Name)’.Value) will work so stay tuned and treat my post as workaround.

To turn this feature on go to App Settings > Advanced Settings > “Relational data, option sets and other new features for CDS”

Update Option Set field using Patch function

Use the same method as I’ve described in previous section (use [@ColumnName].
Following formula works for me like a charm:

Patch('MyEntity',Gallery1.Selected,{cr10a_country:[@Country].France})

Hope this will be useful for you.

If you have any questions – let me know.

Add fields to SharePoint List using Flow

Last week I’ve explained how to create SharePoint list or library using Microsoft Flow. This time I’ll show you how you can add fields to your SharePoint List using Microsoft Flow, and add items to your list. This will complete the scenario so you’ll get a full solution for dynamic creation SharePoint List along with fields and values.

Automation is the key

Just before I’ll deep dive into the details let’s first cover the question of: why you may even need such dynamic list creation with fields and values?

So imagine you have multiple PowerApps apps for different purposes each ie:

  • time tracking
  • resources booking
  • goals review
  • team members praise
  • retrospective meetings notes

Each app stores data in SharePoint and is team specific – this means some team may want to have it, others not. Also the app data should be team related.

Other often scenario is when you have an app that you want easily deploy in your client’s environment. This was my case when I’ve created my Delegation Playground app that uses SharePoint list – I wanted to automate the process of list creation so app user don’t need to create it manually. I wanted it to be as simple as possible.

In PowerApps there is a Solution concept but it applies only to PowerApps with data stored in Common Data Service (which I highly recommend – check this post of mine) so if your app works with SharePoint Online lists or libraries you may need the below Flow.

The Plan

Ok, so last time we end up with created SharePoint list. Now we need to:

  • Add Number and Boolean fields
  • Add 3000 rows to the list
Image result for over 9000 meme
I wish to make it 9001 but…there are some limits 🙁

Add new fields to SharePoint list using Microsoft Flow

To create new SP field we’ll going to use SP REST API (by using Send an HTTP request to SharePoint action). However this time we need to use new Uri – the one dedicated to list modification. As you can see in this POST request example we need to know list guid to make proper operation. The Uri need to be like:

http://<site url>/_api/web/lists(guid'<your_new_list_guid')

But how to get a newly created list GUID? Oh that’s simple – make a sample call of the Flow we’ve made last time and use data it returns.

Disclaimer: Some of you may already know that there is a simpler Uri API endpoint _api/web/lists/GetByTitle(‘<list name>’) as described here but the way I present brings an additional learning value.

Just follow guideline below 🙂

1. Run Flow that creates list in SharePoint site location
2. Copy its output JSON
3. Add Parse JSON action
4. Put “body” in Content property
5. Click “Generate schema”, paste JSON and click Done
6. Add new string variable
7. As value add id field
8. Selected it and paste into the Expression field
9. Remove closing } and opening @{
10. Add split( on the beginning – we’ll use Split function and use id field value as first argument
11. Add ,’_api’)[1] on the end – we’ll split the string by ‘_api’ substring and take second element from the output collection
The whole expression looks like this:
split(body(‘Parse_JSON’)?[‘d’]?[‘__metadata’]?[‘id’],’_api’)[1]

Now once we have the Uri of our newly create SharePoint list we can use example from this documentation page and use a field type value related to expected field type (all possible sharepoint field types values are here).

Disclaimer: As you can see we’re now working a lot with Microsoft official documentation. I recommend this as a really well written and complete reference source for any O365 developer.

Your action should be configured this way now:

Warning: please note that for number field I used Number field type type value, not the Integer field type value. The latter won’t work

Create similar action to create Boolean field:

Protip: Use copying action to clipboard – it’s new and fancy and I love it. And everyone was waiting for it 😀

Add SharePoint items to SharePoint list using Microsoft Flow

To add 9001 items we’re going to use Microsoft Flow “Do Until” loop. It will do defined operations and at the end of the iteration it will increase the iterator. Once the iterator exceed 9001 flow will know that it’s the right time to go out of the loop.

So add new variable called “Iterator”

Now add Do Until loop and select Iterator variable as value property. Set the check to be “is greater than 3000”. Remember also to unfold Change limits section and increase Count to 3000 items and Timeout to PT5H (just in case 1 hour will be to short)

Warning: Do Until has hard limit on 5000 iterations at maximum.

At this point we’ll normally use “Create item” action for SharePoint in Microsoft Flow. However we’ve just created the list and the mentioned action won’t work with dynamically created list. So…for the forth time we’ll use Send HTTP request to SharePoint 🙂

Protip: “Send HTTP request to SharePoint” is sooo universal and powerful. You can do almost ANYTHING using this action. One of my favorite.

You can find here documentation page where the example Create List Item POST HTTP request is made (see? I told you it’s well written and helpful). Let me show you configured action and code first and then I’ll describe it:

{
  __metadata:  
            {  
                type: "SP.Data.Delegation_x0020_PlaygroundListItem"  
            }, 
Title: 'Item @{variables('Iterator')}',
Integer_x0020_Field:@{variables('Iterator')},
Bool_x0020_Field:@{if(equals(mod(variables('Iterator'),2),0),'true','false')}}

So what I’ve done is (follow my steps):

  1. Add “Send HTTP Request to SharePoint” action inside Do Until loop
  2. Fill Site Address, Method, Uri and Headers as in the screenshot
  3. Paste above code but please make sure to:
    • swap Delegation_x0020_Playground with your list name
    • have ListItem suffix. So for your list named “MyList” the type string will be SP.Data.MyListListItem
    • swap all special characters (like space) in the list name. Good article about it was written here by Stefan Bauer
    • When providing field names remember about special characters rule described above
    • In my case I used expression with modulo function so every even item has Bool field = true

Last thing we need to do is to increase the iterator by 1 inside Do Until loo to not end up with infinite loop.

AND THAT’S IT!

WOOHOO!

You’ve just created flow that create list with fields and list items. And everything done with one push of a button to trigger your flow 🙂

Automation is beautiful.

And just in case you want to download ready made solution – you can download it from here 🙂

Hope this post was helpful. Write me a comment if you have any question or used my flow.

Create SharePoint list using Flow

Microsoft Flow is a great automation tool. It integrates with over 230 services using connectors where each of them contains multiple triggers and actions. One of those connectors is a SharePoint Online connector with a set of 10 triggers and 47 actions(!). Such big set allows to create many scenarios. Starting from managing simple resource list to invoice approvals along with permissions on different levels. Even though, SharePoint Online connector does not contains actions like “Create list”. Such actionmay be useful if you want to create those elements dynamically. Before you think “what a bummer” and turn your eyes on custom code solutions please read this article. I’ll show you how you can create SharePoint List or SharePoint Library using Microsoft Flow.

Create list from list template

Before I’ll show you how I did that let me explain why I need this kind of solution.

Last week I’ve publishing Delegation Learning App. The app was an extension to what has been described in article How to overcome 500 items limit in PowerApps. Using my app a user is walkthrough different integration scenarios – static data, excel from onedrive and SharePoint Online. To make all steps easy I wanted the data sources to be already prepared for the user. With static and excel data there was no problem – I’ve simply attached them to app package. But how to prepare SharePoint Online list? I had 2 options:

  1. Give access to my environment – however I didn’t want to add external access for anyone who want to use an app. I didn’t want to create an account which I would be shared to others too.
  2. Prepare an excel that a user can import to his SharePoint Online – however this option has some import column limitations and I my aim was to create an universal solution.
  3. Create a list dynamically using Microsoft Flow – for me this method was perfect. I could defined any list definition and add items to this list. The only thing that the user had to do is import import flow (which is done automatically if you import PowerApps package) and run it.

Now you know why I decided to go with this option. Now let me explain what I’ve used and how it works.

Create SharePoint list using Flow

To achieve my goal I need use “Send as HTTP request to SharePoint” action which allows to execute any action that is available through SPO REST API.

SharePoint Online REST API is a special way of sending instructions to SPO using HTTP requests. I.e. by making HTTP GET call to https://<Site ABCD url>/_api/web/lists you can get a list off all lists in ABCD site.

Did you know?
Your browser is constantly using such way of communication. Every time when you open some web site your browser is making an HTTP GET request. Go ahead, open a new browser tab and try it: paste https://<Site ABCD url>/_api/web/lists URL (of course swap <Site ABCD url> with your own SPO site url) to see the XML representation of all lists that exists in the site along with metadata

To create a SharePoint list I need to do what is described in this section. In above section you can find below example:

1. url: "http://<site url>/_api/web/lists"
2. type: "POST"
3. headers:{
            "content-type": "application/json;odata=verbose",
            "accept": "application/json;odata=verbose"
}
4. body: { '__metadata': { 'type': 'SP.List' }, 'AllowContentTypes': true,
 'BaseTemplate': 100, 'ContentTypesEnabled': true, 'Description': 'My list description', 'Title': 'Test' }
           

Let me quickly translate it for you.

1. Hey SharePoint, I'm going to do something with your lists...
2. ...and that'll be a modification (create or update)...
3. ...And in step 4 (that is body) I'll send you the details using JSON notation ("content-type" header). If you want to communicate with me please use the JSON notation ("accept" header)...
4. Ok, so the message is this: <the body>

Normally you would also need to authorize yourself providing an token – OAuth token to be precise – but thanks to MS Flow action, the connector is taking care of it 🙂

The last question you may have now is: “how should I know what to put in the body?”. There is a wonderful resource that explains everything you can do using SharePoint REST API: REST API references and samples (add it to your bookmarks, trust me).

Now, in above knowledge base there is a sub-page where you can find all properties you can use in the body: List Properties. You can find there the definition of all used properties. I.e. Base Template represents a ListTemplateType value (see ListTemplateType reference for template type values).

So the last thing is to…

Bring everything back together

Now let’s convert theoretical knowledge into our Microsoft Flow solution.

Disclaimer: Normally I would paste some image below and describe what it shows + what you need to do to achieve the presented result. But thanks to Clarissa Gillingham I realized that if an image is worth a thousands words, a movie is worth a thousands images (23 images per second to be precise #GeekContent). That’s why I’ll just leave with a movie – I hope it’s self explanatory 🙂

Code used for Send an HTTP request to SharePoint is below:

URI:
_api/web/lists

HEADERS:
content-type = application/json;odata=verbose
accept = application/json;odata=verbose

BODY:
{ '__metadata': { 'type': 'SP.List' }, 'AllowContentTypes': true, 'BaseTemplate': 100, 'Description': 'List with items to work with delegations in PowerApps', 'Title': 'Delegation Playground' }

Ready Flow you can download from here.

PERFECT! Now you can click Flow button, provide ANY SharePoint Site URL you have access to and the defined list will be created there. Is that everything? OF COURSE NOT! A list with the default settings contains only built-in fields which won’t be enough in 99% cases. So now we should add some fields…but this part I’ll cover next week 🙂

Stay tuned!