05 września 2013

Scalania 3 - spotkania z językiem Scala w najbliższą środę, 11 września

0 komentarzy
Zapraszam na trzecie spotkanie z językiem Scala - Scalania 3, które odbędzie się w najbliższą środę, 11 września. Szczegóły organizacyjne znajdziesz na stronie spotkania http://scalania.pl.

Zmianą w stosunku do poprzedniej edycji będzie 15-minutowy przegląd dotychczas wykonanych zadań, których celem jest przypomnienie konstrukcji języka Scala i ich użycie w zadaniach. Ten krok ma skrócić dystans między nowymi uczestnikami spotkania, osobami, które nie były na poprzednich i wykonywały zadania samodzielnie a stałymi bywalcami. Motywem przewodnim będzie praca z projektem scalania z GitHuba, co powinno dodatkowo zachęcić uczestników do jego aktywnego użycia na potrzeby własnego samorozwoju (już pierwszy pull request został zatwierdzony - WIELKIE dzięki Rafał!)

Nie mogę się doczekać, aby sprawdzić, jak wiele się nauczyliśmy w temacie wspólnych scalań przez ostatnie dwie edycje. Wydaje się, że już niewiele można poprawić, a po prostu brakuje nam jedynie obycia z tego typu imprezami. Nie może Cię zabraknąć.

Zapraszam!

01 września 2013

Definiowanie metod w języku Scala - def

0 komentarzy
Podczas ostatniego scalania #2 zgodnie określiliśmy potrzebę utrzymywania wiedzy o języku Scala, co powinno pozwolić nam utrzymać tempo (kontynuować rozwiązywanie kolejnych zadań wspólnie) bez obawy, że nowe osoby w temacie (spotkań czy samego języka) nie zostaną na bocznym torze. Większości osób, z którymi dyskutuję odnośnie scalań, leży na sercu angażowanie coraz większej liczby osób do naszych spotkań przy jednoczesnym "karczowaniu" kolejnych połaci wiedzy scalowej. Pojawiają się pomysły daleko sięgające poza znajomość języka, np. poznanie projektów scalatron lub Play Framework i do tego konieczne jest utrzymanie tempa naszej wspólnej nauki.

Zatem do dzieła!

Ten wpis jest kontynuacją pomysłu - w założeniu powinien pomóc w nauce języka programowania Scala, aby wizyta na kolejnym scalania nie wiązała się z koniecznością udziału w poprzednich. Pozostaje jedynie przeczytać materiał szkoleniowy i rozwiązać poprzednie zadania, aby z podniesioną głową móc podjąć się kolejnych.

Podsumowanie scalania 2 znajdziesz na moim blogu w Scalowanie na Scalaniach #2 = scalowych spotkaniach po godzinach. Strona z materiałem ze Scali, który omówiliśmy jest na wiki projektu scalania - Scalania 2.

Dzisiaj słówko kluczowe def, które służy do definiowania metod w Scali.

Specyfikacja The Scala Language Specification Version 2.8 omawia def w rozdziale 4.6 Function Declarations and Definitions. Poniżej wersja skrócona.

Aż do odwołania ten i kolejne wpisy zakładają, że funkcja i metoda są zamienne (co nie jest prawdą, ale wiedza wykracza poza materiał wprowadzający).

Definiowanie funkcji w Scali ma postać def nazwa-funkcji(parametry-funkcji): typ-wyniku = ciało-funkcji. Poniżej kilka definicji funkcji.
def sum(x: Int, y: Int) = x + y

def f(xs: List[Int]) = xs.size

def isPalindrome(ls: List[Int]): Boolean = ls == ls.reverse
Nazwa funkcji nazwa-funkcji jest ciągiem znaków, który (w jednej z trzech możliwych form) rozpoczyna się literą, po której występuje dowolny ciąg znaków - liter i cyfr. Na nasze potrzeby pozostaniemy przy tej definicji.

Parametry funkcji parametry-funkcji występują w nawiasach okrągłych i są listą elementów identyfikator: typ lub identyfikator: typ = wartość-domyślna oddzielonych przecinkiem.

Typ wyniku funkcji typ-wyniku nie jest koniecznym elementem sygnatury i najczęściej jest pomijany. Wyjątkiem jest funkcja rekurencyjna, czyli taka, która wywołuje samą siebie.

Ciałem funkcji ciało-funkcji jest wyrażenie, które opisuje wynik funkcji. Wyrażenie (ang. expression) zawsze zwraca wartość i jest jej opisem.

Tyle wystarczy na początkowe zadania. Gdybym się mylił, proszę o wskazanie braków i/lub zadawanie pytań uzupełniających.

Uczestników scalania 3 uprasza się o wykonanie zadań 1-6. Proszę odpalić Scala REPL i napisać ciała funkcji p1 do p6. Więcej w README projektu scalania.

28 sierpnia 2013

Scalowanie na Scalaniach #2 = scalowych spotkaniach po godzinach

6 komentarzy
Wróciłem do domu cały rozgrzany, aby rozmyślać o kolejnych odsłonach Scalania = spotkań z językiem Scala.


To już drugie spotkanie pod szyldem scalania i przy 60 osobach zarejestrowanych daje poczucie sensowności kontynuacji pomysłu, aby praktycznie, przez przykłady, poznawać Scalę. Idzie całkiem przyjemnie, ale wciąż nie jestem zachwycony z niewielkiego odzewu ze strony uczestników. Na szczęście dzisiaj udało mi się zamienić słowo z kilkoma i wiem, jak i dlaczego należałoby poprowadzić kolejne odsłony.


Dziękuję wszystkim uczestnikom, a w szczególności +Paweł Cesar Sanjuan Szklarz i +Grzegorz Kubiak za wprowadzenie w tajniki Scali na początku spotkania oraz firmie Javart za wsparcie sponsorskie. Sponsor sprawił, że poza wiedzą merytoryczną, mogliśmy zapomnieć (choćby na chwilę) o głodzie i pragnieniu. Dziękuję!


Nowością dzisiejszego spotkania było "odpalenie" (wcześniej planowanych na 10 minut) 15-minutowych wprowadzeń w konstrukcje języka Scala, które mogą być nieocenione przy rozwiązywaniu zadań. Z dyskusji po spotkaniu wnioskuję, że to należy utrzymać.

Co uzmysłowiono mi po spotkaniu to powód, który może być główną przyczyną, że na Scalaniach mamy taką obsadę. W końcu zadania można rozwiązywać samodzielnie w domu, na plaży, gdziekolwiek, więc po co ten trud związany z przyjściem na spotkanie?! Trudno uzasadnić to bez czegoś szczególnego. I tym szczególnym czymś okazuje się być...możliwość porównywania rozwiązań wspólnie i omawianie technik programistycznych. Dyskusja o nich wydaje się być niemożliwa do odtworzenia w samotności. To należy utrzymać.


Pomysłem na kolejną odsłonę jest wybór 3 osób z zarejestrowanych, które przygotują się do poprowadzenia wstępu niezbędny do rozwiązania kolejnych zadanek.

Padł również pomysł, aby pogrupować uczestników w 3-4 osobowe grupy, wśród których byłaby 1-2 osoby znające Scalę. W taki sposób możnaby pozwolić osobom dyskutować o rozwiązaniach w mniejszych grupach, aby później wyeksponować je dla wszystkich. Nie wiem, czy należałoby to wdrożyć już na kolejnym, trzecim spotkaniu, ale z pewnością należy to rozważyć.


Istotną zmianą w stosunku do dzisiejszego spotkania musi być utrzymanie tempa rozwiązywania zadań, tak aby już wykonane nie były rozwiązywane ponownie (co przytrafiło nam się dzisiaj). Jeszcze nie potrafię wyobrazić sobie, co zrobić z nowymi osobami do języka oraz scalania w ogólności, ale wstępnie zaproponowano stworzenie podsumowań spotkań poprzednich w postaci ściąg z konstrukcjami języka Scala, które oczekuje się od uczestników kolejnych spotkań. Z dzisiejszego dnia należy zapamiętać czym jest dopasowanie wzorców (ang. pattern matching), def do definiowania metod i kilka metod scala.collection.immutable.List.

Udoskonaleniem należałoby uważać tworzenie agendy spotkania, które powinno usprawnić komunikację między organizatorami a uczestnikami.

I ten dostęp do Internetu. Mam wrażenie, że na MIMUWie powinno być detalem, który łatwo da się obsłużyć, jeśli zająć się tym z wyprzedzeniem. Trzeba o tym koniecznie pamiętać przygotowując kolejne scalania.

Co jeszcze? Podziel się swoimi pomysłami w komentarzach poniżej, albo na forum Warszawa JUG.

Zachęcam również do nadsyłania propozycji zadań w postaci pull requestów (PR) w projekcie scalania na GitHubie. Zgłoszono mi kilka błędów w sygnaturach metod, więc liczę na kilka PRów niebawem. Wciąż ich za mało. Nie każ mi długo czekać. Proszę.

Trzecia odsłona scalania już niebawem. Bacznie obserwuj platformę spotkań grupy Warszawa JUG.

Zdjęcia ze spotkania znajdują się w moim albumie Scalania 2 na G+.

p.s. Firmy zatrudniające w Warszawie programistów scalowych: Javart, Citi, Coeditor, AdPilot i NetSprint. Jest w czym wybierać i wierzę, że wybierzesz właściwie :-)

22 sierpnia 2013

Poszukiwany Credit Front Office Framework Developer w warszawskim zespole w Citi

3 komentarzy
Jak już zapewne czytałeś/-aś, od 1 lipca jestem pracownikiem Citi w Warszawie na pozycji lidera zespołu ds rozwoju aplikacji.

Tytuł szumny, a na chwilę obecną sprowadza się do budowania zespołu - rozmowy kwalifikacyjne, monitorowanie procesu rekrutacyjnego od strony systemów HR oraz kontaktu z przyszłym pracownikiem i inne równie nietechniczne sprawy. Ktoś mógłby mniemać, że nuda, ale mimo, że nietechnicznie, jestem zachwycony móc to robić. Zawsze to coś innego, a wcale nie mniej zachwycającego.

Jednak sprawy techniczne czekają na mnie i do zespołu będzie rekrutowana osoba na stanowisko "chief of stuff", co zniesie ze mnie obsługę spraw mniej technicznych w zespole. Czujesz się na siłach, aby podjąć się trudów organizacji pracy zespołu? Skontaktuj się ze mną. Namiary na oficjalną ofertę pracy w Citi niebawem.

Ale co skłoniło mnie do opublikowania tego wpisu, to inne wakaty, które wciąż czekają na obsadzenie w moim zespole - Credit Front Office Framework Developer.

Stanowisko wymaga niebagatelnych umiejętności, wśród których znaleźć można znajomość algorytmiki, rozległa znajomość programowania w Javie oraz Scala, Clojure i Hadoop. Do tego dobra znajomość angielskiego w mowie i częste zwycięstwa w walce ze spiętrzeniami w projekcie. Oczywiście nie wszystko jednocześnie, a jedynie czym więcej, tym lepiej. Umiejętność logicznego rozkładania problemu i oprogramowania go w wybranym języku jest najbardziej pożądaną cechą. Więcej w oficjalnej ofercie pracy na to stanowisko (gdyby link nie prowadził do oferty, wystarczy wyszukać frazy "java scala" w obszarze EMEA/Polska/Mazowieckie/Warszawa). W razie pytań, proszę o kontakt ze mną - chętnie odpowiem na wszelkie pytania.

Do zespołu poszukiwani są mniej zaawansowani programiści (juniorzy) jak i wymiatacze. Na dzień dzisiejszy mamy w zespole 11 nietuzinkowych osób (pozdrowienia dla +Grzegorz Balcerek+Paweł Cesar Sanjuan Szklarz+Marcin Pieciukiewicz+Artur Stanek), a potrzebujemy jeszcze raz tyle (!) Roboty jest cała masa różnej maści - od babrania się w błotku po bezkresy refaktorowania w Javie i Clojure oraz pomału i w Scali. Pomożesz? Koniecznie o tym porozmawiajmy!

W takim zespole mógłbym nawet robić za sprzątaczkę. Bezpośredni dostęp do (wiedzy) członków tego zespołu uważam za największy zysk mojego przejścia do Citi. A nadchodzą kolejni i to równie wyczesani!

21 sierpnia 2013

Scalania #2 - spotkania z językiem Scala w najbliższą środę, 28 sierpnia

6 komentarzy
Zapraszam na drugie spotkanie z językiem Scala - Scalania - w najbliższą środę, 28 sierpnia. Więcej informacji logistycznych na stronie spotkania http://scalania.pl.

Największą zmianą w stosunku do poprzedniej, inauguracyjnej edycji będzie 30-minutowe wprowadzenie uczestników w konstrukcje języka Scala, które będą przydatne do rozwiązywania zadań. Dodatkowo motywem przewodnim będzie praca z projektami z GitHuba, co powinno dodatkowo zachęcić uczestników do jego aktywnego użycia na potrzeby własnego samorozwoju.

Będąc pod ogromnym wrażeniem zawartości książki Functional Programming in Scala będzie wiele zadań z rozdziału o monoidach (10. Monoids) i opóźniania wykonywania (5. Strictness and laziness).

Zapraszam!

08 sierpnia 2013

Metoda a funkcja oraz stan w obiekcie i funkcji w Scali

8 komentarzy
Trudno byłoby oczekiwać, że poniedziałek, świeżo po wakacjach, mógłby należeć do najmilszych dni, bo w końcu to koniec letniej laby i to nie byle jakiej. Jeszcze posiedziałbym w Niechorzu. Chociaż tydzień dłużej.

Z pewną obawą wracałem do pracy, ale już w biurze czekał na mnie +Grzegorz Balcerek oraz Marcin Jaskólski. Po lekturze kolejnego rozdziału Scala in Action natchnęło mnie na dyskusję o różnicy między metodami a funkcjami w Scali. Ciekawym, ilu z Was zauważa różnicę.

Niech ja zacznę z przedstawieniem swojego zrozumienia.

Metoda jest wyłącznie składową instancji typu (świadomie nie piszę obiektu, aby nie mylić ze scalowym object), podczas gdy funkcja jest bytem niezależnym, żyjącym samodzielnie. Scala oferuje możliwość przekształcenia metody w funkcję za pomocą podkreślnika (dla każdego brakującego parametru).
scala> class A { def f(n: Int) = 5 }
defined class A

scala> new A().f _
res0: Int => Int = <function1>
Od tej pory res0 staje się funkcją jednego parametru typu Int, która zwraca wartość typu Int. Jak widać, funkcja jest więc wartością pewnego typu. Metoda takiej cechy nie posiada.

W Scali sprawa się trochę komplikuje ponieważ każda funkcja jest reprezentowana przez obiekt typu FunctionX, gdzie X oznacza liczbę akceptowanych parametrów wejściowych. Stąd też możnaby powiedzieć, że nawet dla bytów określanych mianem funkcji w Scali istnieje instancja typu scala.FunctionX, co przeczy, że funkcja jest bytem samodzielnym. Czy, aby na pewno?

A co Ty o tym sądzisz? Chętnie wysłucham Twojej wersji, która wyprowadzi mnie z błędu lub uzupełni braki, gdzie potrzeba. Z góry dziękuję.

Nie długo trwało, aby w biurze pojawił się +Paweł Cesar Sanjuan Szklarz! Czyż można byłoby wyobrazić sobie lepsze rozpoczęcie dnia?! Na pewno nie!

Zaintrygowany Paweł poruszył inny temat odnośnie porównania istoty funkcji i obiektu. Dla mnie oba domykają pewien stan i wykonanie obu jest wręcz identyczne. Paweł obiecał pogłówkować nad tym jeszcze, bo nie mógł się zgodzić z tym, że musi się ze mną zgodzić :-) Czekam z niecierpliwością.

Cudnie móc tak rozpocząć pracę po wspaniałym urlopie. Każdemu życzę tak mocnego zespołu merytorycznie, z którym można poruszyć niejeden nietrywialny temat. Bezcenne.

p.s. Są jeszcze wakaty w moim zespole w Citi. Zainteresowanych zapraszam do kontaktu na priv, aby uruchomić proces rekrutacyjny.

06 sierpnia 2013

Ach, cóż to były za wakacje! Niechorze rządzi

3 komentarzy
Ach, cóż to były za wspaniałe wakacje!

Gdyby ktoś mi powiedział jeszcze kilka tygodni temu, że nad naszym polskim morzem (w Niechorzu i okolicy) może być taka pogoda, fale i ogólnie atmosfera, nie dałbym temu wiary.


Zaplanowaliśmy nasz rodzinny wyjazd na wczesny, sobotni ranek, o 4:00 w sobotę, 20 lipca. Trasa do Niechorza trwała ponad 12 godzin (!), więc kiedy dotarliśmy na miejsce, pozostał nam już tylko krótki spacer po plaży i wio do spania z Maksymkiem.

Kolejne dni już dane nam było spędzić według schematu: pobudka chwilę przed 8, śniadanie do 9, spacer do Boryska do 10 i smażing do 12, aby zdrzemnąć się z Maksymkiem do 15, obiad od 16 do 17 i spacerowanie po okolicy do 20, kąpiel Maksymka i ziuziu spać. Całkiem pozytywnie wpłynęło to na naszą kondycję. Każdemu przydała się spora porcja spania!

Starszaki - Iwetka i Patryk - "broili" do późnego wieczora, więc trudno było znaleźć kogoś niezadowolonego.

Chyba, że wspominamy drugi tydzień, kiedy to pogoda podupadła i zaczęło padać. Tutaj należało już wykazać się inicjatywą, co zrobić z czasem między śniadaniem a południem i później po południowym spaniu Maksymka do wieczora. Mimo przelotnych deszczy, pogoda pozwalała na krótkie wypady nad morze i przez to było cudownie.

Siedzieliśmy nad morzem prawie pełne dwa tygodnie, a wciąż nie mieliśmy dosyć (Agata i Ja z Maksymkiem, bo Iwetka z Patrykiem nawiali do Warszawy na swoje koncerty).

Kąpiel w morzu była (prawie) codziennie. Fale były również. Maksym z Boryskiem bawili się w piachu całym sobą. Słońca ponad miarę. Ryba smaczna (w Kergulenie i u Cywila). Jedzenie w Jantar-Spa na medal. Słowem - żyć, nie umierać.


Akurat ten dwutygodniowy wypoczynek zbiegł się z moim przejściem do nowej pracy w Citi, więc kolejna zmiana - wyjazd poza Warszawę na dłużej - tylko mnie podkręciły. Czuję się wypoczęty i gotowy do kolejnych wyzwań! Kto chętny sprawdzić?! :-)

A skoro o wyzwaniach to zapraszam do udziału w kolejnym przedsięwzięciu - projekcie scalania, którego celem jest spopularyzowanie języka Scala i podreperowanie wiedzy z zakresu algorytmiki (bo mi się kandydaci do pracy wykruszają i nie ma kogo rekrutować). Już zakasałem rękawy i uwijam się, aby zdążyć przez warsjawą, bo chodzi mi po głowie poprowadzenie scalowego warsztatu! Kto wyraziłby zainteresowanie udziałem?