30 września 2013

Scalania 4 - spotkania z językiem Scala w najbliższą środę, 2 października

0 komentarzy
Zapraszam na czwarte spotkanie z językiem Scala - Scalania 4, które odbędzie się w najbliższą środę, 2 października na MIMUWie. Szczegóły organizacyjne znajdziesz na stronie spotkania http://scalania.pl.

Ważną zmianą w stosunku do poprzednich edycji jest godzina rozpoczęcia - 18:00. Proszę o jej zapamiętanie i przekazanie innym zainteresowanym. Jest jeszcze jedna zmiana - podział na 3-osobowe grupy, ale to akurat niech pozostanie naszą tajemnicą.

Motywem przewodnim będzie praca z projektem scalania z GitHuba w obszarze zadań P11-P16.

Na scenie zobaczymy Anitę Fronczak, Piotra Marczewskiego i Andrzeja Goławskiego, każda z osób z 10-minutowym wprowadzeniem do niezbędnych konstrukcji języka Scala.

Coraz lepiej przychodzi nam organizowanie tego rodzaju spotkań i tylko czekać, kiedy usiądziemy przy dłuższej czasowo inicjatywie, np. weekendowym hack-a-thonie. Nie może Cię zabraknąć! Zapraszam!

29 września 2013

Wiktor o Scrumie dla lokalnych społeczności a Grzegorz z 33rd Degree dla dzieciaków

0 komentarzy
Kilka dni temu napisał do mnie +Wiktor Żołnowski, który przedstawił pewien pomysł warty uwagi. Poprosił, aby pomóc mu nagłośnić temat, a że zacny (temat), więc nie tracąc czasu...

Cześć,

Realizuje właśnie jeden ze swoich pomysłów na rozruszanie lokalnych społeczności IT.

Pomysł jest stosunkowo prosty - ja daje coś od siebie - w tym wypadku darmowe szkolenie ze Scrum - 8h mojego czasu, a uczestnicy w zamian za udział mają poświęcić swoje 8h na rzecz dowolnej społeczności IT/Agile, cokolwiek.

Więcej informacji na moim blogu: http://blog.testowka.pl/2013/09/17/nie-do-konca-darmowe-szkolenie-scrum/.

Może zechciałbyś wspomóc inicjatywę i napisać coś o tym u siebie. Albo w ogóle samemu zrobić coś podobnego?

Pozdrawiam,
Wiktor Żołnowski

Chwilę potem napisał do mnie +Grzegorz Duda, który w podobnym tonie napisał o swojej inicjatywie - 33rd Degree 4 charity. Kolejna zacna inicjatywa, której nie opublikować na moim blogu, grzechem możnaby nazwać. A że dodatkowo ładnie napisał...

Jacek,

Przychodzę do Ciebie z prośbą, czy nie mógłbyś napisać parę słów o 33rd Degree 4 charity?

Masz najbardziej poczytnego bloga, więc taki wpis na 100% przyczyniłby się do zebrania kilku złotych więcej dla dzieciaków i rodzin w trudnych sytuacjach...

Regards/Pozdrawiam,
Grzegorz Duda

25 września 2013

Recenzja Scala in Action poszła w eter

0 komentarzy
The cover of Scala in Action
W końcu i Scala in Action doczekała się swojej chwili, aby ją przeczytał i zrecenzował.

Książka otrzymała ode mnie 4 gwiazdki na Amazonie - Climb higher levels of Scala with an experienced mentor.

Czekała od kwietnia zeszłego roku, kiedy to wydawnictwo "dopuściło" mnie do programu Manning Early Access Program, ale niestety nie starczyło mi wtedy zapału, aby wesprzeć autora w jego wysiłkach przy pisaniu tej książki. Czas mijał, a ja jeszcze wtedy nawet specjalnie się nie starałem poznać język Scala.

I tak jakoś zleciało i dopiero przed wakacjami udało mi się ponownie zasiąść przy książkach, które czekały na swój czas. Nadszedł i dla "Scala in Action", i w skrócie napiszę, że warto było ją przeczytać. Nie było łatwo, bo widać w książce różne podejścia do przedstawienia języka przez przykłady, co pewnie jest wynikiem przedłużającego się czasu na jej wydanie. Raz się pisze o Scala 2.8 jako nowym wydaniu, raz pojawia się 2.10 i w zasadzie omówione zostały te cechy języka, które pojawiły się koło 2.8. Nie jest to książka referencyjna o tym języku, a po prostu poradnik, jak stosować język w praktyce. I nie jest specjalnie lekka merytorycznie - jest to dobra książka dla już programujących i znajomość Javy może być przydatna.

Była to dla mnie bardzo ciekawa lektura i jeszcze z pewnością nie raz zajrzę do tej książki. Nie ma wiele stron, których bym nie oznaczył jako wartych ponownej lektury, więc jeszcze długo będzie mi towarzyszyła podczas mojej nauki Scali. Czego i Tobie życzę.

16 września 2013

Klasa List w języku Scala - cz. 1

0 komentarzy
Pojawił się kolejny dokument-ściągawka dotyczący klasy scala.collection.immutable.List w języku Scala - Klasa List w języku Scala - cz. 1.

Zawartość dokumentu daleka jest od ideału, ale wyszedłem z założenia, że lepiej wypuścić wersję beta i liczyć na aktywność czytelników, którym leży na sercu poznanie ciekawego języka pisząc dokumentację niż czekać dni parę na wersję finalną, jeśli w ogóle możnaby jej się doczekać.

Innymi słowy, uznałem, że "Release early, release often" ma zastosowanie w tym przypadku i jest jak najbardziej uzasadnione.

Dokument czeka na zuchwałych, którzy chcieliby poznać język Scala przez pisanie do niej dokumentacji za pomocą ciekawego zestawu narzędzi - języka markdown + GitHub Pages z gitem w tle. Dla mnie ten zestaw jest spełnieniem marzeń literackich i tylko czekać, aż na dobre przesiądę się na Octopressa i zarzucę Bloggera. Liczę na pewne wsparcie moralne u czytelników. Wesprzyj mnie, aby mój sukces lub porażka była Twoim sukcesem (w końcu "Lepiej uczyć się na cudzych błędach").

Dokument z dzisiejszą ściągą o klasie List w Scali to 2013-09-14-scala-klasa-list-cz1.md w gałęzi gh-pages w projekcie scalania. Zachęcam do forkowania i nadsyłania pull requestów. Nie wiesz, o czym mowa?! Tym bardziej powinnaś to zrobić! Chętnie pomogę.

15 września 2013

Scala + "n" i "a" = Scalania _3 za nami

0 komentarzy
Kolejne spotkanie scalania przechodzi do archiwum. Gratulacje dla wszystkich uczestników!

Na plus odnotowuję udział firmy Javart jako sponsora wydarzenia, co pozwoliło zagwarantować sporą porcję strawy dla ducha (w postaci Scali) i ciała (w postaci kanapek z Subway'a).

Na plus jest fakt, że się spotkaliśmy już trzeci raz!


Na plus odnotowuję również udział dwóch całkowicie mi nowych w tej roli prelegentów Andrzeja Jóźwika oraz Jacka Kołodziejskiego. Andrzej wspierał nas swoim przygotowaniem podczas rozwiazywania zadań, podczas gdy Jacek przeprowadził nas przez zasieki scalowe i wyjaśnił nowe konstrukcje w języku Scala, które od tej pory traktujemy jako znane. Więcej na stronie domowej ściągawek scalania.

Na plus odnotowuję utrzymanie zasady, aby kontynuować rozwiązywanie kolejnych zadań z listy S-99: Ninety-Nine Scala Problems. W ten sposób dotarliśmy do zadania P10. Run-length encoding of a list.


Na minus oznaczam słabe trzymanie się ram czasowych, co wręcz mnie irytowało. Cóż było robić, kiedy dyskusja merytoryczna i udział rozmówców znaczny, a należało ciąć, kiedy wychodziła znacząco poza określony czas?! Po komentarzach na meetupie dotyczącym tego spotkania widać wyraźnie, aby być mniej liberalny i ciąć, kiedy ciąć należy. To trzeba poprawić.


Kolejne spotkanie niebawem i liczę na niemniejszą frekwencję! Dyskusje na meetupie i podczas spotkania pokazują, że ten rodzaj spotkań spotkał się z akceptacją społeczności.

Kto przyjdzie na następne? Kto zechciałby wystąpić w roli wprowadzającego?

13 września 2013

Obiekt scala.List w języku Scala

0 komentarzy
Dzisiejsza porcja wiedzy dot. języka Scala to przegląd dostępnych metod w obiekcie (towarzyszącym) List - Obiekt scala.List w języku Scala.

Wpis trafił do zestawu ściągawek w projekcie Scalania.

Zachęcam do przesyłania zmian jako pull request do pliku 2013-09-13-scala-obiekt-list.md w repo.

Kolejny wpis będzie dotyczył już klasy List.

10 września 2013

Jutro Scalania 3, a dzisiaj wpis na blogu scalania o typach w Scali

1 komentarzy
Kontynuując ideę opisywania konstrukcji scalowych, które wykorzystujemy podczas Scalania na blogu projektu pojawił się kolejny wpis O typach w def(inicjach funkcji) w języku Scala cz. 2.

Ciekawym Twoich uwag, a dobrą drogą na ich przesłanie jest po prostu pull request ze zmianami (uwagami) do pliku 2013-09-10-scala-def-typy-2.md w repo. Z pomocą platformy GitHub można skorzystać z edytora przez przeglądarkę i nie potrzebna jest znajomość git'a (!)

Blogowanie w projekcie scalania z GitHub Pages stało się sposobem na poznanie GitHub, git, markdown i...Scali. Bosko! Czekam na PR'y.

08 września 2013

O Scali i Scalania na GitHub Pages - Jekyll w akcji

2 komentarzy
Trochę trwało zanim przekonałem się wreszcie, aby zarzucić pisanie ściągawek do Scali na potrzeby Scalania na tym blogu. Po prostu Blogger się do tego nie nadaje i zajmowało mi to zawsze zdecydowanie za dużo czasu. Na samą myśl o umieszczaniu kodu tutaj, odrzucało mnie. Taki też był powód, aby swego czasu mój angielskojęzyczny blog posadowić (zdala od Bloggera) na WordPressie jako http://blog.japila.pl.

W piątek mnie naszło i w weekend zrobiłem kolejny krok w mojej karierze blogera - przeniosłem część wpisów dotyczących spotkań scalania na GitHub. Moje wysiłki wokół tego projektu skierowane są na uzupełnieniu potrzebnej wiedzy do rozwiązywania zadań jako statyczne strony generowane z użyciem Jekyll i GitHub Pages.

I tak oto powstała dokumentacja do projektu scalania, która ma w zamierzeniu być zestawem ściąg z języka Scala. Z nimi rozwiązywanie zadań będzie łatwiejsze. Zapraszam do odwiedzenia http://jaceklaskowski.github.io/scalania/ i lektury dwóch notatek.

Zainteresowanych udziałem w tym (pod)projekcie zachęcam do rozwijania gałęzi gh-pages w projekcie scalania.

W ten oto sposób mamy miejsce, w którym społeczność scalowa w Polsce może rozbudowywać zestaw zadań scalowych (gałąź master) lub pisać do nich dokumentację (gałąź gh-pages). Pull requesty mile widziane.

Może kiedyś powstanie kompletny zestaw ćwiczeniowy?

Jeśli jesteś zainteresowana uruchomieniem scalania w swoim mieście, firmie, czy innej społeczności, napisz do mnie. Pewnie bylibyśmy się w stanie porozumieć.

07 września 2013

O def(iniowaniu funkcji) w języku programowania Scala ciąg dalszy

0 komentarzy
W Definiowanie metod w języku Scala - def przedstawiłem znaczenie słowa kluczowego def w języku Scala.

W imię przygotowań do Scalania 3 kontynuuję temat.

Wpisujemy bezpośrednio do Scala REPL definicję funkcji sumowania sum, które akceptuje dwa parametry typu Int.
scala> def sum(x: Int, y: Int) = x + y
sum: (x: Int, y: Int)Int
W odpowiedzi dostajemy nazwę nowej wartości sum i jej typ po dwukropku (x: Int, y: Int)Int, czyli funkcję dwóch parametrów x i y, której wynikiem jest wartość typu Int. Pamiętaj, że sum jest wartością niezmienną i jej wartość zawsze będzie typu (x: Int, y: Int)Int.

Wywołaj funkcję sum z dowolnymi parametrami (jednak wciąż z zakresu typu Int), np. sum(2, 4).
scala> sum(2,4)
res0: Int = 6
Wywołanie funkcji to podanie jej nazwy z określeniem wartości parametrów wejściowych. W wyniku otrzymujesz nazwę wyniku - res0, jej typ po dwukropku - Int - oraz wartość po znaku równości - 6. Proste? Dokładnie! Zero magii (zakładając, że nie przespałaś kilku lekcji matematyki, na których było o funkcjach i sposobach ich wywołania).

Spróbuj wykonać funkcję z parametrem innego typu, np. String - ciągiem znaków między apostrofami.
scala> sum("b", "b")
<console>:9: error: type mismatch;
 found   : String("b")
 required: Int
              sum("b", "b")
                  ^
Otrzymałaś błąd niezgodności typów - <console>:9: error: type mismatch;. Oczywiście należało się tego spodziewać, bo jedynym typem wejściowym funkcji sum jest Int. Int nie jest String.

Zadanie: Napisz definicję funkcji sum(a: String, b: String) i wykonaj ją dla kilku wybranych par ciągów, np. sum("m", "n"). Co miałoby być wynikiem?

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.