ScalaSphere DevTools Summit 2016 - byliśmy tam!

Scala DevTools Summit to wydarzenie obok którego nie sposób było przejść obojętnie. Wymiana wiedzy pomiędzy specjalistami z zakresu skalowalnego języka programowania odbywała się 11. i 12. lutego 2016 w Krakowie.
Przewodnim tematem konferencji były zagadnienia związane z narzędziami dla developerów Scali. Można jednak stwierdzić, że niektóre prezentacje wykraczały poza ten zakres - dotyczyły szeroko rozumianego wsparcia dla programistów np. w formie użytecznych bibliotek.
Tematyka wydarzenia, co niejednokrotnie podkreślali uczestnicy, była unikalna. Liczne grono słuchaczy świadczy o coraz większym zainteresowaniu Scalą, również wśród dużych firm.
Scala DevTools Summit - dzień pierwszy
Po krótkim wprowadzeniu i przywitaniu gości nastąpiła pierwsza prezentacja - Evolving an ecosystem, przeprowadzona przez Iuliana Dragosa z Typesafe. Dotyczyła ona rozwoju Scala IDE. Jest to środowisko programistyczne do Scali oparte na Eclipse. Prowadzący opowiedział m.in. o historii powstania projektu i głównym dylemacie, który pojawił się w momencie kiedy zarządzaniem przedsięwzięciem zajął się Typesafe, tj. czy jest sens rozwijać dotychczas wytworzoną wtyczkę czy lepiej napisać ją od nowa. Ostatecznie, podjęto decyzję o rozwijaniu wcześniej zainicjowanego projektu, jednak czas zweryfikował tę decyzję – obecnie specjaliści z Typesafe zgodnie przyznają, że lepiej byłoby jednak zrobić wszystko od nowa (początkowa koncepcja zakładała mocne reużycie JDT i hackowanie różnymi technikami, w tym z użyciem aspektów). Kolejny punkt programu dotyczył biblioteki do refactoringu The Scala Refactoring Library: Problems and Perspectives. Prelegent - Matthias Langer, biblioteką zajął się najpierw jako jej użytkownik, dopiero później stał się istotnym uczestnikiem tego projektu poprzez wprowadzanie wielu poprawek błędów, które zauważył w trakcie użytkowania. Najistotniejszym punktem prezentacji było poruszenie technicznych aspektów działania kompilatora Scali.
Sam refaktoring polega na odpowiednim przekształcaniu drzewa składniowego AST reprezentującego kod źródłowy programu. Istotnym wyzwaniem jest brak w owym drzewie kompletu informacji wystarczających do tego, aby realizować refaktoring. Wynika to z faktu, że podczas tworzenia drzewa AST tracone są informacje nieistotne z punktu widzenia kompilatora, ale istotne z punktu widzenia operowania na kodzie źródłowym - np. komentarze, białe znaki. Dodatkowym problemem jest również to, że różne konstrukcje składniowe w kodzie źródłowym (np. for, map) są reprezentowane w AST w ten sam, nieodróżnialny sposób. W konsekwencji zmiana drzewa AST nie jest wprawdzie zbyt trudna ale odtworzenie wynikowego kodu źródłowego, w którym nie są zmieniane linijki, których refactoring miał nie dotyczyć jest kłopotliwe.
Kolejny prelegent, Rory Graves opowiedział o serwisie Scalantor (Scalanator.io - Building a training platform on compiler tools). Pokazał architekturę serwisu, który ma służyć do nauki Scali. Głównym elementem tego rozwiązania jest silnik Ensime – rozwiązanie pozwalające budować IDE. Serwis scalanator.io nie jest jeszcze uruchomiony ale zapowiada się interesująco.
Dave Gurnell pokazał jak można efektywnie obejść się w programowaniu bez IDE The IDEless IDE Wystarczy kilka skryptów, kilka ciekawych pomysłów na wyszukiwanie plików, ściągniętej lokalnie dokumentacji, dobry edytor tekstu i można bardzo sprawnie programować. Bardzo świeża, ciekawa prezentacja.
W prezentacji How to be Free, Libre and Open Source Sam Halliday zaprezentował różne rodzaje licencji i zagadnienia związane z prawami autorskimi, znakami towarowymi itp. Szczególnie ciekawe okazały się wymogi, jakie Sam musiał spełnić tylko po to, by na jednym ze slajdów wstawić logo Apple.
To z pozoru może nie mieć związku z tematem konferencji, ale warto wiedzieć na jakich licencjach wypuszczać swoje narzędzia. Bardzo ciekawa prezentacja na temat, który powinien zainteresować każdego korzystającego z projektów open source, nie tylko programistów Scali.
W Scaps – Type-directed API Search for Scala Lukas Wegmann pokazał serwis do wyszukiwania w bibliotekach Scali funkcji na podstawie ich typów. Serwis można wypróbować online pod adresem http://scala-search.org - jednak jego wartość wydaje się być raczej akademicka.
Polski przedstawiciel wśród prelegentów - Wiesław Popielarski mówił o rozwiązaniach dla Scala IDE, które były rozwijane w VirtusLab - ewaluator wyrażeń i asynchroniczny debugger. Są to ciekawe funkcjonalności dla użytkowników Eclipse i Scala IDE. Dla osób stosujących Ideę raczej było to utwierdzenie w pozostaniu przy swoim wyborze.
Ostatnia prezentacja tego dnia (Inside the IntelliJ Scala Plugin) została przedstawiona przez Pavla Fatina i dotyczyła sposobu rozwijania plugina do Scali w Intellij. To zdecydowanie bardzo dobra, techniczna prezentacja. Wszystko od początku do końca działało i adresowało chyba wszystkie problemy z wcześniejszych prezentacji począwszy od zmiany wielkości fontu w IDE (okazało się to problemem w niektórych okienkach w Eclipse), a skończywszy na PSI (Program Structure Interface) dostarczającym wszystkie informacje pozwalające efektywnie operować na drzewie składniowym programu. Pavel na żywo pokazał jak zrobić w Idei nowe inspekcje kodu - np. obliczające wyrażenia wprost w IDE i poprawiające to co programista napisał w nieoptymalny sposób.
Ostatnim punktem programu tego dnia był panel dyskusyjny dotyczący rozwoju narzędzi do Scali.
Scala DevTools Summit - dzień drugi
Dzień drugi rozpoczął się od prezentacji Ensime - a different design. Rory Graves & Sam Halliday pokazali rozwiązanie, które - jak określili - nie jest IDE, tylko narzędziem do tworzenia IDE. Ensime pozwala korzystać z ulubionego edytora tekstowego i mieć w tle działający silnik zapewniający kompilację, podświetlanie składni i autouzupełnianie. Rozwiązanie ciekawe. Obecnie już jest szeroko stosowane z różnymi edytorami (Sublime Text, Emacs, Atom, Vim) a ma szansę znaleźć również swoje miejsce w rozwiązaniach webowych np. związanych z narzędziami do code review, do przeglądania pull requestów itp.
Następnie Simon Schäfer w prezentacji An Attempt for a Tooling Platform to Supersede Them All mówił o ambitnych celach związanych z ujednoliceniem i połączeniem wszystkich narzędzi w oparciu o ustandaryzowane protokoły. Ktoś zwrócił uwagę, że tak poniekąd jest w .NET (jednak tam stoi za tym silny, pojedynczy gracz). Przedstawione idee wydają się być nierealne w realizacji.
Kolejna prezentacja Rapture: A Stack for Scala built on Typesafety przedstawiona przez Jona Pretty miała nieco inny charakter, gdyż dotyczyła biblioteki, a nie narzędzi. Bardzo ciekawa i świetnie powiedziana, zilustrowana przykładami tworzonymi na żywo. Biblioteka na pewno warta zainteresowania. Oprócz używania jej w regularnych programach warta do rozważenia w skryptach lub pracach ad hoc.
Po przerwie obiadowej Guillaume Martres opowiedział jak jest zbudowany i jak można rozszerzać kompilator Dotty (Hacking on Dotty: a live demo). Krok po kroku zostało pokazane jak spowodować aby każda linijka programu została obłożona wypisaniem informacji o jej wykonaniu na konsolę. W tym celu musiał po pierwsze "zasadzić" się w kodzie na instrukcje programu, a następnie wyemitować dodatkowy kod. Informatycznie bardzo pouczająca prezentacja gdyż można dowiedzieć się jak kompilator działa od środka.
Kolejny prelegent z francuskim akcentem Alexandre Archambault pokazał prezentacje Easy dependency management with coursier. Na tyle zachęcająca, aby zaraz po powrocie do pracy poświęcić kilka minut na wdrożenie tego rozwiązania. Jest to plugin do sbt znacznie przyspieszający rozwikływanie zależności i ich ściąganie. Ten aspekt był często podnoszonym zarzutem wobec sbt, a dokładniej ivy, które jest domyślnie używane przez sbt.
Nepomuk Seiler w wystąpieniu Using SBT AutoPlugins to increase productivity and scale microservices architectures pokazał jak w gutefrage.net poprzez użycie pluginów do sbt uprościł sobie budowanie wielu projektów realizujących różne mikroserwisy. Ciekawe było nie tylko to jak zostało skonstruowane budowanie w ich projektach ale również przykład architektury opartej na mikroserwisach. Gutefrage jest społecznościowym serwisem typu Q&A.
Simon Ochsenreither w swojej prezentacji The Implementation Challenges of Language Simplification zaczął od tezy, że dokonanie pewnych uproszczeń w języku korzystnie wpłynęłoby na możliwość łatwiejszego tworzenia narzędzi programistycznych. Prowadzący następnie pokazał, jakie komplikacje by przyniosło wprowadzenie tych zmian po to, aby na końcu skwitować, że jest to w praktyce niemożliwe. Proponowane zmiany wydają się sensowne np. z punktu widzenia zastosowania Scali na innych platformach niż JVM (np. scala.js) jednak oznaczają duże problemy z kompatybilnością wstecz – raczej nieakceptowane przez środowisko).
Jedno z ostatnich wystąpień dotyczyło swaggera - rozwiązania do dokumentowania restowego API: Play-Swagger: Swagger Support for the Play Framework. Najpierw Lauri Apple, która na czas prezentacji przedstawiła się jako "Jabłkowska" powiedziała kilka słów o kulturze pracy w swojej firmie, głównie wspominając o Radical Agility, które pozwala pracować autonomicznym zespołom nad projektami opartymi na koncepcji mikroserwisów i komunikującymi się przez REST. Następnie Slava Schmidt pokazał jak używają swaggera i swojej wtyczki do Play aby tworzyć specyfikację api REST.
Ostatnia prezentacja na konferencji Perspective change: huge Scala project from tooling perspective dotyczyła problemów jakie pojawiają się w dużych projektach opartych na Scali.
Konferencja zakończyła się kilkoma hackatonami, z których chyba najlepiej oceniany był przez uczestników ten dotyczący pisania pluginów do Idei prowadzony przez Pavla Fatina.
Podsumowując, na ScalaSphere DevTools Summit 2016 było sporo dobrych prezentacji, ale pojawiła się także i refleksja, że wytwarzanie narzędzi developerskich to zagadnienie niewdzięczne - nie można liczyć na obfite profity, a łatwo o krytykę wybrednych użytkowników. Dlatego też w poszczególnych wystąpieniach często powtarzały się zachęty do udziału we wspólnym polepszaniu poszczególnych narzędzi.