niedziela, 29 marca 2015

Traity ortogonalnie i nieortogonalnie

"Wiem, że nie wiem" to tzw. poziom świadomej niekompetencji kiedy miejsce ignorancji zastępują pytania bez odpowiedzi.

I takie właśnie pytanie pojawiło się na ostatnim warsztacie - jak dobrze zmodyfikować zachowanie klasy przy pomocy Traita tak by ona nic o tym nie wiedziała. Na miejscu niestety nie udało mi się odpowiedzieć ale teraz mamy drugą szansę.

Ortogonalne

Ortogonalne to to samo co prostopadłe ale brzmi mądrzej. W tym przypadku nie ma modyfikacji zachowania klasy jako takiej ale Trait dodaje zupełnie nową funkcjonalność - tutaj logowanie.

abstract class Actor {
    def receive(s:String):Unit
}

//wersja oryginalna
class EchoActor extends Actor {
    override def receive(s:String)=println(s"echo $s")
}

//wersja z mixinem
class EchoActor extends Actor with Logging{
    override def receive(s:String)={
        logger.log(s)
        println(s"echo $s")
    }
}


trait Logging{
    class Logger{
        def log(s:String)=println(s"LOGGING : $s")
    }
    val logger=new Logger
}

 new EchoActor().receive("message")

I teraz pytanie jak to zrobić by dodać to logowanie ale bez modyfikacji EchoActor?

Podejście pierwsze - self type

Trzeba trochę eksperymentować w życiu i nie zrażać się tym, że czasem nie wychodzi. Bo teraz to co napiszę nie zadziała.

//ten kawalek/mechanizm "self:Actor=> " nazywa się "self-type" i daje traitowi
//wiedzę, z jaką klasą będzie zmiksowany
trait NonOrthogonalLogging1{self:Actor=>
    
    def cosTam(){
      self.receive("aaa")
    }
//chociaz nie dziedziczymy po aktorze to trzeba dać override bo inaczej będzie się walić przy miksowaniu    
    override def receive(m:String):Unit={
      println(s"INFO : ${m}")
//nie można tutaj użyć super bo teoretycznie dziedziczymy z AnyRef
      self.receive(m)
    }
  }

//no i koniec końców nic niespodziewanego się nie dzieje, "self.receive" wywołuje metodę z traita a nie z klasy i cały program się zapętla.
val echo=new EchoActor() with NonOrthogonalLogging1
echo.receive("test")

Podejście drugie - dziedziczenie klasy abstrakcyjnej

trait NonOrthogonalLogging2 extends Actor{self:Actor=>
    
//to jest dziwne, trzeba dać abstract bo inaczje kompilator sie pluje, ze receive z nadklasy jest abstract.
    abstract override def receive(m:String):Unit={
      println(s"INFO : ${m}")
      super.receive(m)
    }
  }
  
  class EchoActor extends Actor{
    def receive(m:String)=println(s"ECHO ${m}")
  }

   //no i to już działa
   val echo=new EchoActor() with NonOrthogonalLogging2
   echo.receive("test")

//INFO : test
//ECHO test

Oczywiście, jeśli ktoś wie jak to zrobić lepiej niech śmiało da znać.

Warsztat

Na warsztat http://www.meetup.com/Java-User-Group-Lodz/events/221347512/ zapisało się 25 osób +15 jest na liście oczekujących co daje 40 osób zainteresowanych nauką Scali. Fajnie, że ludzie są zmotywowani do nauki Scali i to także motywuje mnie, żeby robić te warsztaty.

Niedawno na EDX był kurs szczęścia- dosłownie kurs szczęścia EDX : Science of hapiness. - bazujący na ciekawym dziale psychologii czyli Psychologii pozytywnej. Motyw działalności w lokalnych społecznościach pojawiał się tam dosyć często.

Więcej można o tym poczytać sobie też tutaj : http://www.actionforhappiness.org/10-keys-to-happier-living/local-community/details. Interakcje społeczne zwiększają nasilenie wytwarzania oksytocyny, która jest hormonem antagonistycznym do kortyzolu co generalnie poprawia nastrój i tak dalej.

poniedziałek, 23 marca 2015

Warsztaty,insulina i dźwignia emocjonalna

W zeszłym tygodniu odbyły się trzy eventy edukacyjne.
Mam z nich foty.
Foty można podzielić na dwa rodzaje
Foty z logiem
Foty bez loga
Można umieścić foty bez loga - są one przyjemne i nic poza tym
Można umieścić foty z logiem
Być może stworzą one dodatnie sprzężenie zwrotne pomiędzy jednostką generującą wartość edukacyjną a firmą, która czerpie wartość marketingową
Co może doprowadzić do nasilenia tego procesu
Co jest dobre
Ale
O firmie słyszałem, gdzie na spotkaniu ludzi z krwią w kolorze błękitu (w to uwierzyli bo sami sobie nawciskali kitu)
Decyzja zapadła by wszelka forma dzielenia się treścią z internetem byłą centralnie kontrolowana
W czasie gdy na twitterze idzie 1000 branżowych tweetów na sekundę
Centralne sterowanie
W czasie gdy w net leci 100000 lajków an sekundę
Centralne sterowanie
POWO-KU*WA-DZENIA

Wracając do edukacji

Jeszcze raz dzięki dla Marcina Grzejszcza­ka i Lukasza Szczęsnego za warsztat z mikroserwisów. Poznaliśmy wiele fajnych narzędzi.

Dzięki dla Marka Śmigielskiego za prezentację o Dockerze :

I warsztaty ze scali :

Najbliższy czas

  • Chyba największym wydarzeniem w kwietniu na JUGu będzie występ Jacka Laskowskiego : meetup
  • Ale nie zapomnijmy o innych. 9 kwietnia Marcin Korniluk opowie o Material Design in Practice : meetup (trzeba kalendarz uaktualnić)
  • Pod koniec kwietnia (w Końcu) warsztat! Piotr Zalewski z Cybercom i Grails. Już jest komplet 20 osób także ta technologia też się cieszy zainteresowaniem : meetup
  • A za tydzień pyknę podstawy OOP w Scali. Myślałem, ze gdzieś będę jechał a chyba nie będę : meetup

Pizza na warsztatach

Pizza jest łatwa w obsłudze logistycznej ale na dłuższą metę trzeba znaleźć inne źródło żywienia.
http://www.kuchnia-kuchnia.pl/pl4/teksty1037/wplyw_jedzenia_na_reakcje_hormonalne_organizmu

Niedobór glukozy określany jest jako hipoglikemia lub niski poziom cukru we krwi, powoduje on zmęczenie psychiczne, wywołuje senność która występuje zwłaszcza po spożyciu posiłku lub napoju bogatego w węglowodany. Wątroba nie może jednak tak po prostu uzupełnić glukozy korzystając ze zmagazynowanych zapasów. Zbyt gwałtowne wydzielanie insuliny następujące po spożyciu tych posiłków, uniemożliwia uzupełnienie we krwi glukozy, a to powoduje „wyłączanie się” mózgu.

Wykres na czerwono to niezdrowe nawyki żywieniowe większości ludzi, u których w diecie dominują cukry proste występujące w przetworzonej żywności jak batoniki czy słodkie napoje. Do teog coś było ze wzmacniaczami smaku i tłuszczami trans zawartymi właśnie w pizzy. Zdaje się, że one w długim okresie zwiększają insulinoodporność komórek czy coś takiego. W każdym razie jeśli ktoś ma niski poziom glukozy we krwi to po takiej pizzy pewnie jebnie się spać.

Alternatywnie można jako źródło cukrów używać węglowodanów złożonych jak ryżu brązowego, kaszy itd. Węglowodany złożone są trawione dużo dłużej przez co nie powodują nagłego wyrzutu insuliny. Do tego błonnik z surówki może przedłużyć cały proces trawienia rozciągając wyrzut insuliny. No i gdy poziom glukozy jest na optymalnym poziomie kolejne posiłki nie powinny powodować senności.

Można jeszcze spojrzeć na to : http://pawelwlodarski.blogspot.com/2012/07/bazodanowy-model-hipotezy-insulinowej.html.

Dźwignia emocjonalna

I na koniec technika motywacyjna do nauki, która zwie się "dźwignią emocjonalną"(emotional leverage) i została zaczerpnięta od światowej sławy mówcy motywacyjnego - Tonego Robinsa.

Jakkolwiek ponieważ nie mogę znaleźć żadnego linku, więc może to się inaczej nazywało i nie był to Tony Robins. W każdym razie idea jest prosta.

  1. Mamy sytuację 1: w której aby dokonać zmiany należy włożyć weń pewien wysiłek. Ponieważ działa Homeostaza,strefa komfortu, lenistwo itd., więc o zmianę trudno
  2. Dążymy do sytuacji 2 : w której utrzymanie obecnego stanu wymaga od nas więcej energii aniżeli dokonanie zmiany
Brzmi bardzo abstrakcyjnie, więc przykład - ten będzie dobry dla introwertyków.

Strach przed podejściem do obcej osoby. Podejście (zmiana) to wydatek energetyczny. Pozostanie w danym miejscu - Homeostaza - oszczędzanie energii.

Teraz wyobrażmy sobie, że ktoś tak sprytnie szturcha tę obcą osobę w ramię, że ona myśli iż to my zrobiliśmy
W tej sytuacji jest tak dziwnie i niezręcznie, że tak naprawdę nie zrobienie niczego wymaga od nas więcej wysiłku niż powiedzenie czegokolwiek. I tak dochodzimy do sytuacji, gdzie zmiana jest łątwiejsza w wykonaniu aniżeli pozostanie w status-kło.

Podobną technikę można wykorzystać by zmotywować siebie do wystąpień publicznych bądź to przez deklaracje, ze to zrobimy (wtedy wycofanie się to dodatkowy wysiłek psychiczny). Bądź też dajemy znajomej osobie 1000 złotych i może ona oddać nam je tylko po wystąpieniu.

W wersji HARDCORE ta technika kołczingu i motywacji zaprezentowana jest w poniższym filmiku od sekundy 0:48 do gdzieś tak 2:00.

Udanej zabawy.

poniedziałek, 2 marca 2015

Warsztaty - wstęp do OOP w Scali plus ogólnie o nauce

GitBooks - bardzo dobre do umieszczania ćwiczeń

Znalazłem fajna stronkę do umieszczania kawałków kodu do warsztatów. Linki poniżej i teraz już nie będę miał stresu, ze jak wysyłam namiary to tylko po to by nabijać ilość odwiedzin na blogu

Kolejne spotkania JUG

W środę są warsztaty z programowania wielowątkowego w scali. 15 osób było na waitliście także zwiększyłem limit do 30 osób. Będzie to wyjście poza strefę komfortu, która do tej pory wynosiła "do 15 osób". Link na Meetupie

W czwartek Śmigło prezentuje Dockera : Docker na Meetupie

W sobotę Marcin Grzejszcza­k robi Hackaton z Mikroserwisów : Mikroserwisy na Meetupie

Do tego są nowe wpisy na blogu JUGa : http://blog.juglodz.pl/ Dodałem też swoja recenzję swojego wystąpienia z końca lutego : http://blog.juglodz.pl/2015/03/26022015-obsuga-sytuacji-wyjatkowych.html

Zabawa i nauka

Z zainteresowania warsztatami ze Scali widzę, że sam języka staje się popularny wśród tutaj w Łodzi to jednak nadal duża grupa zapewne zastanawia się "po co mi to?". W tych okolicznościach należy się skupić na przystępności i prostocie języka aniżeli na jakichś kosmicznych funkcjonalnościach.

Do tego warsztaty muszą być prowadzone w sposób na tyle interesujący aby ludzi nie kusiło wchodzenie na fejsa. Także nie tylko sama zawartość warsztatu jest ważna
Za moich czasów na nudnym wykładzie można było grać tylko w statki - teraz można zestawić serwer call of duty z komórki
Do tego ludzie idą na niego zmęczeni po pracy czy szkole - MA BYĆ INTERESUJĄCO!

Warsztaty i Fotki jako budowa społęczności

O tutaj mamy definicję community --> Community a social group of any size whose members reside in a specific locality,

1000 lat temu to było proste bo ludzie całe życie mieszkali w jednym miejscu. Teraz miejsce jest "efemeryczne" i jedyny sposób na zakotwiczenie jakiejś tożsamości czasowo-przestrzennej to porobienie fotek. Tak to piszę bo czasem ktoś narzeka na robienie fotek.

Fotki są potrzebne do budowy społeczneści skupionej wokół wspólnej nauki:

Dalsza Nauka

W dalszej kolejności przejdziemy do opanowania mechaniki FP w Scali czyli zrozumiemy czemu czasem są dwie pary nawiasów i dlaczego raz funkcja jest deklarowana z klamerkami a raz z nawiasami. Później można przejść do programowania Funkcyjnego jako takiego. w miedzy czasie pojawi się opcja na naukę konkretnych narzędzi jak Akka i może uda się chociaż na chwilę coś z Playa. Plus może coś z BigData będzie.

Trzeba się uczyć bo inaczej tylko Cobol zostanie.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------