10 lipca 2013

Scalowo na Scalania 1.0

2 komentarzy
Na pierwszej edycji Scalania pojawiło się ponad 40 osób! Jak pisałem na przeddzień spotkania było przez to różnorodnie pod względem wiedzy o języku Scala, co znalazło swój oddźwięk w komentarzach na Meetupie, szczególnie pod kątem osób nowych w temacie.


I faktycznie było kilka nowych osób, które nie zraziły się jednak tłumem i wyrażały swoje potrzeby w poznawaniu składni języka czy zestawienia środowiska pracy. Brawo za aktywny udział!

Co jest zaskakujące, to trafność zapisów - prawie 100%. Na 43 osoby, które zapisały się na Meetupie na dzień spotkania, przyszło 43! To odbiega od tradycyjnego stosunku deklaracji do faktycznego udziału. Kolejne brawa za rozsądek.

Rozpoczęliśmy o 17:30 od przywitania sponsora - firmy Javart - i przedstawienia jego profilu. Potrzeb kadrowych do projektów w języku Scala jest sporo, więc zainteresowani nimi proszeni są o natychmiastowy kontakt ze sponsorem.

Dzięki Javartowi mogliśmy liczyć na (obfity!) poczęstunek oraz dwie książki „Język programowania Scala” Grzegorza Balcerka + inne gadżety mniejszego kalibru merytorycznego. Brawa dla sponsora! Już się mówi o jego dalszych akcjach okołoscalowych w projektach oraz w ramach Warszawa JUG i Scalania.


Po 15 minutach byliśmy gotowi do pierwszego zadania. Na tapetę poszło P01 (*) Find the last element of a list. Krótka dyskusja o możliwych rozwiązaniach (tutaj należałoby wesprzeć się scaladoc, ale zabrakło tego w wymaganiach i wielu nie spełniała tego warunku), aby ostatecznie spróbować rozwiązać to wspólnie. Ponownie krótka wymiana wiedzy i nadjechał Subway.

Czas jedzenia upłynął na dyskusjach o możliwych rozwiązaniach i innych sprawach scalowych.

Od około 18:30 aż do 20:30, z niewielką przerwą na zestaw pizz, rozwiązywaliśmy zadania, aby dojść do P08 (**) Eliminate consecutive duplicates of list elements.

W międzyczasie posiłkowaliśmy się wiedzą naszych ekspertów w osobach +Grzegorz Balcerek oraz +Grzegorz Kubiak. Skorzystaliśmy z niej kilkakrotnie, za co obu panom baaaaardzo dziękuję.

Formuła spotkania, a właściwie rozwiązywania zadań, kręciła się wokół schematu - krótka dyskusja o potencjalnych taktykach na rozwiązanie zadania (tutaj ponownie namawiałbym na użycie scaladoc, ale wielu go po prostu nie miało), sama próba napisania rozwiązania zadania samodzielnie przez uczestników, aby po 5-10 minutach omówić rozwiązanie. Początkowo ja omawiałem rozwiązania z niewielką pomocą publiczności, aby przy końcowych zadaniach całkowicie zejść ze sceny i pozwolić innym na napisanie rozwiązania na moim laptopie (w SublimeText 2 ze względu na podświetlanie składni), uruchomienie w Scala REPL i próbowanie rozwiązań alternatywnych.


Pomysł angażowania publiczności do prezentowania własnego rozwiązania uważam za najbardziej wartościową rzecz całego spotkania. Nie sądziłem, że się uda. Udało się i powiem, że mimo wielu osób, spotkanie udało się utrzymać w pewnych ryzach merytoryczno-logistycznych (szczególnie pod kątem zabierania głosu przez uczestników). Pełna kultura. Brawo!

Dla mnie, Scalania 1.0 było bardzo wartościowym spotkaniem społecznościowo oraz merytorycznie. Uważam, że komentarze nie pozostawiają złudzeń, że należy Scalania kontynuować, a nawet podzielić na szkółkę (dla początkujących - bez odbycia kursu Functional Programming Principles in Scala na Coursera), akademię (dla bardziej zaawansowanych) oraz hack-a-thon, scalatron czy wspólne rozwiązywanie błędów w projektach scalowych, np. kalibru Akka czy Play Framework. Właśnie takiej wiedzy potrzebowałem (przed wakacjami), aby trafniej organizować kolejne edycje Scalania, których jedynym celem jest zwiększenie zainteresowania językiem Scala i dogłębne zrozumienia jego cech (nie mylić z trait). Myślę, że jesteśmy na dobrej drodze.

A jak Tobie się podobało? Komentarze mile widziane, bo bez pomocy będzie podobnie (bo w końcu, ile jedna osoba może mieć wiedzy, jak coś zrobić dobrze?!) Liczę na bogaty (merytorycznie) strumień komentarzy.

Dziękuję wszystkim za możliwość odpalenia inicjatywy Scalania. Do zobaczenia niebawem.

08 lipca 2013

Scalania - spotkania z językiem Scala

0 komentarzy
Jutro, we wtorek, 9 lipca na wydziale Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego (MIM UW) na Banacha 2 w Warszawie odbędzie się pierwsze spotkanie-warsztaty (aka kata) związane z językiem Scala - Scalania - w ramach cyklicznych spotkań warszawskiej grupy javowej (Warszawa JUG).

Po moim przejściu do Citi na stanowisko szefa zespołu programistów Scala/Clojure/Java (a może i F# niebawem) język Scala jest mi niezwykle bliski i będzie go coraz więcej wokół mnie. Stąd też pomysł, aby w miłym gronie podszkolić się z tego języka, bo podobnież najlepsza nauka możliwa jest przy dobrej zabawie w doborowym towarzystwie. W Citi, przy projektach komercyjnych, to jedno, a w ramach Warszawa JUG, to drugie. Nie mogłem odmówić sobie przyjemności skorzystać z obu miejsc. Wybaczcie zachłanność.

Patrząc na zestawienie uczestników pierwszego Scalania nie mam obaw, że dobre towarzystwo jest wliczone już w kontrakt! Na moment pisania tego wpisu swój udział zadeklarowały 43 osoby, co dwukrotnie przekroczyło moje początkowe oczekiwania (i trochę zbiło z tropu, bo pojawiły się niemałe obawy, czy da się mój pomysł zrealizować w takim tłumie).

Zaczynamy wyjątkowo o 17:30 z zestawem krótkich zadań programistycznych od Grzegorza Balcerka oraz S-99: Ninety-Nine Scala Problems. Grzegorz, z którym pracuję w Dream Teamie w Citi, zadeklarował swoją pomoc i pojawi się na spotkaniu! Nie tylko, że skorzystamy z jego zadań i jego obecności, ale wręczymy dwa egzemplarze jego książki "Język programowania Scala". Nie mam już obaw odnośnie obsady i zawartości merytorycznej.

Na spotkaniu pojawi się również Grzegorz Kubiak z Javartu, które postanowiło wejść aktywnie w organizację Scalania i ją uatrakcyjnić. Możemy liczyć na wsparcie merytoryczne Grzegorza oraz strawę! Z Javartem spotkanie będzie znacznie przyjemniejsze. Dzięki Grzesiek i nasz sponsor - Javart! Będzie doskonała okazja zamienić słowo z Grzegorzem o możliwym zaangażowaniu w projekty scalowe w Javarcie. Od dzisiaj, kiedykolwiek pomyślę o pracy ze Scalą w Warszawie na myśl przyjdą mi dwie firmy - Citi oraz Javart (kolejność nieprzypadkowa).

Więcej o samym spotkaniu na stronie Scalania.pl. Zapraszam!

03 lipca 2013

Gwiazdkowa choinka w Scali (z użyciem Range, map i foreach)...również na Scalania.PL

7 komentarzy
Jeszcze daleko mi do zakończenia lektury książki Scala for the Impatient Cay'a Horstmann'a (jestem dopiero na 13 rozdziale, z 22), a już jestem pewien, że to najlepsza książka o Scali, którą dotąd przeczytałem (nie czytałem ich wiele, więc wszystko przede mną i proszę się nie sugerować rekomendacją).

Książka w sposób doskonały wprowadza w tajniki Scali prowadząc czytelnika za rękę - najpierw słów kilka o problemie, aby przedstawić rozwiązanie przez przykłady. Cała książka nafaszerowana jest przykładami i co rusz można trafić na coraz bardziej ciekawe jednolinijkowce. Książka marzenie!

Dzisiaj zobaczyłem kombinację Range, map i foreach do wyrysowania choinki z gwiazdek.
*
**
***
****
*****
Zanim zadam zadanie, proponuję odświeżenie wiadomości dotyczących programowania funkcyjnego - dzisiaj to Scala, ale w Clojure i F# byłoby baaaardzo podobnie.

Scala udostępnia typ Range, który reprezentuje uporządkowaną serię liczb całkowitych. Korzystamy z metody to do stworzenia obiektu typu Range.
scala> 1 to 5
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)
Range posiada cechę (trait) IndexedSeq, który oferuje metodę map, która z kolei tworzy strukturę danych typu parametru wejściowego i aplikuje funkcję do każdego jej elementu.
scala> scala> (1 to 5) map (_ * 2)
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)
W Scali mamy również operator (metodę) mnożenia dla typu String, który tworzy ciąg powtarzających się znaków o liczności drugiego parametru.
scala> "1" * 5
res2: String = 11111
Ostatnią ważną metodą jest foreach na sekwencji, która wykonuje funkcję z efektem ubocznym, np. wypisanie na ekran (println), dla każdego elementu bez dbania o zwracany wynik.
scala> (1 to 5) foreach { e => println(e.toString * 3) }
111
222
333
444
555
Z tą wiedzą możesz spróbować rozwiązać malutkie zadanko. Zamień "XXX" na właściwe wykonanie funkcji w poniższym jednolinijkowcu, aby wyświetlić choinkę z gwiazdek.
scala> XXX map XXX foreach XXX
*
**
***
****
*****
Jeśli tego typu zadania i sposób nauki języka Scala przystają do Twoich oczekiwań, 9 lipca (wtorek) na MIMUWie organizuję scalania - naukę Scali przez grupowe rozwiązywanie krótkich zadań programistycznych. Gorąco zachęcam do udziału!

01 lipca 2013

Pierwszy dzień...Chorwacji w UE, dzieci na wakacjach i mojej pracy w Citi

2 komentarzy
1 lipca Chorwacja oficjalnie wstąpiła do Uni Europejskiej. Gratulacje!

1 lipca moja córcia Iwetka pierwszy raz poleciała samolotem, sama, do Portugalii (w której nawet ja jeszcze nie byłem!)

1 lipca mój (starszy) syn Patryk wyjechał na wakacje.

1 lipca mój (młodszy) syn Maksym miał zaplanowaną pierwszą wizytę w żłobku (ale plany się "odplanowały"). Następnym razem.

I w końcu, 1 lipca zacząłem pierwszy dzień u nowego pracodawcy Citibank International PLC (Publiczna Spółka Akcyjna) Oddział w Polsce jako menedżer ds. rozwoju aplikacji.

Za Wikipedią:

"Menedżerowie jako przedstawiciele kadry zarządzającej cechują się poczuciem odpowiedzialności, strategicznego myślenia i przewidywania."

Mniemam, że od dzisiaj jestem odpowiedzialny i mam poczucie myślenia i przewidywania (niepotrzebne skreślić).

A poważnie, zapominając na moment o tytułach, to przyjdzie mi pracować w bardzo interesującym zespole, z osobami, które znałem z wcześniejszych aktywności około-Scala-owych i które zawsze imponowały mi swoją wiedzą. Teraz jestem częścią tego zespołu! Gratulacje Jacku!

Niewiele się wydarzyło tego pierwszego dnia w nowej pracy - sesja wprowadzająca w tajniki pracy, aby podsumować BHP i podpisaniem umowy.

Jutro kolejny dzień wdrażania zgodnie z wytycznymi działu kadr. W środę powinienem pojawić się już w biurze na Goleszowskiej. Pora zapoznać się z komunikacją miejską, bo dojazd na drugi koniec Warszawy będzie mnie kosztował sporo czasu i przynajmniej 2 przesiadki. Będzie jeszcze więcej czasu na czytanie i słuchanie!

I zadanko w Scali na koniec - co robi poniższy jednolinijkowiec?
s filter (_ != ' ')
Można krócej? Ładniej?