Pokazywanie postów oznaczonych etykietą ChamberConf. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą ChamberConf. Pokaż wszystkie posty

poniedziałek, 21 marca 2016

Chamberconf 2016

W weekend 5-6 marca 2016 miałem zaszczyt po raz drugi uczestniczyć w konferencji Chamberconf, którą również organizowałem. Rozpoczęliśmy już w piątek od pre-party. Kto chciał, mógł przyjechać wcześniej i już zacząć integrację z innymi uczestnikami. Bo głównie o to w tej konferencji chodzi, aby integrować się, poszerzać swoje horyzonty myślowe oraz wymieniać się doświadczeniami. W tym celu nie przekraczamy liczby 90 uczestników i spotykamy się daleko od miejskiego zgiełku, aby nic nie rozpraszało naszej uwagi. Dodatkowo zwiedzamy zamki - w końcu całkiem sporo ich na Dolnym Śląsku. Tym razem byliśmy w Pałacu Łagów pod Zgorzelcem. Miejsce trochę awaryjnie wyszło, ale nie było na co narzekać.

Po pre-party i krótkiej przerwie na sen, przyszedł czas na pierwszy dzień. Po krótkim przywitaniu uczestników pierwszy na scenę wszedł Jarek Ratajski z tematem "ScalaJS i architektura #noserver". Prelegent opowiadał, jak to dojrzewał jego pomysł, aby robić aplikacje internetowe bez serwera. Na początku był trochę hejt na REST’a, bo przykładowo czym jest nawiązywanie znajomości na facebooku? PUT czy POST?

Jarek pracując jakiś czas temu mocno z frontendem, mockował backend i te wydmuszki szły do klienta. Można w ten sposób już sporo przetestować (w sensie UX'a) i mieć szybki feedback od klienta. Skoro to już jakoś działa, to co jeszcze trzeba było dorobić aby można było używać?

Następnie było trochę o ScalaJS. Jest to kompilator, a dokładniej transpiler (czyli kompilator jednego języka programowania w drugi) Scali do JavaScriptu. Zyskujemy silne typowanie, wykrywanie literówek w nazwach i inne. Działa z bibliotekami JavaScript'owymi jak React czy AngilarJS. Jarek przekonywał nas, że warto wybrać to narzędzie, jeśli zespół zna Scalę, a musi robić frontend w JavaScripcie. Ale teraz mamy już ECMAScript 6 i TypeScript, więc wybór nie jest już taki oczywisty dla pozostałych niescalowych developerów.

Ale mniejsza o technologie wykonania, liczy się pomysł. Jarek pokazał na przykładzie czata (standardowy przykład tego typu problemów), jak można go zrealizować w trochę inny sposób. Może być wiele niewielkich serwerów (node’ów, aktorów) z których korzystają końcowi użytkownicy, którzy generują eventy. Zdarzenia, zależnie od logiki aplikacji, są zapisywane na node’ach. I teraz potrzeba, aby te node’y się wymieniały informacjami bezpośrednio, lub za pomocą dedykowanych do tego węzłów.

Demo wyszło bardzo fajnie. Prelegent pokazał, co się stanie, gdy wszystkie węzły padną i jak większości użytkownikom wyczyści się local storage w przeglądarce. Wystarczy, że jeden będzie miał te dane u siebie i gdy serwer wstanie to sobie odtworzy poprzedni stan. Gdy kolejne węzły się dołączą, to u nich też się to odtworzy i zapisze się w lokalnej pamięci w przeglądarce. I gdy teraz te poszczególne węzły będą działały na maszynach użytkowników, to można w całości, albo prawie w całości zrezygnować z serwerów.

Jarek fajnie opisał, jak mogło by to działać na przykładzie Wikipedii. Każdy wchodzący na stronę / podstronę miały zapisane u siebie te artykuły, które przeglądał. I jak ktoś będzie chciał przeglądać jakiś artykuł, to go ściągnie od innego użytkownika i też będzie miał kopie u siebie. W takiej konfiguracji mogły by zaginąć stare, mało popularne artykuły. Ale skoro nikt tego dawno nie czytał, to widocznie nie jest jakoś specjalnie potrzebne ;)

Jarek opowiadając o swoich przemyśleniach, doszedł do wniosku, że implementując to podejście to chyba (albo prawie na pewno) na nowo napisał model aktorowy. W takim systemie jeszcze sporym wyzwaniem jest zapewnienie bezpieczeństwa, ale da się to zrobić. Fajny był przykład o myśleniu o koncie w banku w skali galaktycznej. Jarek jeszcze bardzo polecał filmiki pana: Haoyi Li odnośnie ScalaJS. Ja chwilę ten: SBTB 2014, Haoyi Li: Cross-platform development with Scala.js oglądałem.

Jako następny na scenie pojawił się Artur Suchwałko z tematem "Budowa modeli predykcyjnych w R". Artur jest organizatorem grupy Data Science Wroclaw. Artur pokazał co można robić w języku R. Za pomocą niewielu linijek, można sobie przeanalizować pewien zbiór danych, aby odpowiedzieć (albo chociaż próbować) na jakieś pytanie biznesowe. Dane trzeba sobie wcześniej jakoś przygotować, zrozumieć, wyczyścić (np. zapchać czymś, gdy brakuje wartości), zanalizować, utworzyć cechy pochodne (kombinacja podstawowych), wybrać cechy, model i ocenić jakość. Do tego wszystkiego można zapiąć język programowania R, który jest obecnie standardem w bioinformatyce. Tak mówi Wikipedia, więc to prawda ;-) A wszystko ponoć za sprawą projektu bioconductor.org. Konkurencją dla R jest Python jak i komercyjne narzędzia jak: SPSS, SAS, RapidMiner, Statistica.

Wykład był fajny, poszerzający horyzonty myślowe. Warto uczestniczyć w trakcie konferencji na takich prelekcjach, bo w domu / w pracy niekoniecznie będzie czas na poznanie takich narzędzi. Jak dla mnie łatwość (a może szybkość) z jaką R radzi sobie z wizualizacją jakiś analiz była zaskakująca. Trzeba jednak mieć wg. mnie sporą wiedzę z zakresu statystyki, aby się zajmować tego typu problemami.

Po wykładzie Artura nastał czas na część, za którą byłem w dużej mierze odpowiedzialny, czyli Pecha Kucha. Formuła polega na pokazaniu 20 slajdów gdzie każdy przeskakuje co 20 sekund. Jest więc niecałe 7 minut na przedstawienie swojego tematu. Było to po raz pierwszy w Polce na konferencji IT na taką skalę, bo wystąpiło 11 osób. Podobno wcześniej ktoś coś pojedynczo próbował robić - ale tylko podobno. Tematyka była dowolna, choć w większości przedstawiane tematy były techniczne, lub półtechniczne. Po rozmowie z uczestnikami okazało się, że forma ta bardzo im przypadła do gustu. A jak kogoś temat nie interesował, to mu nie było żal tak krótkiego czasu. Mam nadzieję, że ta formuła na stałe zagości do polskiego światka IT.

Nie będę tu opisywał wszystkich prezentacji, wszystkie dały radę mniej lub bardziej. Jako że trzeba się chwalić, to napiszę o swojej prelekcji. Jako jedyny miałem temat totalnie nietechniczny, ani nawet nie miękki. Po prostu zachęcałem uczestników do morsowania, czyli kąpieli w lodowatej wodzie w otwartych zbiornikach wodnych. Poszło mi chyba całkiem nieźle, bo publika się śmiała parę razy jak i później uczestnicy do mnie podchodzili na unconference pogadać. Zarzucić sobie mogę trochę „tańczenie” na scenie, co jest wytykane jako błąd w podręcznikach do wystąpień publicznych. Chyba też za mało miałem kontakt z publicznością, bo często patrzyłem na ekran komputera jak i na małe ściągi - aby wiedzieć co będzie na następnym slajdzie. Będzie to widać na nagraniu za rok ;)

Później była przerwa obiadowa, a po niej kolej na rzeźnika, czyli Marcina Rzeźnickiego z tematem "Fun with Arrows". Niestety więcej nie pisałem w Scali niż pisałem, temat mnie wymęczył i nie dałem rady być do końca. Był to zaawansowany wykład, możliwy do strawienia przez osoby mające już wcześniej kontakt z tematem. Zamiast tego IT Arystorkacja mogła się pobawić:

Film zamieszczony przez użytkownika Ola K. (@akunysz)

Ostatni wykład pierwszego dnia (jak i całej konferencji) był Jarka Pałki pt. "Tęcza, kucyki i Equestria i co to wszystko ma wspólnego z programowaniem”. Czyli było o języku Pony.

Pony to język kompilujący się do natywnego kodu z niewielką pomocą Low Level Virtual Machine (LLVM). Jest tworzony w C/C++. Język dużo naobiecał, a najbardziej Jarek skupił się na Capabilities, czyli prawach dostępowych do obiektów. Jest zdefiniowanych 6 poziomów: iso (Isolated), val (Value), ref (Reference), box (Box), trn (Transition ), tag (Tag). Dzięki temu, na poziomie języka / kompilacji mamy kontrolę, czy dany kawałek kodu może odczytywać lub zmieniać wartość. Są pewne regóły kiedy referencja się przekształca z jednego typu na inny. Koncept bardzo mi się podoba, mimo że go jeszcze nie zrozumiałem, ale generalnie pozwala nam to na łatwiejsze pisanie aplikacji bezpiecznych wielowątkowo. Ponadto model aktorowy jest wbudowany w język. Aby coś więcej się dowiedzieć o języku warto przejrzeć prezentację My Little Pony - Codemesh 2015.

I to tyle jeśli chodzi o wykłady. Później była kolacja i unconference, czyli zapisaliśmy na karteczkach tematy o których chcielibyśmy porozmawiać i przylepiliśmy na drzwi. Po pogrupowaniu tematów zostały one przydzielone do stołów i już ludzie zaczeli dyskutować i przesiadać się między stolikami. Trochę osób podchodziło do mnie pogadać o morsowaniu i tak m.in. dowiedziałem się o panu Porfirii Ivanov. Gościu był rosyjskim mistykiem, który nawoływał do nawiązywania bliższego kontaktu z naturą poprzez zrzucenie ubrań w czasie gdy jest zimno. Uskuteczniał polewanie się zimną wodą w zimie na powietrzu jak i kąpiele w takiej wodzie. Próbował też leczyc ludzi, Kościół Prawosławny uznał go za heretyka, a na koniec skończył w szpitalu psychiatrycznym. Poczytałbym coś więcej, ale na Wikipedii sensowny artykuł jest po rosyjsku ale ja не понимаю.

Nocne rozmowy uczestników (zainicjowane unconference) trwały bardzo długo. W niedzielę zaczął się dzień warsztatowy. Do wyboru był LeanPoker, Hackergarten i RoboCode. Pierwszy z nich polegał na implementacji algorytmu grającego w pokera. Celem nie było pisanie testów, ani praca w parach, tylko dostarczenie jak najszybciej działającej wersji algorytmu i ulepszanie jej wraz z biegiem czasu. Warsztat ten potrwał najdłużej ze wszystkich.

Ja wziąłem udział w Hackergarten. Zabawa polega na zaangażowaniu się w jakiś projekt Open Source i stworzenia Pull Request’a. Ja pomagałem Patrykowi i Rafałowi porozwijać IceBoar’a. Pomagałem im z setupem projektu i dostałem dzięki temu feedback, jak go można ulepszyć. Udało się stworzyć PR, ale jeszcze go nie akceptowałem, bo wymaga kilku poprawek.

Później jeszcze chciałem zaangażować się w walki czołgów (RoboCode), ale zostało mało czasu, więc trochę pomogłem Piotrkowi patrząc przez ramię. Podczas finałowej rozgrywki jego czołg wygrał. Dla 3ch pierwszych miejsc znalazły się nawet nagrody, ale nie powiem przez kogo ufundowane, bo konferencja była bez sponsorów ;-)

Podsumowując, konferencja bardzo się udała. Miejsce konferencji okazało się bardzo fajne i uczestnicy bardziej sobie chwalili niż zamek w Mosznej (przynajmniej jeśli chodzi o noclegi). Miały być 3 warsztaty i tyle ich było. Co prawda zamiast Scalatrona był RoboCode, ale i tak było fajnie. No i Pecha Kucha wyszła wspaniale.

Z minusów, to ludzie trochę narzekali na kolację w ramach pre-party. Niektórzy później przybywający do pałacu nie mieli już co jeść :-( Następnym razem trzeba zrobić konferencję od razu z pre-party bo i tak większość ludzi przyjechała już w piątek. Co do Pechy Kuchy, to jednak zabrakło dyskusji od razu po każdym wystąpieniu. Po 11 szybkich prezentacjach ludzie już zapominali co było wcześniej i o co chcieli zapytać.

Mam nadzieję, że za rok znów się spotkamy, a konferencja będzie jeszcze lepsza.

poniedziałek, 2 lutego 2015

ChamberConf wrażenia jako organizator, prelegent i uczestnik w jednym

W końcu się zebrałem, aby napisać relację z ChamberConf. Była to pierwsza konferencja organizowana przez Wrocławski JUG. Sam również po raz pierwszy miałem okazję uczestniczyć w organizacji takiego wydarzenia. Ostatnie 2 tygodnie przed wydarzeniem do łatwych nie należały...

Z założenia konferencja miała być bez sponsorów, czyli bez wszelakich konkursów, stoisk, prezentów itp. Początkowo konferencja była planowana na 65 osób, ale ostatecznie wyszło 80. Miejsce było niezwykłe, bo to były psychiatryk (gdzieś niedaleko jest jeszcze działający oddział), a jednocześnie bardzo ładny zamek, z dala od wielkich miast i cywilizacji. Konferencja trwała dwa dni, ale sporo osób przyjechało już w piątek wieczorem, więc nieoficjalnie zaczęło się trochę wcześniej.

Na pierwszej prezentacji w sobotę Tomka Borka i Jacka Jagieły pt. To nie zawsze wina aplikacji, robiłem za pilot do przełączania slajdów, ponieważ żaden wskaźnik nie chciał akurat współpracować z Ubuntu. Slajdy można sobie przejrzeć na prezi.com, jak i na slideshare. Z prezentacji wynikało, że należy pamiętać o monitoringu aplikacji i infrastruktury, bo często problemy z wydajnością nie leżą w naszym kodzie. Fajne było zadawanie pytań na koniec przez prelegentów do publiczności, czyli w odwrotnym kierunku niż zwykle.

Następnie Adam Warski opowiadał o Reactive Manifesto z użyciem Akki. Było trochę wstępu teoretycznego i sporo kodowania na żywo. Występ się trochę przedłużył, ale zależało nam na tym, aby konferencja nie miała sztywnych ram.

Następnie Konrad Malawski opowiadał o algorytmach głosowania w sieci. Było m.in. o Paxosie (którego prawie nikt nie rozumie), jak i jego uproszczonych wersjach. Początkowo bałem się, że to będzie prezentacja czysto akademicka, ale koniec końców okazało się, że bodajże raft consesus jest gdzieś tam w Akkce zaimplementowany.

Następnie był obiad i ostania prezentacja pierwszego dnia, Michała Bartyzela pt. Z czym mierzą się zespoły? Michał opowiadał sporo swoich doświadczeń i trudności jakie spotykamy w naszej pracy, oraz jak zmieniał się jego światopogląd na przestrzeni lat.

Następnie było unconference, czyli coś co nie wiedzieliśmy czy się uda czy nie. Ale wychodzi na to że się udało. Było sporo pytań do Konrada, rozmów o pracy zdalnej, CQRSie i inne, a to wszystko w luźnej atmosferze. Później całość się przeniosła na kolację i dalsze rozmowy z ludźmi zwłaszcza nowopoznanymi.

Drugi dzień rozpocząłem od zapowiadanego morsowania. Niestety nikt chętny się nie zgłosił, chociaż o 2:00 w nocy ktoś się podobno deklarował. Może za mało przypominałem uczestnikom o tym temacie...


Drugiego dnia udałem się na Archi-Katę do Tomka Borko. Warsztat był na kartkach bez użycia komputerów, ale zmuszał do sporego myślenia, a później dyskusji i oceniania prac innych. Bardzo fajny warsztat.

Równolegle do warsztatów była ścieżka z prezentacjami. Tam frekwencja była mniejsza, ale podobno bardzo sprzyjało to żywej dyskusji.

Po przerwie obiadowej sam prowadziłem warsztaty. Jak się okazało, był to jedyny temat związany z Java, gdyż inne były o Scali, architekturze lub miękkie. Chyba trzeba będzie zmienić Java User Group na JVM User Group. Warsztat był rozszerzoną powtórką z Warsjawy. Sam na początku warsztatu się czegoś nowego nauczyłem, a mianowicie poznałem: Presentation Assistant, dzięki któremu można było wyświetlać wciskane skróty na ekranie. Kiedyś jak szukałem takiego narzędzie pod windę, to każde okazywało się jakieś kiepskie. A wspomniany plugin pokazywał skróty w wersji na Winde i Mac'a.

Implementowaliśmy ten sam problem co na Warsjawie, czyli StringCalculator. I jak doszliśmy do wydarzeń regularnych, to znów zaczeły się schody. Okazje się, że jak "ma się jakiś problem, który rozwiązujemy za pomocą regexpa, to de facto rozwiązujemy dwa problemy". Jakoś w końcu udało się wybrnąć z tego, ale nie było łatwo. Sam kilka dni przed konferencją zaimplementowałem problem, rozwiązanie (pewnie nieidealne) dostępne na githubie: mstachniuk/StringCalculatorKata. A slajdy poniżej:



Szkoda tylko, że nie wszyscy uczestnicy dotrwali do końca, ale wiadomo - niedziela i trzeba było wrócić z tego końca świata do domu. Mój warsztat trochę się przedłużył, ale to ze względu na masę pytań. Na koniec było czuć zmęczenie, ale i zadowolenie.

Podsumowując konferencję wypadła bardzo dobrze. Pierwszy dzień był mocny i miał służyć owocnym rozmowom podczas unconference. Ten cel został osiągnięty. Drugi dzień wypadł już trochę słabiej, więc pewnie można coś w nim poprawić. Można to ewentualnie tłumaczyć znakomitym pierwszym dniem. Mam nadzieję do zobaczenia za rok!

środa, 14 stycznia 2015

Duplikowanie bloku kodu w IntelliJ Idea

Dzisiaj mam do zaprezentowania mały lifehack w IntelliJ Idea. Wyszło to podczas przygotowywania (a raczej odświeżania) mojego warsztatu na konferencję ChamberConf'15, której też jestem współorganizatorem (wraz z ekipą z Wrocławskiego JUGa).

Otóż gdy się przesiadałem (dawno dawno temu) z Eclipse'a do Idei, to z początku denerwował mnie sposób duplikowania linii w kodzie. Ale nie o sam skrót klawiaturowy mi chodzi (Ctrl + D który to w starym środowisku usuwał linię), a o sposób duplikowania zaznaczonego kodu. A działa to tak:


Wiem, że mógłbym szybciej zaznaczyć dany fragment za pomocą Ctrl + W, ale wówczas efekt końcowy jest mniej zauważalny.

Generalnie powielany fragment kodu jest wstawiany zaraz za zaznaczeniem. Kiedyś bardzo mnie to denerwowało ale z czasem się przyzwyczaiłem i jakoś z tym żyłem. Ale dzisiaj rano znów zaczęło mnie to irytować... Zacząłem przeglądać YouTrack dla Idei i pogrzebałem trochę w ustawieniach.


Jak patrzymy na mapowanie klawiszy to mamy "Duplicate Line or Block" jak i "Duplicate Lines". Pod pierwszą pozycję jest podpięty skrót Ctrl + D. Gdy go stamtąd usuniemy i użyjemy w drugiej opcji, to otrzymamy ostrzeżenie o konflikcie:



Klikamy na "Leave" i uzyskujemy poniższy efekt działania Ctrl + D:


Jak widać, ten sam (tak samo zaznaczony) fragment kodu, po wciśnięciu magicznej kombinacji, wstawia się w nowej linii!

Mam nadzieję, że ten prosty wpis się spodobał. Jak chcesz poznać więcej trików, to zapraszam na wspomnianą już konferencję: ChambeConf'15, lub odezwij się bezpośrednio do mnie.