<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3943774940621879037</id><updated>2026-11-08T23:52:24.842+01:00</updated><category term="java"/><category term="konferencja"/><category term="społeczność"/><category term="testy"/><category term="IDEA"/><category term="db"/><category term="Eclipse"/><category term="TDD"/><category term="WrocJUG"/><category term="bazy danych"/><category term="scala"/><category term="rozmyslania"/><category term="33degree"/><category term="CodeRetreat"/><category term="J2ME"/><category term="NetBeans"/><category term="warsjawa"/><category term="Android"/><category term="JUnit"/><category term="NoSQL"/><category term="confitura"/><category term="db4o"/><category term="ChamberConf"/><category term="GeeCON"/><category term="LaTeX"/><category term="Liquibase"/><category term="Mockito"/><category term="RMI"/><category term="TeX"/><category term="aplet"/><category term="applet"/><category term="devoxx"/><category term="gdcr"/><category term="javarsovia"/><category term="CUDA"/><category term="DevCrowd"/><category term="GPU"/><category term="JDD"/><category term="JFreeChart"/><category term="KNS"/><category term="TestNG"/><category term="catch-exception"/><category term="db2"/><category term="dbconf"/><category term="egzamin"/><category term="elasticsearch"/><category term="java-web-start"/><category term="javaws"/><category term="jnlp"/><category term="jws"/><category term="książka"/><category term="nagroda"/><category term="opinia"/><category term="praktyki"/><category term="reactive programing"/><category term="recenzja"/><category term="webstart"/><category term="Agile"/><category term="Ant"/><category term="EasyMock"/><category term="FEST"/><category term="GWT"/><category term="Google"/><category term="Hamcrest"/><category term="IceBoar"/><category term="JavaScript"/><category term="PowerMock"/><category term="Reverse engineering"/><category term="Spring"/><category term="Synergy"/><category term="VCS"/><category term="Voxxed"/><category term="certyfikat"/><category term="crwroc"/><category term="gdcr11"/><category term="gdcr12"/><category term="gradle"/><category term="javarsovia2010"/><category term="kdiff3"/><category term="maven"/><category term="metadane"/><category term="mobilization"/><category term="oracle"/><category term="screencast"/><category term="studia"/><title type='text'>Marcin Stachniuk Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>101</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-1923981428635095472</id><published>2016-03-22T11:03:00.000+01:00</published><updated>2016-03-22T11:03:09.775+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="db"/><category scheme="http://www.blogger.com/atom/ns#" term="dbconf"/><category scheme="http://www.blogger.com/atom/ns#" term="elasticsearch"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>Nagrania moich prezentacji o ElasticSearchu</title><content type='html'>Pamiętacie wpis odnośnie &lt;a href=&quot;http://mstachniuk.blogspot.com/2015/11/po-dbconf-2015-i-69-spotkaniu.html&quot;&gt;dbconf 2015 i 69 spotkania Wrocławskiego JUG&#39;a&lt;/a&gt;? Pisałem wtedy o moich wystąpieniach w ramach konferencji dla bazodanowców, jak i w ramach WrocJUG. Temat ten sam, tylko zakres trochę inny.&lt;br /&gt;
&lt;br /&gt;
Dzisiaj znów o tym piszę, bo pojawiło się nagranie z &lt;a href=&quot;https://www.dbconf.pl/2015/pl/&quot;&gt;dbconf&lt;/a&gt;, które prezentuję poniżej:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;281&quot; mozallowfullscreen=&quot;&quot; src=&quot;https://player.vimeo.com/video/155306482&quot; webkitallowfullscreen=&quot;&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;

&lt;/div&gt;
&lt;br /&gt;
Pojawienie się tego nagrania zmotywowało mnie do umieszczenia w końcu swojego wystąpienia na ten sam temat w rozszerzonym wydaniu z WrocJUG. Jeżeli po obejrzeniu pierwszego filmu Wam mało, to możecie obejrzeć wydanie poniżej. Jakościowo jest co prawda trochę gorsze, ale tak niestety GoPro nagrywa w niedoświetlonym pomieszczeniu. Kamera jest raczej przystosowana do alpejskiego słońca, niż do ciemnego pomieszczenia.&amp;nbsp;No i dźwięk gorszy z powodu obudowy.&amp;nbsp;Musiałem również wyciąć kilka sekund w początkowych minutach, jak miałem problemy z mikrofonem. Mam nadzieję, że to nie wpłynie na odbiór merytoryczny.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/2FGGWXC0IbU&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;

&lt;/div&gt;
&lt;br /&gt;
Poniżej jeszcze raz slajdy z edycji wrocławskiej.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;420&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;//slides.com/mstachniuk/es-wrocjug/embed?style=light&quot; webkitallowfullscreen=&quot;&quot; width=&quot;576&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Wszelkie komentarze mile widziane.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/1923981428635095472/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2016/03/nagrania-moich-prezentacji-o.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1923981428635095472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1923981428635095472'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2016/03/nagrania-moich-prezentacji-o.html' title='Nagrania moich prezentacji o ElasticSearchu'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/2FGGWXC0IbU/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-2336388917429774387</id><published>2016-03-21T22:50:00.000+01:00</published><updated>2016-03-21T22:50:35.740+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ChamberConf"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>Chamberconf 2016</title><content type='html'>W weekend 5-6 marca 2016 miałem zaszczyt po raz drugi uczestniczyć w konferencji &lt;a href=&quot;http://chamberconf.pl/&quot;&gt;Chamberconf&lt;/a&gt;, 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 &lt;a href=&quot;http://www.palac-lagow.pl/&quot;&gt;Pałacu Łagów&lt;/a&gt; pod Zgorzelcem. Miejsce trochę awaryjnie wyszło, ale nie było na co narzekać.&lt;br /&gt;
&lt;br /&gt;
Po pre-party i krótkiej przerwie na sen, przyszedł czas na pierwszy dzień. Po krótkim przywitaniu uczestników pierwszy na scenę wszedł &lt;a href=&quot;https://twitter.com/jarek000000&quot;&gt;Jarek Ratajski&lt;/a&gt; z tematem &quot;ScalaJS i architektura #noserver&quot;. 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?&lt;br /&gt;
&lt;br /&gt;
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&#39;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ć?&lt;br /&gt;
&lt;br /&gt;
Następnie było trochę o &lt;a href=&quot;http://www.scala-js.org/&quot;&gt;ScalaJS&lt;/a&gt;. 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&#39;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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 ;)&lt;br /&gt;
&lt;br /&gt;
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: &lt;a href=&quot;https://www.youtube.com/watch?v=Ksoi6AG9nbA&quot;&gt;SBTB 2014, Haoyi Li: Cross-platform development with Scala.js&lt;/a&gt; oglądałem.&lt;br /&gt;
&lt;br /&gt;
Jako następny na scenie pojawił się &lt;a href=&quot;http://quantup.pl/Wykladowcy/artur-suchwalko/&quot;&gt;Artur Suchwałko&lt;/a&gt; z tematem &quot;Budowa modeli predykcyjnych w R&quot;. Artur jest organizatorem grupy &lt;a href=&quot;http://www.meetup.com/Data-Science-Wroclaw/&quot;&gt;Data Science Wroclaw&lt;/a&gt;. Artur pokazał co można robić w &lt;a href=&quot;https://www.r-project.org/&quot;&gt;języku R&lt;/a&gt;. 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. &lt;a href=&quot;https://pl.wikipedia.org/wiki/R_(j%C4%99zyk_programowania)&quot;&gt;Tak mówi Wikipedia&lt;/a&gt;, więc to prawda ;-) A wszystko ponoć za sprawą projektu &lt;a href=&quot;http://www.bioconductor.org/&quot;&gt;bioconductor.org&lt;/a&gt;. Konkurencją dla R jest Python jak i komercyjne narzędzia jak: SPSS, SAS, RapidMiner, Statistica.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Po wykładzie Artura nastał czas na część, za którą byłem w dużej mierze odpowiedzialny, czyli &lt;a href=&quot;https://pl.wikipedia.org/wiki/Pecha_Kucha&quot;&gt;Pecha Kucha&lt;/a&gt;. 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.&lt;br /&gt;
&lt;br /&gt;
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 ;)&lt;br /&gt;
&lt;br /&gt;
Później była przerwa obiadowa, a po niej kolej na rzeźnika, czyli Marcina Rzeźnickiego z tematem &quot;Fun with Arrows&quot;. 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ć:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned=&quot;&quot; data-instgrm-version=&quot;6&quot; style=&quot;background: #fff; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0 , 0 , 0 , 0.5) , 0 1px 10px 0 rgba(0 , 0 , 0 , 0.15); margin: 1px; max-width: 658px; padding: 0; width: 99.375%;&quot;&gt;
&lt;div style=&quot;padding: 8px;&quot;&gt;
&lt;div style=&quot;background: #F8F8F8; line-height: 0; margin-top: 40px; padding: 50.0% 0; text-align: center; width: 100%;&quot;&gt;
&lt;div style=&quot;background: url(data:image/png; display: block; height: 44px; margin: 0 auto -44px; position: relative; top: -22px; width: 44px;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin: 8px 0 0 0; padding: 0 4px;&quot;&gt;
&lt;a href=&quot;https://www.instagram.com/p/BCk43P1yWvv/&quot; style=&quot;color: black; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IT arystokracja podczas konferencji @chamberconf16&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;&quot;&gt;
Film zamieszczony przez użytkownika Ola K. (@akunysz) &lt;time datetime=&quot;2016-03-05T15:28:34+00:00&quot; style=&quot;font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;&quot;&gt;5 Mar, 2016 o 7:28 PST&lt;/time&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;script async=&quot;&quot; defer=&quot;&quot; src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;

&lt;br /&gt;
Ostatni wykład pierwszego dnia (jak i całej konferencji) był &lt;a href=&quot;https://twitter.com/j_palka&quot;&gt;Jarka Pałki&lt;/a&gt; pt. &quot;Tęcza, kucyki i Equestria i co to wszystko ma wspólnego z programowaniem”. Czyli było o języku &lt;a href=&quot;http://www.ponylang.org/&quot;&gt;Pony&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Pony to język kompilujący się do natywnego kodu z niewielką pomocą &lt;a href=&quot;https://en.wikipedia.org/wiki/LLVM&quot;&gt;Low Level Virtual Machine (LLVM)&lt;/a&gt;. 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ę &lt;a href=&quot;https://cdn.rawgit.com/darach/my_little_pony/master/my-little-pony.html&quot;&gt;My Little Pony - Codemesh 2015&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href=&quot;https://en.wikipedia.org/wiki/Porfiry_Ivanov&quot;&gt;Porfirii Ivanov&lt;/a&gt;. 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 не понимаю.&lt;br /&gt;
&lt;br /&gt;
Nocne rozmowy uczestników (zainicjowane unconference) trwały bardzo długo. W niedzielę zaczął się dzień warsztatowy. Do wyboru był &lt;a href=&quot;http://leanpoker.org/&quot;&gt;LeanPoker&lt;/a&gt;, &lt;a href=&quot;http://hackergarten.net/&quot;&gt;Hackergarten&lt;/a&gt; i &lt;a href=&quot;http://robocode.sourceforge.net/&quot;&gt;RoboCode&lt;/a&gt;. 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.&lt;br /&gt;
&lt;br /&gt;
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ć &lt;a href=&quot;https://github.com/Roche/IceBoar&quot;&gt;IceBoar&lt;/a&gt;’a. Pomagałem im z setupem projektu i dostałem dzięki temu feedback, jak go można ulepszyć. Udało się stworzyć &lt;a href=&quot;https://github.com/Roche/IceBoar/pull/4&quot;&gt;PR&lt;/a&gt;, ale jeszcze go nie akceptowałem, bo wymaga kilku poprawek.&lt;br /&gt;
&lt;br /&gt;
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 ;-)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ć.&lt;br /&gt;
&lt;br /&gt;
Mam nadzieję, że za rok znów się spotkamy, a konferencja będzie jeszcze lepsza.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/2336388917429774387/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2016/03/chamberconf-2016.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/2336388917429774387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/2336388917429774387'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2016/03/chamberconf-2016.html' title='Chamberconf 2016'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-5376129439209215997</id><published>2016-01-25T21:54:00.000+01:00</published><updated>2016-04-17T18:50:55.279+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aplet"/><category scheme="http://www.blogger.com/atom/ns#" term="applet"/><category scheme="http://www.blogger.com/atom/ns#" term="IceBoar"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="java-web-start"/><category scheme="http://www.blogger.com/atom/ns#" term="javaws"/><category scheme="http://www.blogger.com/atom/ns#" term="jnlp"/><category scheme="http://www.blogger.com/atom/ns#" term="jws"/><category scheme="http://www.blogger.com/atom/ns#" term="webstart"/><title type='text'>IceBoar, czyli jak radzić sobie lepiej z technologią Web Start</title><content type='html'>W &lt;a href=&quot;http://mstachniuk.blogspot.com/2015/12/technologia-java-web-start-co-i-jak.html&quot;&gt;poprzednim wpisie&lt;/a&gt; opowiedziałem o kłopotach na jakie możemy natrafić korzystając z technologi &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/javawebstart/index.html&quot;&gt;Java Web Start&lt;/a&gt;. Przede wszystkim nie mamy pewności na jakiej wersji Wirtualnej Maszyny Javy użytkownik uruchomi naszą aplikację. Musimy również podpisywać nasze aplikacje i działają one w piaskownicy web starta (proces javaws lub jp2launcher). Ale oto przedstawiam rozwiązanie części z tych problemów:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://github.com/Roche/IceBoar&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnUvrRwC72fq5o38wiY5tld3WxXHicNtaT_94YNlJlZ69uaYAPrPd9CATWrKv_c-bb0kpkc3kuQ3BKg04-3j90tAcg8fJOCXOJXYtZJQgMdg-4qiYGM5GKrTAklLsT5ks4csvQ9WbkyvA4/s1600/ice-boar-logo.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/Roche/IceBoar&quot;&gt;IceBoar&lt;/a&gt; to mój pierwszy projekt Open Source, który wylądował w repozytorium &lt;a href=&quot;https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.roche%22%20AND%20a%3A%22ice-boar%22&quot;&gt;maven central&lt;/a&gt;. Dodatkowo był on finansowany i pisany na zlecenie &lt;a href=&quot;http://www.roche.com/&quot;&gt;Roche&lt;/a&gt;, więc mamy połączenie przyjemnego z pożytecznym.&lt;br /&gt;
&lt;br /&gt;
Co robi IceBoar? Najłatwiej wyjaśnia to poniższy diagram ze strony projektu.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg38K8rqEnYv4bIBUJXTdHa1bT2aueNgw-o3wE0j7wmOcundsSCAMaInfCesHOaOzrMNEGuQt5hNsngshcyJEkUMzQTB3DCGU3gepyWLRelFmnNoQB-96waNe0uojl_qp1lz0-VyBvxcleL/s1600/ice-boar-sequence-diagram.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;323&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg38K8rqEnYv4bIBUJXTdHa1bT2aueNgw-o3wE0j7wmOcundsSCAMaInfCesHOaOzrMNEGuQt5hNsngshcyJEkUMzQTB3DCGU3gepyWLRelFmnNoQB-96waNe0uojl_qp1lz0-VyBvxcleL/s640/ice-boar-sequence-diagram.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Gdy użytkownik kliknie linka na stronie www, ściągany jest plik JNLP. Zamiast uruchamiać od razu docelową aplikację, uruchamia on Ice Boar’a. Ten najpierw ściąga spakowaną Wirtualną Maszynę Javy (musimy ją wcześniej sami przygotować i udostępnić do ściągnięcia). Następnie rozpakowuje ją (ale nie instaluje w systemie), ściąga docelową aplikację wraz z zależnościami i uruchamia ją. Aplikacja jest już uruchamiana po za procesem web start’a (javaws / jp2launcher), więc IceBoar może zakończyć swoje działanie.&lt;br /&gt;
&lt;br /&gt;
Podoba się? Mam nadzieję, że tak!&lt;br /&gt;
&lt;br /&gt;
Dodatkowo zaimplementowałem mechanizm cache’owania ściąganej JVM’ki i rozpakowanej JVM’ki. Dzięki temu kolejne uruchomienie nie będzie musiało ponownie pobierać tego pliku. Będzie to tak długo działać, dopóki ktoś nie wyczyści katalogu temp.&lt;br /&gt;
&lt;br /&gt;
Pobierane JAR’y są chache’owne z automatu przez mechanizm czystego web start’a, więc nie trzeba było tego implementować. Co prawda w logu wypisuje się, że je pobiera, ale tak na prawdę są one brane z cache’a web starta. Wystarczy porównać czasy pierwszego i drugiego uruchomienia.&lt;br /&gt;
&lt;br /&gt;
Jak zacząć przygodę z IceBoar’em? Sugeruję przyjrzeć się przykładowemu projektowi: &lt;a href=&quot;https://github.com/Roche/IceBoar/tree/master/ice-boar-samples/ice-boar-demo&quot;&gt;ice-boar-demo&lt;/a&gt;. Nie korzysta on co prawda z &lt;a href=&quot;http://www.mojohaus.org/webstart/webstart-maven-plugin/&quot;&gt;Webstart Maven Plugin’a&lt;/a&gt; i setup jest trochę czasochłonny (patrz &lt;a href=&quot;https://github.com/Roche/IceBoar/tree/master/ice-boar-samples&quot;&gt;Readme&lt;/a&gt;), ale prezentuje dokładnie to co potrzeba. Może kiedyś zrobię przykładowy projekt ze wspomnianym Maven’owym plugin’em. Kwestia tylko gdzie i czy można udostępniać spakowane JRE?&lt;br /&gt;
&lt;br /&gt;
Tak więc zachęcam do przeglądania kodu, testowania, zgłaszania błędów, Pull Request’ów i dzielenia się feedbackiem. Wszystko jest mile widziane.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/5376129439209215997/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2016/01/iceboar-czyli-jak-radzic-sobie-lepiej-z.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5376129439209215997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5376129439209215997'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2016/01/iceboar-czyli-jak-radzic-sobie-lepiej-z.html' title='IceBoar, czyli jak radzić sobie lepiej z technologią Web Start'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnUvrRwC72fq5o38wiY5tld3WxXHicNtaT_94YNlJlZ69uaYAPrPd9CATWrKv_c-bb0kpkc3kuQ3BKg04-3j90tAcg8fJOCXOJXYtZJQgMdg-4qiYGM5GKrTAklLsT5ks4csvQ9WbkyvA4/s72-c/ice-boar-logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-650269642653442282</id><published>2015-12-26T09:47:00.000+01:00</published><updated>2016-01-25T21:56:12.991+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aplet"/><category scheme="http://www.blogger.com/atom/ns#" term="applet"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="java-web-start"/><category scheme="http://www.blogger.com/atom/ns#" term="javaws"/><category scheme="http://www.blogger.com/atom/ns#" term="jnlp"/><category scheme="http://www.blogger.com/atom/ns#" term="jws"/><category scheme="http://www.blogger.com/atom/ns#" term="webstart"/><title type='text'>Technologia Java Web Start - co i jak?</title><content type='html'>&lt;b&gt;TL;DR&lt;/b&gt; Jeśli nie korzystałeś nigdy z technologi Java Web Start (pliki JNLP) i jeśli nie musisz tego robić, to spokojnie możesz nie czytać dalej - nie obrażę się. Jest to zamierająca technologia i niedługo nie będzie wspierana w nowszych przeglądarkach (zobacz: &lt;a href=&quot;http://blog.chromium.org/2014/11/the-final-countdown-for-npapi.html&quot;&gt;The Final Countdown for NPAPI&lt;/a&gt;). Jeśli jednak korzystałeś / musisz skorzystać z tej technologi, to pewnie [mam nadzieję] dowiesz się czegoś ciekawego z tego i kolejnych artykułów.&lt;br /&gt;
&lt;br /&gt;
Czym jest Java Web Start? Popatrzmy na &lt;a href=&quot;https://docs.oracle.com/javase/8/docs&quot;&gt;dokumentację Javy SE&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNxbq7ThtdFP8-NEWjlOCetzxxK2GyDllcDw6AT_pRaRIpiVGJ9osOXfzeDO5ScDik3XwiBQtrqzxKhBFDHLlMVMqg24VW5N5oC7SBHOsHHbMg47xMPEaXf09nFnFCqep15L93mcWBwPF3/s1600/javaSE.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;432&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNxbq7ThtdFP8-NEWjlOCetzxxK2GyDllcDw6AT_pRaRIpiVGJ9osOXfzeDO5ScDik3XwiBQtrqzxKhBFDHLlMVMqg24VW5N5oC7SBHOsHHbMg47xMPEaXf09nFnFCqep15L93mcWBwPF3/s640/javaSE.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Powinniście kojarzyć powyższy widok. Zazwyczaj korzystamy z &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/index.html&quot;&gt;Java SE API&lt;/a&gt;, natomiast &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/index.html&quot;&gt;Web Start&lt;/a&gt; jest zdefiniowany trochę wyżej po lewej, zaraz koło Applet&#39;ów - a to nie wróży nic dobrego.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3Fu1fFrFVh_Qvzi1JL5IWDZaziZJlnHJXwcQFnhmDSZbjIT6pZ8FXzKQwNO_6SCEAQrJEC5W9A-yDTqzDD9D0c2XtLpOghkWRjsoe9Lj1n5fBRdRSsSaI_rKAIr6-goqotZvhO5llmz_h/s1600/webstart_zaznaczony.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;432&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3Fu1fFrFVh_Qvzi1JL5IWDZaziZJlnHJXwcQFnhmDSZbjIT6pZ8FXzKQwNO_6SCEAQrJEC5W9A-yDTqzDD9D0c2XtLpOghkWRjsoe9Lj1n5fBRdRSsSaI_rKAIr6-goqotZvhO5llmz_h/s640/webstart_zaznaczony.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Java Web Start pozwala nam na uruchamianie javowych aplikacji standalone, bezpośrednio po kliknięciu na link’a na stronie www. Nie jest potrzebna żadna instalacja. Jest to wygodny sposób na dystrybuowanie wśród użytkowników najnowszej wersji naszego oprogramowania standalone - wejdźcie na stronę X, kliknijcie link Y i uruchomi się najnowsza wersja oprogramowania z którego [niestety] musicie korzystać. Jest to coś innego niż aplety, bo aplikacja uruchamia się po za przeglądarką.&lt;br /&gt;
&lt;br /&gt;
Jak to działa? Po kliknięciu na link ściągany jest plik JNLP, który jest on w formacie XML’owym. Generalnie plik ten zawiera informację, &amp;nbsp;co ma uruchomić, skąd pobrać JAR’y, parametry uruchomieniowe itd. Aby całość zadziałała, musimy mieć jakąś Javę zainstalowaną na docelowej maszynie klienckiej.&lt;br /&gt;
&lt;br /&gt;
Tyle teorii. Moim zdaniem, ta technologia świetnie sprawdza się z &lt;a href=&quot;https://docs.oracle.com/javase/tutorial/uiswing/learn/index.html&quot;&gt;tutorialem do Swinga&lt;/a&gt;, gdzie za pomocą jednokliku możemy odpalić przykład ze strony i zobaczyć efekt. Wystarczy kliknąć na poniższą ikonkę:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/CelsiusConverterProject/CelsiusConverter.jnlp&quot;&gt;&lt;img alt=&quot;https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/CelsiusConverterProject/CelsiusConverter.jnlp&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdn451XoSbh-96DMjTXPj7_A3cqQ6aI5_e48XKDb6PMP5Je_QD2OyVU1mEDueGc_Hu8owl0_0LvZEuYy1OQgr9qaseWPxWuNO_Dv0raILJBtN91wYPmSSH2SLQAT4OA0_1pjqcMM8YFt55/s1600/18214607-C784-4650-8A60-B6A26A04CFA8.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I to by było na tyle. Jeśli chodzi o jakieś bardziej skomplikowane aplikacje, to już może nie być tak różowo. Oracle nigdy jakoś szczególnie nie dbał o jakość tej technologii, czasem wprowadzał niekompatybilne zmiany, zaostrzał security itd.&lt;br /&gt;
&lt;br /&gt;
Największą jednak bolączką programistów zmuszonych do korzystania z tej technologi jest niepewność, na której wersji wirtualnej maszyny Javy będzie odpalona aplikacja. Póki jest to proste demo (tutorial do Swinga), to żadnych problemów nie powinno być. Gdy jednak stworzyliśmy kolosa, który z jakiś powodów działa tylko na konkretnej wersji JVM’a, to zaczynają się schody.&lt;br /&gt;
&lt;br /&gt;
Gdy zdefiniujemy w naszym pliku JNLP, że aplikacja ma się odpalić na Javie 1.7, a user będzie miał zainstalowaną Javę 1.8, to może zobaczyć poniższy komunikat:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHcpJvK5FFRjLiCq1Is6rMDwRtHUinqTTI_1gg_n4szdAy2z2MX-uhPApXnPyvyblrZY9Afgmo3wTzsIo-0MPzyMqzFD42mRWWd37m42Hw9rCt2I3Gqltl3VntCvNrs0J6zG6xd_LbRGPR/s1600/1.7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;267&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHcpJvK5FFRjLiCq1Is6rMDwRtHUinqTTI_1gg_n4szdAy2z2MX-uhPApXnPyvyblrZY9Afgmo3wTzsIo-0MPzyMqzFD42mRWWd37m42Hw9rCt2I3Gqltl3VntCvNrs0J6zG6xd_LbRGPR/s640/1.7.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Ten i inne screeny otrzymałem grzebiąc w plikach JNLP edytora UML’a: &lt;a href=&quot;http://argouml.tigris.org/&quot;&gt;ArgoUML&lt;/a&gt;, udostępniającego link do uruchomienia za pomocą Web Start&#39;a.&lt;br /&gt;
&lt;br /&gt;
Czyli aplikacja w tym wypadku uruchomi się na Javie 1.8. W przypadku, gdy mamy w systemie zainstalowane kilka wersji Javy, to użytkownik będzie miał możliwość wyboru, na której się uruchomi.&lt;br /&gt;
&lt;br /&gt;
Jeszcze innym problemem, może być posiadanie przez użytkownika starszej wersji Javy. Jeśli zdefiniujemy, że aplikacja ma się tylko odpalać na wersji 1.8.0_50, a będziemy mieć zainstalowaną starszą (1.8.0_28), to dalej nie mamy pewności, na której się uruchomi - patrz komunikat poniżej.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR6b8tmawYArN1SEnOKGqtorcHUyyXi-h2yR5Lc5l1Nkx0Tl2WX1iHjjiPNKj68uYFFMHJIUxiupxxGOFoRAkOgI46qfCrkToZxFdak27DJbtaL8FbhX2X7TpBIL7-Uirar1i1roagR5fC/s1600/1.8.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR6b8tmawYArN1SEnOKGqtorcHUyyXi-h2yR5Lc5l1Nkx0Tl2WX1iHjjiPNKj68uYFFMHJIUxiupxxGOFoRAkOgI46qfCrkToZxFdak27DJbtaL8FbhX2X7TpBIL7-Uirar1i1roagR5fC/s640/1.8.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Jak dobrze pamiętam, to jeszcze jest możliwość, że Web Start będzie próbował ściągnąć nowszą wersję JRE i zainstalować. Jest to spory problem w dużych firmach, gdzie korpo ludki mogą nie mieć (albo raczej nie powinni mieć) uprawnień do instalowania nowych rzeczy na swojej maszynie.&lt;br /&gt;
&lt;br /&gt;
Inną niedogodnością jest jeszcze konieczność podpisywania swoich aplikacji. Od którejś wersji Javy, własne certyfikaty (self signed) są z domysłu blokowane. Trzeba więc albo zdobyć porządny certyfikat od zaufanego wystawcy (czytaj zapłacić), albo skonfigurować userom maszyny tak, aby mogli otwierać aplikacje z zaufanych źródeł.&lt;br /&gt;
&lt;br /&gt;
Jak widać jest sporo tej babraniny, aby całość doprowadzić do ładu i składu. Spójrzmy zatem na kolejne fragmenty przykładowego pliku JNLP. Pozwoliłem sobie bazować na pliku z &lt;a href=&quot;http://argouml.tigris.org/&quot;&gt;ArgoUML&lt;/a&gt;, ale dorzuciłem też parę ciekawych rzeczy, których tam nie ma zdefiniowanych.&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;!-- JNLP File for launching ArgoUML with WebStart --&amp;gt;
&amp;lt;jnlp
  spec=&quot;1.0+&quot;
  codebase=&quot;http://argouml-downloads.tigris.org/maven2&quot;
  href=&quot;http://argouml-downloads.tigris.org/jws/argouml-latest-stable.jnlp&quot;&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Całość będzie zawierać się w tagu &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;jnlp&lt;/span&gt;. Możemy w nim zdefiniować atrybut &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;codebase&lt;/span&gt;, który będzie naszym bazowym URL’em przy pobieraniu JAR’ów.&lt;br /&gt;
&lt;br /&gt;
Bardzo ciekawy jest atrybut&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;href&lt;/span&gt;. Jeśli jest on zdefiniowany, to po uruchomieniu pobranego pliku JNLP (czy to w przeglądarce, czy bezpośrednio z dysku), to Web Start pobierze ten plik jeszcze raz ze zdefiniowanego tutaj adresu i jego będzie interpretował! Jeśli wprowadzimy jakieś zmiany lokalnie w pliku JNLP, ale będzie istniał atrybut &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;href&lt;/span&gt;, to nic nam to nie da! Dla celów produkcyjnych warto ustawić ten parametr, na pewno utrudni on życie początkujących hackerom.&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;information&amp;gt;
    &amp;lt;title&amp;gt;ArgoUML Latest Stable Release 0.34&amp;lt;/title&amp;gt;
    &amp;lt;vendor&amp;gt;Tigris.org (Open Source)&amp;lt;/vendor&amp;gt;
    &amp;lt;homepage href=&quot;http://argouml.tigris.org/&quot;/&amp;gt;
    &amp;lt;description&amp;gt;ArgoUML application.
                 This is the latest stable release.
    &amp;lt;/description&amp;gt;
    &amp;lt;description kind=&quot;short&quot;&amp;gt;ArgoUML 0.34&amp;lt;/description&amp;gt;
    &amp;lt;icon href=&quot;http://argouml.tigris.org/images/argologo16x16.gif&quot; width=&quot;16&quot; height=&quot;16&quot; /&amp;gt;
    &amp;lt;icon href=&quot;http://argouml.tigris.org/images/argologo32x32.gif&quot; width=&quot;32&quot; height=&quot;32&quot; /&amp;gt;
    &amp;lt;icon href=&quot;http://argouml.tigris.org/images/argologo64x64.gif&quot; width=&quot;64&quot; height=&quot;64&quot; /&amp;gt;
    &amp;lt;offline-allowed/&amp;gt;
  &amp;lt;/information&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Dalej mamy definicje, które są gdzieś tam wyświetlane podczas uruchamiania aplikacji, czyli tytuł, wydawca, strona domowa, opis, ikonka itp. Ostanie ustawienie (&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;offline-allowed&lt;/span&gt;) definiuje nam, że docelowa aplikacja może działać, gdy nie mamy połączenia z netem. Jest jeszcze możliwość tworzenia skrótu na pulpicie, menu start i inne pierdoły.&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;  &amp;lt;security&amp;gt;
    &amp;lt;all-permissions/&amp;gt;
  &amp;lt;/security&amp;gt;
&lt;/pre&gt;
Tutaj definiujemy, co nasza aplikacja może, a co nie. Jeśli jest to okienko swingowe z tutoriala, to nic nie potrzebujemy. Gdy chcemy zapisywać pliki na dysku itp, to potrzebujemy dostęp, najlepiej do wszystkiego. Dokładnie takie same seciurity (ale w trochę innej formie zapisu), musi być zdefiniowane w Manifeście w JAR’ze zawierającym klasę, którą będziemy uruchamiać (z metodą &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;main()&lt;/span&gt;).&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;  &amp;lt;resources&amp;gt;
    &amp;lt;j2se version=&quot;1.6+&quot; href=&quot;http://java.sun.com/products/autodl/j2se” 
             initial-heap-size=„64m&quot; 
             max-heap-size=„512m&quot; 
             java-vm-args=&quot;-ea -Xincgc&quot;/&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Następnie mamy definicję na jakiej wersji Javy ma być odpalona docelowa aplikacja. W specyfikacji 6.0 JNLP zamiast „&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;j2se&lt;/span&gt;&quot; może pojawić się „&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;java&lt;/span&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
Wersja może być zdefiniowana na wiele sposobów. Możemy podać dokładnie (np.: 1.7, 1.4.2, 1.4.2_04, 1.5.0-beta2), albo większe równie niż (np.: 1.5+, 1.4.2+). Można również podać kilka wersji kolejno wg. preferencji.&lt;br /&gt;
&lt;br /&gt;
Gdy chcemy jakiejś egzotycznej wersji, musimy podać atrybut &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;href&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Na koniec możemy jeszcze zdefiniować ustawienia pamięci i przekazać jakieś flagi do JVM’a.&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;    &amp;lt;jar href=&quot;http://argouml-downloads.tigris.org/maven2/antlr/antlr/2.7.7-3/antlr-2.7.7-3.jar&quot;/&amp;gt;
    &amp;lt;jar href=&quot;http://argouml-downloads.tigris.org/maven2/org/argouml/argouml-euml/0.34/argouml-euml-0.34.jar&quot;/&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Dalej definiujemy nasze zależności, które Web Start ma ściągnąć. Zależności są cache’owane, więc jak podbijamy wersję biblioteki, to warto zmienić nazwę pliku. Gdy nie podamy pełnej ścieżki do pliku, to będzie ona budowana na podstawie &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;codebase&lt;/span&gt; (w tag’u &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;jnlp&lt;/span&gt;).&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;    &amp;lt;property name=„argouml.modules&quot; value=&quot;;org.argouml…..&quot;    /&amp;gt;
&amp;lt;/resources&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
W ten sposób definiujemy sobie właściwości wspólne dla wszystkich platform. Muszą one jednak się zaczynać od &quot;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;javaws.&lt;/span&gt;&quot; lub &quot;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;jnlp.&lt;/span&gt;”. Ta powyższa definicja z ArgoUML wg. mnie nie zadziała. Jeszcze niektóre predefiniowane propertisy (np.:&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;http.agent&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;http.keepAlive&lt;/span&gt;) można zdefiniować w ten sposób.&lt;br /&gt;
&lt;br /&gt;
To były właściwości wspólne dla wszystkich systemów operacyjnych. Mamy jeszcze możliwość zdefiniowania właściwości specyficznych dla konkretnej platformy, np.:&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;  &amp;lt;resources os=&quot;Windows&quot; arch=&quot;amd64&quot;&amp;gt;
     &amp;lt;property name=&quot;jnlp.abc&quot; value=„xyz&quot;/&amp;gt;
  &amp;lt;/resources&amp;gt;

  &amp;lt;resources os=&quot;Mac OS X&quot; arch=&quot;x86_64&quot;&amp;gt;
     &amp;lt;property name=&quot;jnlp.abc&quot; value=„123&quot;/&amp;gt;
  &amp;lt;/resources&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Jeszcze na koniec pozostaje nam punkt wejścia do aplikacji:&lt;br /&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;application-desc main-class=„com.mycompany.myapp.MainApp&quot;&amp;gt;
   &amp;lt;argument&amp;gt;arg1&amp;lt;/argument&amp;gt;
   &amp;lt;argument&amp;gt;arg2&amp;lt;/argument&amp;gt;
&amp;lt;/application-desc&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Tutaj możemy dodatkowo przekazać argumenty do aplikacji. Pełen opis tego co możemy zrobić w pliku JNLP można znaleść tutaj: &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html&quot;&gt;JNLP File Syntax&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I to już wszystko jeśli chodzi o sam plik JNLP. Przygotowujemy taki plik, wrzucamy na serwer, umieszczamy do niego link, podpisujemy nasze JAR’y, robimy je możliwe do ściągnięcia i już możemy cieszyć się Web Startem. Brzmi prosto, ale na pewno takie nie jest. W kolejnym artykule opiszę, jak można sobie trochę ułatwić życie.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/650269642653442282/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/12/technologia-java-web-start-co-i-jak.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/650269642653442282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/650269642653442282'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/12/technologia-java-web-start-co-i-jak.html' title='Technologia Java Web Start - co i jak?'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNxbq7ThtdFP8-NEWjlOCetzxxK2GyDllcDw6AT_pRaRIpiVGJ9osOXfzeDO5ScDik3XwiBQtrqzxKhBFDHLlMVMqg24VW5N5oC7SBHOsHHbMg47xMPEaXf09nFnFCqep15L93mcWBwPF3/s72-c/javaSE.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-5457314942703200917</id><published>2015-12-21T23:40:00.000+01:00</published><updated>2015-12-21T23:40:15.581+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="33degree"/><category scheme="http://www.blogger.com/atom/ns#" term="bazy danych"/><category scheme="http://www.blogger.com/atom/ns#" term="db"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="Liquibase"/><category scheme="http://www.blogger.com/atom/ns#" term="społeczność"/><title type='text'>33rd Degree 4 Charity we Wrocławiu</title><content type='html'>&lt;b&gt;Keep things in memory with Cache, Mateusz Herbut&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Mateusz na początku przedstawił ciekawą historię, odnośnie tego, dlaczego się zainteresował cache’m i kiedy został zdefiniowany standard &lt;a href=&quot;https://jcp.org/en/jsr/detail?id=107&quot;&gt;JSR-107 - JCache&lt;/a&gt;. Fajnie się całość zbiegła z datami z filmu &quot;Powrót do przyszłości&quot;, co prelegent dobrze wykorzystał na slajdach.&lt;br /&gt;
&lt;br /&gt;
Mateusz bardzo fajnie przedstawił na diagramach sekwencji różne techniki działa cache&#39;a:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Cache Aside&lt;/li&gt;
&lt;li&gt;Read Through&lt;/li&gt;
&lt;li&gt;Write Through&lt;/li&gt;
&lt;li&gt;Write Back&lt;/li&gt;
&lt;li&gt;Write Behind&lt;/li&gt;
&lt;li&gt;Refresh Adead&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Pierwsze trzy techniki z pośród wymienionych są zdefiniowane przez standard JSR-107, a pozostałe są wspierane dodatkowo przez niektóre implementacje.&lt;br /&gt;
&lt;br /&gt;
Cache Aside jest najprostszy. Klient (aplikacja) sprawdza najpierw, czy wartość jest dostępna w cache’u. Gdy nie, to aplikacja sama odczytuje wartość ze źródła prawdy (dysku, bazy danych, etc.) i jeśli chce, to ją wrzuca do cache’a.&lt;br /&gt;
&lt;br /&gt;
W metodzie Read Through to cache, a nie aplikacja kliencka, jest odpowiedzialna za odczyt wartości ze źródła prawdy i jej zapamiętaniu u siebie na później.&lt;br /&gt;
&lt;br /&gt;
W podejściu Write Through to cache zapisuje wartość do źródła prawdy (synchronicznie) i zapamiętuje u siebie.&lt;br /&gt;
&lt;br /&gt;
Write back zapisuje dane do źródła prawdy, dopiero wtedy gdy dana wartość jest usuwana z cache’a. Podejście to jest często stosowane w procesorach (L1, L2 cache) i wartości te mogą być niespójne ze źródłem prawdy (pamięć RAM). O unieważnieniu cache’a decyduje cache provider.&lt;br /&gt;
&lt;br /&gt;
Przy Write behind klient zapisuje do cache’a i cache asynchronicznie rozpoczyna zapisywanie do źródła prawdy. Gdy w międzyczasie, ktoś będzie chciał odczytać wartości, to dostanie je bezpośrednio z cache’a.&lt;br /&gt;
&lt;br /&gt;
W ostatniej metodzie Refresh Ahead cache decyduje podczas odczytu, czy wartość trzeba odświeżyć, czy nie.&lt;br /&gt;
&lt;br /&gt;
Dalej było jeszcze o 3ch rodzajach operacji jakie mogą być wywoływane na cache’u:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Pessimistic locking&lt;/li&gt;
&lt;li&gt;Lock free&lt;/li&gt;
&lt;li&gt;Optimistic locking&lt;/li&gt;
&lt;/ul&gt;
ale tu już nie będę przedstawiał, które są które.&lt;br /&gt;
&lt;br /&gt;
Bardzo fajna, mięsista prezentacja. Uwagi odnośnie sposobu prezentowania&amp;nbsp;&amp;nbsp;przekazałem wieczorem bezpośrednio Mateuszowi.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;-XX:+UseG1GC, Jakub Kubrynski&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Następnie Jakub Kurbyński ładnie omówił Garbage collector G1, który na być domyślny w Javie 9. Prelegent fajnie przeszedł przez to w jaki sposób jest zorganizowana pamięć w Javie i jakie to ma konsekwencje dla algorytmów odśmiecania. Stopniowo powoli odkrywaliśmy nowe pomysły w sposobach organizacji pamięci i algorytmów odśmiecających.&lt;br /&gt;
&lt;br /&gt;
W G1 mamy wiele faz, ale dokładniej były omawiane 4:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Young GC&lt;/li&gt;
&lt;li&gt;Concurrent cycle&lt;/li&gt;
&lt;li&gt;Mixed GC&lt;/li&gt;
&lt;li&gt;Full GC&lt;/li&gt;
&lt;/ul&gt;
Young GC to odśmiecanie młodej generacji, odpalane po zapełnieniu wszystkich regionów typu Eden. Jest ono wykonywane równolegle i zatrzymuje naszą aplikację. Concurrent Cycle bazuje na wynikach poprzedniej fazy i stara się znaleźć regiony łatwe do odśmiecenia i je oznacza. Mixed GC uwalnia te obszary z poprzedniej fazy. Czyści on pamięć zarówno z młodej generacji, jaki i starej. Najgorzej, gdy dojdziemy do Full GC (jak go zobaczymy w logach), gdyż on odśmieca całą pamięć i zajmuje sporo czasu, bo wykonuje się jednowątkowo. Powinniśmy tego unikać.&lt;br /&gt;
&lt;br /&gt;
Fajne było podsumowanie, jak tuningować G1. Najlepiej ustawić:
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;-XX:MaxGCPauseMillis=250&lt;/pre&gt;
lub na inną empiryczną wartość. Wtedy G1 będzie starał się nie przekroczyć zadanego czasu na odśmiecanie. Oczywiście gdy wartość będzie zbyt mała to się to nie uda. Złą stroną tuningu jest natomiast ten slajd:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwKd4ONeuJAMQGlVu2X4fa7ty_zxUVNAbidDvvnrsDsqBmGMx92xwNFx2o_WpJjn-_BsThnH6s2I3rkayHnM1IoQv6QhpEu8CaqAa7wpPhtcmWHG8meS9QREi9EcUULK-Hz8wIgi4Gub4K/s1600/IMG_20151130_115839.582.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwKd4ONeuJAMQGlVu2X4fa7ty_zxUVNAbidDvvnrsDsqBmGMx92xwNFx2o_WpJjn-_BsThnH6s2I3rkayHnM1IoQv6QhpEu8CaqAa7wpPhtcmWHG8meS9QREi9EcUULK-Hz8wIgi4Gub4K/s640/IMG_20151130_115839.582.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
czyli flagi których należy się wystrzegać ;)&lt;br /&gt;
&lt;br /&gt;
Jeszcze inne dobre praktyki to:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBbwOW9fcRrydANfnvdcmA8ookiyhdj1AfgVW4gwVn3edjV4_Bptqkj9VL0Hk2CvdbAmDjVMwpt97SWQZGHNJQS9KlCVE1xsbBymSTGkEgX1XJidrJnv6c7IkvPdXlv23wF55P6QWYmlY0/s1600/IMG_20151130_115931.667.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBbwOW9fcRrydANfnvdcmA8ookiyhdj1AfgVW4gwVn3edjV4_Bptqkj9VL0Hk2CvdbAmDjVMwpt97SWQZGHNJQS9KlCVE1xsbBymSTGkEgX1XJidrJnv6c7IkvPdXlv23wF55P6QWYmlY0/s640/IMG_20151130_115931.667.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
A do przeglądania logów warto skorzystać z GCViewer, JVisualVM i Mission Control.&lt;br /&gt;
&lt;br /&gt;
Nagranie z Confitury, polecam sobie obejrzeć:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Xx2-Snbb_nA&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Później była przerwa obiadowa, po której na prezentację Tomka Dziurko &quot;Brzydka Pani od HR radzi…” po raz N-ty nie chciało mi się iść (widziałem na YT), a konkurencyjny temat mnie nie zachęcił. Filmik z prezentacji Tomka poniżej:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/rEPaWhyKzcc&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Liquibase - zarządzanie zmianami w relacyjnych bazach danych, Marcin Stachniuk&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
W kolejnym slocie przyszedł czas na moją prezentację. Grono zainteresowanych było niewielkie, bo w drugiej sali w tym czasie mówili o mikroserwisach po raz 144. Slajdy (trochę zaktualizowane od ostatniego razu) poniżej.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/pKyqNgIzjDMtSP&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/MarcinStachniuk/zarzdzanie-zamianami-w-relacyjnych-bazach-danych&quot; target=&quot;_blank&quot; title=&quot;Zarządzanie zamianami w relacyjnych bazach danych&quot;&gt;&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Ze zmian (po za kolorkami dopasowanymi do konferencji) to istnieje łatwiejszy sposób na wprowadzenie Liquibase&#39;a do istniejącego projektu, niż &lt;a href=&quot;http://mstachniuk.blogspot.com/2015/10/po-67-spotkaniu-wrocawskiego-juga.html&quot;&gt;ten który przedstawiałem na WrocJUG&#39;u&lt;/a&gt;. Można skorzystać z komendy changeLogSync, która to tworzy i wypełnia danymi z changelog&#39;a tabele potrzebne do działania biblioteki (DATABASECHANGELOG i DATABASECHANGELOGLOCK), a same zmiany nie są wykonywane. Po więcej szczegółów zapraszam na stonę Liquibase&#39;a:&amp;nbsp;&lt;a href=&quot;http://www.liquibase.org/documentation/existing_project.html&quot;&gt;Adding Liquibase on an Existing project&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Drugą wartością dodaną do prezentacji jest moje subiektywne porównanie Flyway&#39;a i Liquibase&#39;a, ale kot nie był niech żałuje.&lt;br /&gt;








&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Java 9, Arkadiusz Sokołowski&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Prelegent pokazał parę nowości które nas czeka w kolejnej wersji Javy. Było oczywiście o REPLu i modułach, czyli projekcie Jigsaw i jak to na nas wpłynie. Prezentacja była ok, ale gdzieś już coś o nowościach słyszałem...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Java developer meets AngularJS/JavaScript: real-world projects’ experiences, Marek Matczak&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Prelegent pokazywał z początku popularność różnych języków programowania, gdzie górował JavaScript i Java. Marek proponował te dwa języki do obecnych projektów, a dokładniej Spring-Boot’a i AngularJS’a.&lt;br /&gt;
&lt;br /&gt;
Prelegent przedstawił, jakie są możliwości połączenia tych dwóch światów, od strony budowania aplikacji. Jedno podejście, to łączenie części frontend&#39;owej z buildem Maven’owym. Można do tego wykorzystać &lt;a href=&quot;http://maven.apache.org/plugins/maven-assembly-plugin/&quot;&gt;maven-assembly-plugin&lt;/a&gt;, który buduje zzipowaną aplikację kliencką, a później za pomocą &lt;a href=&quot;http://www.mojohaus.org/exec-maven-plugin/&quot;&gt;exec-maven-plugin&lt;/a&gt; można uruchomić node.js’a. A całość do WAR’a można wrzucić za pomocą: &lt;a href=&quot;https://maven.apache.org/plugins/maven-war-plugin/&quot;&gt;maven-war-plugin’a&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Drugie podejście proponowane przez Marka to wykorzystanie exec-maven-plugin’a do budowania frontendu w trakcie fazy &lt;a href=&quot;https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html&quot;&gt;generate-sources&lt;/a&gt;. Zasoby te wrzucamy do &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;src/main/resources/static&lt;/span&gt;, czyli tam gdzie standardowo Spring Boot się ich spodziewa.&lt;br /&gt;
&lt;br /&gt;
Całość jest dostępna na GitHubie jako &lt;a href=&quot;https://github.com/oasp&quot;&gt;Open Application Standard Platform (OASP)&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Z ciekawostek, które mi utkwiły, to warto się przyjrzeć &lt;a href=&quot;https://google.github.io/styleguide/javascriptguide.xml&quot;&gt;Google JavaScript Style Guide&lt;/a&gt; i &lt;a href=&quot;https://github.com/rwaldron/idiomatic.js/&quot;&gt;Idiomatic JavaScript&lt;/a&gt;, aby wiedzieć jak dobrze pisać kod w JavaScript’cie.&lt;br /&gt;
&lt;br /&gt;
Warto też na przyszłość przyjrzeć się &lt;a href=&quot;http://isomorphic.net/&quot;&gt;Isomorphic JavaScript&lt;/a&gt;. Dzięki temu, będziemy mogli wyrenderować stronę HTML po tronie backend&#39;u, co pozwoli nam np. na szybsze ładowanie się strony głównej naszej aplikacji.&lt;br /&gt;
&lt;br /&gt;
Muszę się również przyjrzeć &lt;a href=&quot;http://gulpjs.com/&quot;&gt;Gulp’owi&lt;/a&gt;, gdyż on ma wbudowane reverse proxy.&lt;br /&gt;
&lt;br /&gt;
Dzień 2&lt;br /&gt;
&lt;b&gt;On-heap cache vs. Off-heap cache, Radek Grębski&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Drugi dzień zaczął się bardzo mięsistą prezentacją na temat pamięci off-heap, czyli pamięci po za standardowym heap’em Javowym. Jest to pamięć, która nie jest zarządzana przez Garbage Collector, można w niej zapisywać tylko tablice bajtów (korzystająć ze standardowego API) i sami musimy zajmować się jej zwalnianiem.&lt;br /&gt;
&lt;br /&gt;
Generalnie bardzo polecam tą prezentację, jest dostępne nagranie z Confitury 2015 jak i kod na GitHubie: &lt;a href=&quot;https://github.com/rgrebski/confitura2015&quot;&gt;https://github.com/rgrebski/confitura2015&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/wfPl_aNj4Pc?list=PLVbNBx5Phg3Ct6pIPeWpOW37OH7F8hcMO&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
Trochę podsumowując prezentację:&lt;br /&gt;
Aby zaalokować pamięć w Javie, można skorzystać z następujących klas: &lt;a href=&quot;http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/nio/HeapByteBuffer.java&quot;&gt;HeapByteBuffer&lt;/a&gt; (na stercie [heap], do 2 GB), &lt;a href=&quot;http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/nio/DirectByteBuffer.java&quot;&gt;DirectByteBuffer&lt;/a&gt; (po za stertą, do 2 GB), &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html&quot;&gt;MappedByteBuffer&lt;/a&gt; (po za stertą, do 2 GB, pamięć perzystowana), &lt;a href=&quot;http://www.docjar.com/docs/api/sun/misc/Unsafe.html#allocateMemory(long)&quot;&gt;Unsafe.allocateMemory()&lt;/a&gt; (więcej niż 2 GB).&lt;br /&gt;
&lt;br /&gt;
Pierwsze 3 klasy mogą allokować do 2 GB ponieważ jako argument przyjmują int’a, który ich ogranicza. Bardzo ciekawą klasą jest MappedByteBuffer, która tworzy buffer w pamięci, który może być zapisywany do pliku na dysku. Ma on tą przewagę nad wszystkim innym, że w przypadku całkowitego crash’u maszyny wirtualnej zapis i tak się powiedzie. Operacja ta jest zapewniana przez system operacyjny.&lt;br /&gt;
&lt;br /&gt;
Chcąc allokować pamięć większą niż 2 GB to już trzeba korzystać z Unsafe’a. Korzystanie z tej klasy nie jest łatwe i wygląda jakby sam Chuck Noris ją pisał. Właściwie ta klasa z definicji miała być dostępna tylko dla „zaufanego kodu”, czyli do wewnętrznego użytku przez Javę. Ale coś poszło nie tak i obecnie masa frameworków i bibliotek z niej korzysta. Co gorsza to klasa ma być niedostępna w Javie 9, więc będzie ciekawie. Sporo kodu trzeba będzie przepisać, albo znaleść haka, aby się dostać do odpowiedniego modułu.&lt;br /&gt;
&lt;br /&gt;
Dalej było o &lt;a href=&quot;http://chronicle.software/products/chronicle-map/&quot;&gt;Chronicle Map&lt;/a&gt;. Jest to mapa, która jest zapisywana po za stertą. Jest też perzystowalna, dzielona pomiędzy osobnymi procesami JVM (również po sieci). Jedynym minusem jest fixed size, tzn. musimy wiedzieć jak duże będą nasze obiekty. I tak dla String’ów i kolekcji musimy za pomocą &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;@MaxSize&lt;/span&gt; zdefiniować jak maksymalnie długie będą nasze teksty i jak wielkie kolekcje w obiektach. Gdy przekroczymy granicę to dostaniemy błąd. Obiekty zapisujemy do bloków o stałej wielkości - trochę pamięci się marnuje, ale dostęp do niej jest łatwiejszy.&lt;br /&gt;
&lt;br /&gt;
Dalej było sporo porównań szybkości działania Mapy i Chronicle Mapy. Następnie prelegent opowiedział jeszcze z grubsza o Hazelcas’cie i Redisie, które również porównał z Chronicle Map.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Purely functional data structures, Tomasz Kaczmarzyk&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Na początku zaczęło się o tym jak w językach funkcyjnych są zaimplementowane Listy, że składają się z głowy i ogona, że ogon wykorzystuje dokładnie tą samą strukturę co pierwotna lista itd. Kto się uczył Skali, lub innego języka funkcyjnego, to na pewno kojarzy koncept.&lt;br /&gt;
&lt;br /&gt;
Póżniej było już ciekawiej, o tym jak jest zbudowana kolejka w językach funkcyjnych, w której można dodawać elementy na końcu. W standardowej liście jest to bardzo kosztowna operacja. Kolejka wprowadza pewne ciekawe pomysły, jak może ona być wewnętrznie zorganizowana, aby efektywnie przeprowadzać operacje na niej, mi.in. dodawania elementu na końcu. Ten fragment prezentacji był bardzo fajny.&lt;br /&gt;
&lt;br /&gt;
Następnie było o tym jak wewnętrznie jest zorganizowany Git i jaka to jest ładna struktura danych. Temat był mi już wcześniej znany, więc mnie aż tak nie zachwycił jak poprzednia część.&lt;br /&gt;
&lt;br /&gt;
Prelegent miał bardzo fajne slajdy (pisane kredą po tablicy), z ładnymi animacjami przejścia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sane Sharding with Akka Cluster, Michał Płachta&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tutaj było mnóstwo programowania na żywo, które działało! Prelegent się dobrze do tego przygotował.&lt;br /&gt;
&lt;br /&gt;
Na początek napisał pojedynczego aktora obsługującego jakieś zapytania i zrobił test wydajności. Następnie, razem z publicznością, udoskonalał rozwiazanie… Implementowaliśmy system rozdzielający paczki na taśmociągu w jakimś magazynie.&lt;br /&gt;
&lt;br /&gt;
Jako drugi krok, prelegent dorzucił drugiego aktora, który tylko podejmował decyzję o przeznaczeniu paczki. Następnie pojawili się kolejni aktorzy i to już bardzo przyspieszyło obsługę zapytań. Na koniec był jeszcze przedstawiony Akka cluster, aby można było to łatwo skalować na więcej maszyn.&lt;br /&gt;
&lt;br /&gt;
Kod z prezentacji jest dostępny tutaj: &lt;a href=&quot;https://github.com/miciek/akka-sharding-example&quot;&gt;https://github.com/miciek/akka-sharding-example&lt;/a&gt;.&amp;nbsp;Warto przejść sobie po commit&#39;ach i zobaczyć jak się aplikacja rozwijała.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Recepta na retrospekcję z finezją, Wòjcech Makùrôt&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Retrospekcje są wpisane w &lt;a href=&quot;http://agilemanifesto.org/&quot;&gt;Agile Manifesto&lt;/a&gt; jako dwunasty punkt:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.&lt;/blockquote&gt;
czyli:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
W regularnych odstępach czasu zespół analizuje możliwości poprawy swojej wydajności, a następnie dostraja i dostosowuje swoje działania do wyciągniętych wniosków.&lt;/blockquote&gt;
Prelegent podał i opowiedział na przykładach swoje 10 punktów, które trzeba spełnić, aby mieć dobrą retrospektywę. Postaram się streścić, jak ja to zrozumiałem.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Trzeba się dobrze przygotować. Spisać sobie plan spotkania, załatwić wszystkie niezbędne pomoce materialne, poszukać inspiracji, aby nie było nudno.&lt;/li&gt;
&lt;li&gt;Wprowadzamy jakiegoś IceBreak’era, aby rozmawiało się na luzie. Można odwrócić krzesła w sali, aby ludzie musieli zrobić coś innego. Prowadzący spotkanie (facylitator) może być niemerytoryczny - do niego należy moderacja i czasem pacyfikacja spotkania. Najważniejsze jest zdanie innych.&lt;/li&gt;
&lt;li&gt;Sprawdzamy, czy z poprzedniej retrospekcji udało nam się zrealizować jakieś postanowienia. Jeśli nic się nie udało, to powinniśmy przerwać i zastanowić się dlaczego się nie udało.&lt;/li&gt;
&lt;li&gt;Możemy opowiedzieć historyjkę, odnośnie tego co działo się w ostatnim sprincie. Budujemy przez to naszą wspólną świadomość.&lt;/li&gt;
&lt;li&gt;Grupowanie i priorytetyzowanie problemów - powinniśmy zajmować się tylko tymi najważniejszymi problemami.&lt;/li&gt;
&lt;li&gt;Dziel i rządź, czyli z którymi problemami jesteśmy zdolni sobie poradzić, i które będą miały największy wpływ na poprawę naszej sytuacji.&lt;/li&gt;
&lt;li&gt;Analiza przyczyn, dlaczego coś nie działa. Tutaj możemy skorzystać z metody 5x dlaczego, ość Ishikawy&lt;/li&gt;
&lt;li&gt;Planowanie naprawy, czyli: co trzeba zrobić, jak, kto będzie za to odpowiedzialny i na kiedy. Nie warto brać więcej niż 4 tematy do naprawy, bo to może być niemożliwe do zrealizowania.&lt;/li&gt;
&lt;li&gt;Celebracja tego do czego udało się dojść, czyli warto podziękować za współpracę, nagrodzić jakoś uczestników, wyjść na piwo...&lt;/li&gt;
&lt;li&gt;Śledzenie postępów w kolejnej iteracji, czyli sprawdzanie wykonania zadań.&lt;/li&gt;
&lt;/ul&gt;
Jako źródło inspiracji, warto spojrzeć na &lt;a href=&quot;http://retrospectivewiki.org/&quot;&gt;retrospectivewiki.org&lt;/a&gt; i &lt;a href=&quot;http://blog.accentient.com/upgrade-your-sprint-retrospective-meetings/&quot;&gt;blog.accentient.com/upgrade-your-sprint-retrospective-meetings&lt;/a&gt;&amp;nbsp;oraz do książki &lt;a href=&quot;http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649&quot;&gt;Agile Retrospectives&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Slajdy z wystąpienia:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/ygY3XsduTqtu5g&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; 
&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Refactoring meets big money, Michal Gruca&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Prelegent przedstawił 3 możliwe podejścia do refactoringu:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Codzienny refactoring&lt;/li&gt;
&lt;li&gt;Pisanie całości od nowa&lt;/li&gt;
&lt;li&gt;Przepisywanie modułów i podmienianie&lt;/li&gt;
&lt;/ul&gt;
Tylko jak to wszystko wytłumaczyć i sprzedać biznesowi? Warto zdecydować się na mierzenie jakiś metryk kodu. Można wziąć jakieś Sonarowe metryki dobrych projektów open source, porównać z metrykami naszych projektów, przełożyć na kasę i strać się wytłumaczyć, że to jest ważne. Warto zrobić sobie sceeena tych metryk z naszego projektu, aby później, po serii refaktoringów, zobaczyć czy i ile się poprawiło.&lt;br /&gt;
&lt;br /&gt;
Warto też, przed pójściem do biznesu, trochę się przygotować. Można stworzyć jakieś prototypowe rozwiazanie i pokazać, że ono przynosi nam jakąś wartość. Przykładowo przyspieszymy build’a albo release’a.&lt;br /&gt;
&lt;br /&gt;
Prelegent polecał do przeczytania fane case study, jak to &lt;a href=&quot;https://developers.soundcloud.com/blog/building-products-at-soundcloud-part-1-dealing-with-the-monolith&quot;&gt;Soundcloud przechodził na mikroserwisy&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Common fallacies of micro services, Marcin Matuszak&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Prelegent w ciekawy sposób podszedł do tego, w jaki sposób obecnie są wynoszone pod niebiosa mikroserwisy, kontrargumentując potencjalne zalety jakie nam daje to podejście. I tak możliwość pisania każdego mikroserwisu w innym języku jest kiepski, bo jak ktoś napisze coś w bardzo egzotycznym języku (którego mało kto zna) i później się zwolni z pracy, to trzeba będzie nauczyć się tego języka, aby utrzymywać kod.&lt;br /&gt;
&lt;br /&gt;
Monolityczne aplikacje wcale nie są takie złe. Są łatwe do pisania testów, w deploymencie i utrzymaniu. Jak rozmawiamy o mikroserwisach, to się skupiamy na tym, że mają być serwisy i że mają być małe. A zapominamy że mają sie komunikować po sieci, co przysparza masę dodatkowych problemów. Jeśli zepsuliśmy aplikację monolitową, to również i zepsujemy mikroserwisy.&lt;br /&gt;
&lt;br /&gt;
Podsumowując całość, była to bardzo fajna konferencja, w końcu coś ciekawego i większego zawitało do Wrocławia. Nie miałem wysokich oczekiwań co do prelekcji, a okazały się one na dobrym poziomie. Byłem więc pozytywnie zaskoczony tą konferencją. Jednocześnie sam miałem okazję wystąpić i wyświetlać swoje slajdy po raz pierwszy na kinowym ekranie.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/5457314942703200917/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/12/33rd-degree-4-charity-we-wrocawiu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5457314942703200917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5457314942703200917'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/12/33rd-degree-4-charity-we-wrocawiu.html' title='33rd Degree 4 Charity we Wrocławiu'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwKd4ONeuJAMQGlVu2X4fa7ty_zxUVNAbidDvvnrsDsqBmGMx92xwNFx2o_WpJjn-_BsThnH6s2I3rkayHnM1IoQv6QhpEu8CaqAa7wpPhtcmWHG8meS9QREi9EcUULK-Hz8wIgi4Gub4K/s72-c/IMG_20151130_115839.582.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-5891077122411857974</id><published>2015-11-05T12:12:00.000+01:00</published><updated>2015-11-05T12:12:27.896+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="db"/><category scheme="http://www.blogger.com/atom/ns#" term="dbconf"/><category scheme="http://www.blogger.com/atom/ns#" term="elasticsearch"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>Po dbconf 2015 i 69 spotkaniu Wrocławskiego JUG&#39;a</title><content type='html'>Ostatnio, &lt;a href=&quot;http://www.meetup.com/WroclawJUG/events/225441363/&quot;&gt;miesiąc po poprzednim wystąpieniu na WrocJUGu&lt;/a&gt;, miałem okazję dzielić się swoją wiedzą na temat &lt;a href=&quot;https://www.elastic.co/products/elasticsearch&quot;&gt;ElasticSearch&lt;/a&gt;’a. Najpierw było to w ramach &lt;a href=&quot;https://www.dbconf.pl/2015/pl/&quot;&gt;dbconf&lt;/a&gt; - konferencji dla bazodanowców, a później na swoim podwórku, czyli &lt;a href=&quot;http://wroclaw.jug.pl/&quot;&gt;Wrocławskim JUG’u&lt;/a&gt;. Początkowo kolejność miała być inna (najpierw WrocJUG, potem dbconf), ale nie wyrobiłem się z przygotowaniem. Nie wpłynęło to jednak na jakość obydwu wystąpień.&lt;br /&gt;
&lt;br /&gt;
W ramach dbconf byłem właściwie tylko na swoim wykładzie i imprezach integracyjnych, gdyż nie czuję się typowym bazodanowcem. Zresztą konferencja odbywała się w Jurze Krakowsko-Częstochowskiej, więc była okazja aby zwiedzić okolicę.&lt;br /&gt;
&lt;br /&gt;
Co do samego wykładu, to poszło mi chyba całkiem dobrze. Płynnie uruchamiałem wcześniej przygotowane przykłady i było trochę pytań z sali. Końcówkę musiałem jednak już gnać i pominąć parę szczegółów, bo niestety sztywne ramy czasowe nie pozwoliły mi na przekazanie wszystkiego. Po prezentacji było trochę pytań, na które już odpowiadałem po za salą.&lt;br /&gt;
&lt;br /&gt;
Z całego pośpiechu zapomniałem zabrać zasilacza, ale na szczęście organizatorzy mi go odesłali, więc mogłem kilka dni później poprowadzić ten sam temat we Wrocławiu.&lt;br /&gt;
&lt;br /&gt;
W ramach JUG’a pierwszy raz spotkaliśmy się w nowym miejscu tj. w &lt;a href=&quot;http://www.sanatoriumkultury.pl/&quot;&gt;Sanatorium Kultury&lt;/a&gt; na rynku. Bardzo fajne miejsce, ze sceną jak w teatrze i klimatycznym oświetleniem. Było trochę problemów z mikrofonem, ale jak już wymienili baterię, to działało.&lt;br /&gt;
&lt;br /&gt;
Na spotkanie była chętna ponad setka ludzi, ale na sali była już tylko połowa z tego.&lt;br /&gt;
&lt;br /&gt;
Na szczęście nie ograniczał mnie czas i cała prezentacja zajęła mi 2 godziny! Było sporo pytań z publiczności, zwłaszcza od Kamila i jeszcze jednej osoby, która wcześniej pracowała sporo z &lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Apache Solr&lt;/a&gt;. Nie na wszystkie umiałem odpowiedzieć, bo nie jestem specjalistą w temacie i nie spotkałem się z niektórymi omawianymi przypadkami.&lt;br /&gt;
&lt;br /&gt;
Udało mi się na szczęście zebrać trochę feedbacku, tego dobrego i złego, więc uważam, że warto go tutaj zapisać, aby za jakiś czas zrobić sobie retrospekcję i sprawdzić czy się coś poprawiło. Dziękuję wszystkim dzielącym się ze mną swoją opinią!&lt;br /&gt;
&lt;br /&gt;
Uwagi:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;“Podczas przełączania slajdów machałeś ręką, jakbyś chciał rapować” - fakt, widać to na nagraniu, do poprawki.&lt;/li&gt;
&lt;li&gt;“Warto by mieć ciągle agendę gdzieś z boku, bo często pytania wybiegały mocno w przód (dotyczyły tematu który nie był jeszcze omawiany)” - choć nie spotkałem się z takim podejściem na konferencjach, ale to może mogę być pierwszy ;) Rzeczywiście można wywiesić agendę gdzieś z boku i wtedy osoby zadające pytanie mogą 2 razy się zastanowić, czy to aby na pewno jest dobry moment na dane zapytanie. Można jeszcze wydrukować kartki z agendą i umieścić na siedzeniach jak w teatrze lub operze, ale to jeszcze wyższy poziom ;)&lt;/li&gt;
&lt;li&gt;“Dużo pytań o specyficzne tematy, których ktoś kto pierwszy raz spotyka się z narzędziem i tak nie zapamięta” - to fakt. Było sporo szczegółowych pytań, których osoby początkujące i tak nie zapamiętają. Z drugiej strony osoby zaawansowane też chcą coś wynieść z prezentacji, więc wypada odpowiedzieć. Ja się cieszę, że czasem była zażarta dyskusja, bo sam się przez to czegoś dowiedziałem. Fajne jest również to, że uczestnicy odpowiadają sobie nawzajem. Z drugiej strony liczne pytania trochę zaburzają tok prezentacji. Ciężko tutaj znaleźć złoty środek:/ Może powinienem rzadziej pytać, czy są jakieś pytania?&lt;/li&gt;
&lt;li&gt;“Zabrakło przykładów z poziomu Javy” - no fakt skupiłem się na zapytaniach &lt;strike&gt;REST&lt;/strike&gt;JSON’owych, a zapomniałem, że jesteśmy na Java User Group. Dobra uwaga, powinno być więcej kodu z Javie. Chyba coś muszę dodać w kolejnej wersji (jeśli będzie kolejna wersja).&lt;/li&gt;
&lt;li&gt;“Lepiej niż miesiąc wcześniej, gdzie puszczałeś wcześniej nagrany film” - tak, tym razem były przygotowane przykłady, które odpalałem na żywo. W prezentacji o Liquibasie bardzo dużo mogło pójść nie tak, więc lepiej było nagrać krótki filmik. Jest więc jakiś postęp.&lt;/li&gt;
&lt;li&gt;“Widownia mogłaby bardziej uczestniczyć w tworzeniu przykładów” - mogłem pytać się np. jaki film utworzyć w indeksie, co poszukać itp. Do poprawki.&lt;/li&gt;
&lt;li&gt;“Przydałyby się jeszcze jakieś fajerwerki. Nawet najlepsza prezentacja jeśli trwa długo, potrzebuje przerywnika” - był żart o masturbacji… Ale fakt zapomniałem o zasadzie, która kiedyś była dla mnie bardzo ważna, aby był jakiś śmieszny przerywnik w trakcie. Zwłaszcza, że prezentacja zajęła mi 2 godziny. Nie wiedziałem wcześniej, że może mi to tyle zająć.&lt;/li&gt;
&lt;li&gt;“Sekcja &quot;teoretyczna&quot; powinna zostać lepiej omówiona” - nie wiem co miałbym jeszcze omawiać w kwestii teoretycznej… postawiłem bardziej na praktykę.&lt;/li&gt;
&lt;li&gt;“Wymowa: &quot;bede&quot;, &quot;must&quot;, &quot;fuzzy&quot;, &quot;schema” i język potoczny: &quot;klepał w klawiaturę&quot;, “mianowicie” - chyba trochę za dużo oglądania Pana &lt;a href=&quot;https://www.youtube.com/watch?v=OUQpdQ2YVqY&amp;amp;list=PLXFPKHQtpR9egl7FxqJrKmJ7dhn9bT9s3&quot;&gt;Wiesława Wszywki&lt;/a&gt;. Nad wymową niektórych słów muszę trochę popracować, ale języka potocznego nie zmienię - innym osobom luźny styl prowadzenia prezentacji się podobał (wliczając w to mnie), więc tak już zostanie. Nie chcę gadać jak nudny wykładowca.&lt;/li&gt;
&lt;li&gt;“Próby kodowania na żywo kiepsko wychodzą” - fakt chciałem coś tam małego zakodować w trakcie - pod wpływem pytania z publiczności - i były z tym pewne problemy. Podpowiadania składni brak, nie robiłem tego wcześniej, po za tym inne obszary mózgu są odpowiedzialne za mówienie i za pisanie - nie jestem w stanie robić tego równocześnie.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Była jeszcze masa pozytywnych komentarzy. Większości bardziej się podobało niż nie podobało. Nie będę jednak przytaczał tych pozytywnych komentarzy.&lt;br /&gt;
&lt;br /&gt;
A już za niecały miesiąc, &lt;a href=&quot;http://2015.33degree.org/&quot;&gt;33 degree 4 charity&lt;/a&gt; zawita do Wrocławia. Będę tam mówił o Liquibase, czyli mój temat z &lt;a href=&quot;http://www.meetup.com/WroclawJUG/events/225441363/&quot;&gt;67 spotkania WrocJUG&lt;/a&gt;. Trzeba będzie go trochę zmodyfikować, aby zmieścić się w wyznaczonym czasie. I będę mógł zobaczyć swoją prezentację na dużym ekranie :) Już dzisiaj wszystkich serdecznie zapraszam!&lt;br /&gt;
&lt;br /&gt;
Poniżej slajdy dla zainteresowanych odnośnie ElasticSearch’a:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;420&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;//slides.com/mstachniuk/es-wrocjug/embed&quot; webkitallowfullscreen=&quot;&quot; width=&quot;576&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/5891077122411857974/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/11/po-dbconf-2015-i-69-spotkaniu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5891077122411857974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5891077122411857974'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/11/po-dbconf-2015-i-69-spotkaniu.html' title='Po dbconf 2015 i 69 spotkaniu Wrocławskiego JUG&#39;a'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-7127900494236405460</id><published>2015-10-03T23:59:00.000+02:00</published><updated>2015-10-04T00:01:55.083+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bazy danych"/><category scheme="http://www.blogger.com/atom/ns#" term="db"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="Liquibase"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>Po 67 spotkaniu Wrocławskiego JUG&#39;a</title><content type='html'>&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;br /&gt;
&lt;div style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;Ostatnio miałem przyjemność poprowadzić &lt;/span&gt;&lt;a href=&quot;http://www.meetup.com/WroclawJUG/events/225441363/&quot; style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;67 spotkanie&lt;/a&gt;&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://wroclaw.jug.pl/&quot; style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;Wrocławskiego JUG&#39;a&lt;/a&gt;&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt; na temat: Liquibase - zarządzanie zmianami w relacyjnych bazach danych.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;
&lt;br /&gt;
Co prawda &lt;a href=&quot;https://www.dbconf.pl/2014/agenda&quot;&gt;podobny temat&lt;/a&gt; przedstawiałem niemal rok temu na &lt;a href=&quot;http://dbconf.pl/&quot;&gt;dbconf.pl&lt;/a&gt;, ale chciałem w ramach JUG&#39;a zrobić bardziej praktycznie i z przykładami. Tworzyłem więc (przez rok z wieloma przerwami) &lt;a href=&quot;https://github.com/mstachniuk/movies-database&quot;&gt;przykładową aplikację&lt;/a&gt;, aby zaprezentować to, co chciałem. Zabrało mi to tyle czasu, bo walczyłem ze Spring Boot&#39;em, &lt;a href=&quot;http://www.jmdb.de/&quot;&gt;Java Movie Database&lt;/a&gt;, Postregssem, MySQLem, mapowaniem Hibernate&#39;a, a do tego wszystkiego chciałem pokazać choć proste GUI, a więc jeszcze AngularJS i HTML. Ostatecznie na prezentacji i tak puszczałem nagranie, jak można dodać Liqibase&#39;a do istniejącego projektu, bo znając życie to podczas wystąpienia i tak by coś nie zadziałało, albo nie wiedziałbym jak zwiększyć czcionkę w Idei ;) Dodatkowo miałem mikrofon, który musiałem trzymać w ręce, więc było by ciężko.&lt;br /&gt;
&lt;br /&gt;
Wnioski jakie z tego płyną, to:&lt;br /&gt;
- przygotowanie super przykładów, zajmuje wiele czasu - zbyt wiele&lt;br /&gt;
- przykłady nie muszą być super dopieszczone i powinny koncentrować się na głównym problemie, a nie dodatkowych aspektach wizualnych&lt;/div&gt;
&lt;div style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;
- lepiej skupić się na samej prezentacji - na &lt;a href=&quot;http://careercon.pl/&quot;&gt;careercon.pl&lt;/a&gt; miałem 5 dni na przygotowanie &lt;a href=&quot;http://www.slideshare.net/MarcinStachniuk/nowosci-w-javie-8-okiem-programisty&quot;&gt;prezentacji o Javie 8&lt;/a&gt; i się udało (może nie na takim poziomie jakbym sobie tego życzył, ale feedback nie był najgorszy)&lt;br /&gt;
&lt;br /&gt;
Dziękuję sponsorowi spotkania, firmie:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.itkontrakt.pl/&quot;&gt;&lt;img alt=&quot;IT Kontrakt&quot; border=&quot;0&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX3S0r2qpi7PWxFY1ZmW2fF3x9ikkfnD8QA8EE4DvfkgZJxh0KWwI8M0mRK1OA7aezdZMq-_QGjo86BynEGWjaxKdzFqcAZzQ6n0kfoF8zwMj7z6TXyFHQjiTCmtHpZkFE2lCAEdN91nB0/s400/logo_it_kontrakt.jpg&quot; title=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;za zapewnienie żłocistego napoju chłodzącego dla uczestników.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;Poniżej slajdy ze spotkania...&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/mIg8xNCQDJ8Nxz&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;425&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/MarcinStachniuk/liquibase-zarzdzanie-zmianami-w-relacyjnych-bazach-danych&quot; target=&quot;_blank&quot; title=&quot;Liquibase - Zarządzanie zmianami w relacyjnych bazach danych&quot;&gt;Liquibase - Zarządzanie zmianami w relacyjnych bazach danych&lt;/a&gt; &lt;/strong&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
... i kod z przykładów:&amp;nbsp;&lt;a href=&quot;https://github.com/mstachniuk/movies-database&quot; style=&quot;text-align: center;&quot;&gt;https://github.com/mstachniuk/movies-database&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;Wykład był też nagrywany, ale jego jakość może być wątpliwa, więc jeszcze nie wiem czy udostępnię.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;; font-size: 14px;&quot;&gt;Dziękuję wszystkim uczestnikom za udział i za pozytywny feedback. Widziałem, że pod koniec trochę już niedawaliście rady, ale jakoś dotrwaliście szcześliwie do końca. Wszelki dodatkowy feedback (zwłaszcza ten konstruktywno-krytyczny - co można na przyszłość ulepszyć), mile widziany!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A w najbliższym czasie ponownie się szykuję na &lt;/span&gt;&lt;a href=&quot;http://dbconf.pl/&quot; style=&quot;font-size: 14px;&quot;&gt;dbconf.pl&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt; i pewnie będzie pra premiera na WrocJUGu. Jakoś polubiłem tą konferencję, bo może nie jestem do końca typowym bazodanowcem, ale jako że konferencja odbywa się tym razem w Jurze Krakowsko-Częstochowskiej, to jest okazja zwiedzenia okolicy i pooddychania czyst[sz]ym powietrzem. Chcę również pokazać bazodanowcom, że po za bazami SQL (od firmy na O. lub I.) są też jeszcze ciekawe&amp;nbsp;rozwiązania.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Na koniec mały bonus zachęcający do robienia prezentacji&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/b_ATAIHOx8w&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/7127900494236405460/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/10/po-67-spotkaniu-wrocawskiego-juga.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/7127900494236405460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/7127900494236405460'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/10/po-67-spotkaniu-wrocawskiego-juga.html' title='Po 67 spotkaniu Wrocławskiego JUG&#39;a'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX3S0r2qpi7PWxFY1ZmW2fF3x9ikkfnD8QA8EE4DvfkgZJxh0KWwI8M0mRK1OA7aezdZMq-_QGjo86BynEGWjaxKdzFqcAZzQ6n0kfoF8zwMj7z6TXyFHQjiTCmtHpZkFE2lCAEdN91nB0/s72-c/logo_it_kontrakt.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-1252434258080768728</id><published>2015-07-15T22:38:00.000+02:00</published><updated>2015-07-16T08:53:31.372+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="confitura"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><title type='text'>Confitura 2015</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcXO6ZZ00v7OzHUixf99fmb_cbSmDtfIXx2gFCPYbvSgxneGDqoMR5Wj5tycffaxxWwK0pj2_Kf5Cxio6UbTbej3S-0XJQEVerf2Fv9qs1_R1K8TCrJAFnZirrP7HDC4WtypQhe6JwlYXg/s1600/10599493_928919990461690_5921479202869071105_n.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcXO6ZZ00v7OzHUixf99fmb_cbSmDtfIXx2gFCPYbvSgxneGDqoMR5Wj5tycffaxxWwK0pj2_Kf5Cxio6UbTbej3S-0XJQEVerf2Fv9qs1_R1K8TCrJAFnZirrP7HDC4WtypQhe6JwlYXg/s200/10599493_928919990461690_5921479202869071105_n.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&quot;Otwórz swój projekt albo daj mu umrzeć&quot;&lt;/b&gt;, Krzysztof Debski.&lt;br /&gt;
Był to keynote, w którym prelegent z Allegro opowiadał o tym, że warto otwierać swój kod, tj. wypuszczać go w open source. Krzysztof najpierw opisał jak to było, gdy nie dzielili się swoimi dokonaniami ze światem zewnętrznym. Tworzyli więc pewne rozwiązania, a po jakimś czasie okazywało się, że ktoś robił coś podobnego i lepszego. A jeszcze później trzeba było się zmigrować do innego rozwiązania.&lt;br /&gt;
&lt;br /&gt;
Natomiast, gdy jakiś projekt wychodził do open source’a, to nie dość, że inni zaczynają go używać, to i też rozwijać. A to strasznie przyspieszyło development danego rozwiązania. Nie trzeba oczywiście udostępniać wszystkiego (główny core biznesu można sobie zostawić), ale pewne rzeczy czasem warto upublicznić.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;Jak prezentować swoje pomysły przed ludźmi technicznymi i biznesem - rady od zwykłego programisty dla programisty&quot;&lt;/b&gt;, Sławomir Sobótka.&lt;br /&gt;
Nie widziałem w tym slocie nic lepszego dla siebie, więc poszedłem na „pewniaka”, czyli wystąpienie Sławka. Prezentację przejrzałem sobie wcześniej, wiedziałem czego się spodziewać, ale i tak było warto posłuchać i poznać parę wskazówek dla prelegentów.&lt;br /&gt;
&lt;br /&gt;
Ludzie nie chcą słuchać o innych ludziach, tylko o sobie. Powinniśmy podkreślać, że prezentacja jest dla nich i przykładowo nie mówić „ja zrobiłem to i to…”, tylko raczej powinniśmy pytać się publiki, jak ona by się zachowała, gdyby miała taki problem u siebie. Taka sztuczka sprawia, że słuchacze zaczynają myśleć o tym problemie i się z nim utożsamiać. Zyskujemy sobie wtedy zainteresowanie słuchaczy.&lt;br /&gt;
&lt;br /&gt;
Innym błędem, często popełnianym przez początkujących prezenterów, jest mówienie na początku wystąpienia, że są raczkujący w danym zagadnieniu, albo, że się nie przygotowali itd. Jest to spory błąd, bo od samego początku nastawia słuchaczy negatywnie do prelegenta. Można jedynie powiedzieć, że się przykładowo sepleni, ale nie powinno to wpłynąć na jakość prezentacji. Trzeba trochę z tego zażartować, aby rozluźnić atmosferę.&lt;br /&gt;
&lt;br /&gt;
Jest sporo poradników, jak robić prezentację, jak się przygotowywać, ale tak naprawdę to każdy musi wypracować sobie swój sposób. No i wiadomo, że prezentacje robione na kolanie dzień wcześniej nie mogą się udać.&lt;br /&gt;
&lt;br /&gt;
Przygotowania przygotowaniami, ale co z stresem przed widownią? Warto na pewno przyjść wcześniej, poczuć klimat sali, na spokojnie się rozłożyć i przyzwyczaić do otoczenia. A gdy pojawia się stres? Emocje są przez nas rozpoznawane w ciągu 0.3 s i mamy tylko 0.2 s na to, aby nazwać nasze uczucie i zlokalizować, z jaką częścią ciała jest to powiązane. Dzięki temu cukier będzie dopływał do kory przedczołowej, a nie do układu limbicznego.&lt;br /&gt;
&lt;br /&gt;
Sławka osobiście denerwuje, gdy prelegent zadaje pytanie publiczności i sam podnosi rękę do góry sugerując odpowiedź. Ja na to dotychczas nie zwróciłem uwagi i osobiście nie przeszkadza mi to. Dla mnie jest to sygnał, że pytanie nie jest retoryczne, że prelegent oczekuje odpowiedzi, a także sam korzysta z rzeczy, o które pyta. Dodatkowo może to trochę obudzić publiczność i zachęcić do interakcji.&lt;br /&gt;
&lt;br /&gt;
Na koniec Sławek zachęcał do nakręcenia video ze swojej prezentacji. Można to uczynić na większości polskich JUG’ów. Następnie należy je obejrzeć kilkakrotnie. Raz ogólnie, raz zwrócić uwagę na głos, kolejnym na reakcję ludzi, następnym na mowę ciała itd. Na koniec trzeba wyciągnąć wnioski i się poprawić.&lt;br /&gt;
&lt;br /&gt;
Slajdy z prezentacji można przejrzeć tutaj: &lt;a href=&quot;https://prezi.com/lwiqdtc1oe9u/jak-prezentowac-swoje-pomysy-przed-ludzmi-technicznymi-i-biznesem/&quot;&gt;https://prezi.com/lwiqdtc1oe9u/jak-prezentowac-swoje-pomysy-przed-ludzmi-technicznymi-i-biznesem/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;Are you aware of /bin of your JDK?&quot;&lt;/b&gt; Andrzej Grzesik&lt;br /&gt;
Na prezentację się chwilę spóźniłem, ale Andrzej ogólnie pokazywał narzędzia, jakie każdy ma w swoim JDK. Było o javac, javap, jps, jar, jmap, jhat, jstack (wypisuje stacktrace’y), jstat, jstatd (monitoring zdalnej maszyny).&lt;br /&gt;
&lt;br /&gt;
Większość tych narzędzi już widziałem w akcji. Nowy był dla mnie &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/technotes/tools/share/jhat.html&quot;&gt;jhat&lt;/a&gt;. Potrafi on wystawić serwer http i można za jego pomocą analizować to, co znajduje się na starcie naszego procesu javovego. Ponadto udostępnia on OQL - Object Query Language do wyszukiwania naszych obiektów na owej stercie.&lt;br /&gt;
&lt;br /&gt;
W nowym JDK 9 ma wejść nowe narzędzie jcmd, które ma zastąpić wszystkie te pozostałe narzędzia. Sensowne posunięcie, zwłaszcza, że część tych funkcjonalności powiela&amp;nbsp;się&amp;nbsp;między narzędziami. Na koniec było jeszcze o &lt;a href=&quot;https://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html&quot;&gt;Jvisualvm&lt;/a&gt; i plugine &lt;a href=&quot;http://www.oracle.com/technetwork/java/visualgc-136680.html&quot;&gt;visualgc&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;Need for async: In pursuit of scalable internet-scale applications&quot;,&amp;nbsp;&lt;/b&gt;Konrad `ktoso` Malawski&lt;br /&gt;
Konrad opowiadał o wielu kwestiach związanych z przetwarzaniem wielowątkowym. Było o Unfair scheduling’u, czyli gdy jakiś proces jest głodzony przez scheduler’a i jakie są sposoby radzenia sobie z tym, czyli o algorytmach nieblokujących. I tak &lt;a href=&quot;https://en.wikipedia.org/wiki/Non-blocking_algorithm#Lock-freedom&quot;&gt;Lock-free&lt;/a&gt; (inaczej Lock-freedom), jak mu się nie uda uzyskać lock’a to się cofa i próbuje jeszcze raz. &lt;a href=&quot;https://en.wikipedia.org/wiki/Non-blocking_algorithm#Wait-freedom&quot;&gt;Wait-free&lt;/a&gt; (albo Wait-freedom) dodatkowo wprowadza maksymalną liczbę prób, jakie może podjąć algorytm, aby uzyskać locka na potrzebnym zasobie.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze &lt;a href=&quot;https://en.wikipedia.org/wiki/Non-blocking_I/O_(Java)&quot;&gt;java nio&lt;/a&gt;, czyli o nowym sposobie dostępu do plików. Na poziomie systemu operacyjnego operacje wejścia / wyjścia są bardzo czasochłonne, ponieważ system musi się przełączyć pomiędzy user mode a kernel mode. I to się dzieje wielokrotnie podczas typowej pracy z plikami, a jak wiadomo to kosztuje czas i zasoby. Rozwiązaniem tej kwestii jest korzystanie z &lt;a href=&quot;https://en.wikipedia.org/wiki/Zero-copy&quot;&gt;Zero-copy&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze parę pobocznych tematów, ale podsumowując prelekcję, to powinniśmy wybierać narzędzia pod nasze problemy, a nie ze względu, że są na hype.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;Vert.x - wydajna i skalowalna platforma&quot;&lt;/b&gt;, Bartek Zdanowski&lt;br /&gt;
Bartek bardzo pobieżnie i marketingowo przedstawił narzędzie &lt;a href=&quot;http://vertx.io/&quot;&gt;Vert.x&lt;/a&gt; Posiada ono swoją szynę zdarzeń, za pomocą której przesyłamy zdarzenia, które następnie są wykonywane przez inną cześć aplikacji. Czyli możemy tworzyć aplikacje wielowątkowe. Dla mnie najciekawszy jest fakt, że z Vert.x’a można korzystać z Javy, Grooviego, Ruby jak i JavaScript’a. Jeszcze do końca tego nie pojmuję, jak to jest zbudowane, ale z prezentacji wynikało, że część serverowa, pisana np. w Groovym, może rzucić event’a, który zostanie obsłużony po stronie przeglądarki w JavaScripcie.&lt;br /&gt;
&lt;br /&gt;
Generalnie zabrakło mi trochę konkretnych przykładów, zamiast przymiotników, jaka to nie jest wspaniała technologia. Cała prezentacja chyba zrodziła więcej pytań i wątpliwości niż wyjaśnień, co było widać po ogromnej ilości pytań na koniec.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;Elasticsearch at Scale of Billions of Documents&lt;/b&gt;,&quot; Igor Kupczyński&lt;br /&gt;
Na tej prezentacji spodziewałem się doświadczeń i wniosków z napotkanych problemów z użyciem Elastic’a. Sam z niego ostatnio sporo korzystałem w projekcie, więc byłem w temacie.&lt;br /&gt;
&lt;br /&gt;
Igor sugerował, aby definiować &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;minimum_master_nodes=(n+1)/2,&lt;/span&gt; gdzie &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;n&lt;/span&gt; to [chyba] liczba wszystkich nodów w klastrze.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;discovery:
  zen:
    minimum_master_nodes: 2
&lt;/pre&gt;
&lt;br /&gt;
Nie powinniśmy również wykorzystywać Elastic’a jako nasze główne źródło prawdy, tylko powinniśmy przechowywać dane w innej bazie / bazach i je replikować do Elastica.&lt;br /&gt;
&lt;br /&gt;
Nie powinniśmy również pozwalać, na ponowne tworzenie utraconych shardów. Pozwoli to nam uniknąć niekonzystencji. Przykładowa konfiguracja dla 4ch nodów w klastrze:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;gateway:
  expected_data_nodes: 4
  recover_after_time: 48h
&lt;/pre&gt;
&lt;br /&gt;
Było też o tym jak przeprowadzać update’y oprogramowania lub sprzętu, aby klaster dalej działał. Cała procedura jest opisana na stronie Elastic’a pod hasłem: &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/guide/master/_rolling_restarts.html&quot;&gt;Rolling Restarts&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Dalej było o ustawieniach pamięci, której 50% powinniśmy ustawić dla JVM heap’a, a drugie tyle dla Lucynki. Powinniśmy jednak mieć mniej niż 32 GB pamięci operacyjnej ze względu na &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html&quot;&gt;compressed object pointers&lt;/a&gt;. Powinniśmy również tą pamięć zaalokować od razu na starcie:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;bootstrap:
  mlockall: true
&lt;/pre&gt;
&lt;br /&gt;
i sprawdzić, czy JVM nam na to rzeczywiście pozwala:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;curl -s $URL/_nodes/process?pretty | grep mlockall
&lt;/pre&gt;
&lt;br /&gt;
Było jeszcze o &lt;a href=&quot;http://igor.kupczynski.info/2015/04/06/fielddata.html&quot;&gt;Fielddata&lt;/a&gt;, garbage collector’ze i paru innych tematach. Powinniśmy raczej obserwować nasz klaster, a nie go stroić, co radzą również twórcy tego rozwiązania. Do monitoringu Igor polecał m.in. &lt;a href=&quot;https://github.com/lmenezes/elasticsearch-kopf&quot;&gt;Kopf&lt;/a&gt;, &lt;a href=&quot;http://www.elastichq.org/&quot;&gt;Elastic HQ&lt;/a&gt;, &lt;a href=&quot;http://bigdesk.org/&quot;&gt;Bigdesk&lt;/a&gt; i pluginy do &lt;a href=&quot;https://www.nagios.org/&quot;&gt;Nagios’a&lt;/a&gt;. Spis tego typu narzędzi możemy znaleźć na oficjalnej stronie: &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/client/community/current/health.html&quot;&gt;Health and Performance Monitoring&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Wykład fajny, ale wolałbym go usłyszeć po polsku. Slajdy są dostępne tutaj: &lt;a href=&quot;http://igor.kupczynski.info/t/2015-05-05-jug-elasticsearch-in-production/slides.html&quot;&gt;ELASTICSEARCH IN PRODUCTION&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&quot;Czego Javowiec nauczy się od Haskella?&quot;,&lt;/b&gt; Tomasz Nurkiewicz&lt;br /&gt;
Najlepszy, wg mnie, wykład został na koniec. Nie dotyczył on co prawda jakiejś konkretnej przełomowej technologii, ale zmieniał trochę światopogląd na nasz sposób programowania i wywracał myślenie do góry nogami. O dziwo na prezentacji nie było kodu &lt;a href=&quot;https://www.haskell.org/&quot;&gt;Haskell’a&lt;/a&gt;, a chodziło o pewne koncepty z tego języka, a właściwie to, czego tam nie ma: null, zmienne, wyjątki, void, Object, pętle, przeciążanie metod, efekty uboczne. Tylko jak bez tego wszystkiego żyć? A no da się.&lt;br /&gt;
&lt;br /&gt;
W Haskelu już na podstawie definicji funkcji, można wywnioskować, jaka jest jej implementacja. Bardzo często mamy jedną możliwość implementacji takiej funkcji. Dlatego powstało &lt;a href=&quot;https://www.haskell.org/hoogle/&quot;&gt;Hoogle&lt;/a&gt;, czyli takie Google dla Haskella do wyszukiwania funkcji na podstawie sygnatury. W IntelliJ’u jest to zdefiniowane jako Structural Search &lt;b&gt;Ctrl + Shift + S&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
I tak, jak Java w tym roku obchodziła 20-lecie, tak &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;null&lt;/span&gt; obchodził 50-lecie. Ile to katastrof z tego faktu wynikło… W Javie i Scali mamy niby teraz &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Optional&lt;/span&gt;, ale i tak może ono być null’em:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;Optional&amp;lt;String&amp;gt; name = null;&lt;/pre&gt;
&lt;br /&gt;
albo jeszcze lepiej:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;Optional&amp;lt;String&amp;gt; name = Optional.of(null);
&lt;/pre&gt;
&lt;br /&gt;
więc to tak naprawdę niczego nie rozwiązuje. A w Haskellu tak się (podobno) nie da. Tomek pokazywał przykład w &lt;a href=&quot;http://kotlinlang.org/&quot;&gt;Kotlin’ie&lt;/a&gt;, jak on nam uniemożliwia wykonanie kodu, który jest niebezpieczny pod względem null pointerów. &lt;a href=&quot;https://www.youtube.com/watch?v=pyrH7b0zHwU&quot;&gt;A propo de facto&lt;/a&gt;, czy my w ogóle mamy w Javie wskaźniki?&lt;br /&gt;
&lt;br /&gt;
Dalej Tomek podawał przykłady aplikacji, które nie zmieniają stanu, a jedynie tworzą nowe, z ewentualnymi referencjami do poprzednich stanów. I tak przykładowo działa Git, gdzie każdy commit to nowe pliki + wskazanie ma poprzedni commit. Baza danych &lt;a href=&quot;http://www.datomic.com/&quot;&gt;Datomic&lt;/a&gt; została napisana w &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; i posiada ona tylko jedną zmienną. Nie można w niej edytować danych - baza trzyma całą historię zmian.&lt;br /&gt;
&lt;br /&gt;
I ostatnia rzecz, która wywarła na mnie ogromne wrażenie, to eksperyment &lt;a href=&quot;https://pl.wikipedia.org/wiki/John_Carmack&quot;&gt;John&#39;a Carmack&#39;a&lt;/a&gt;, twórcy Wolfenstein&#39;a 3D, Doom&#39;a i Quake&#39;a, który przepisał pierwszy tytuł do Haskella, czyniąc go czysto funkcyjnym. Pomysł ten mnie zniszczył w pierwszej chwili i dał sporo do myślenia. Myślę, że to świetna metoda nauki. Pozatym kod tych produkcji jest w całości dostępny na githubie: &lt;a href=&quot;http://github.com/id-Software&quot;&gt;github.com/id-Software&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;Podsumowując, Confitura w tym roku była na pewno lepiej zorganizowana (mniejsze kolejki do rejestracji), była walka o wejściówki (ale się udało), a napoi chłodzących było pod dostatkiem w ten upalny dzień. Co do agendy, to mam wrażenie, jakby poza ścisłą, oczywistą, polską czołówką prelegentów, dostało się sporo prezentacji z przypadku. Albo takich, co już były. No ale cóż, taka była wola ludu.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/1252434258080768728/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/confitura-2015.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1252434258080768728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1252434258080768728'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/confitura-2015.html' title='Confitura 2015'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcXO6ZZ00v7OzHUixf99fmb_cbSmDtfIXx2gFCPYbvSgxneGDqoMR5Wj5tycffaxxWwK0pj2_Kf5Cxio6UbTbej3S-0XJQEVerf2Fv9qs1_R1K8TCrJAFnZirrP7HDC4WtypQhe6JwlYXg/s72-c/10599493_928919990461690_5921479202869071105_n.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-8148349334871846743</id><published>2015-07-01T23:15:00.000+02:00</published><updated>2015-07-01T23:15:38.960+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devoxx"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><title type='text'>Devoxx w Polsce - dzień 3 ostatni</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh537c45d3u7NkQOQAMEoD9a4WXOwQEZJ1uo6MN1nWFT1ksOFr6IfsufOQJemnoKRYF6VrZB_6sLlRN5MwEj_urLIuOOxVdVYEBLVxoPcn5QG9ZsD24JJ5NMlJtZp6SpJ82xwpawOkElNSS/s1600/Devoxx_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;109&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh537c45d3u7NkQOQAMEoD9a4WXOwQEZJ1uo6MN1nWFT1ksOFr6IfsufOQJemnoKRYF6VrZB_6sLlRN5MwEj_urLIuOOxVdVYEBLVxoPcn5QG9ZsD24JJ5NMlJtZp6SpJ82xwpawOkElNSS/s320/Devoxx_logo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;Trzeci dzień Devoxxa zacząłem do prezentacji Christophera Batey’a: &quot;Building fault tolerant microservices&quot;. Dopiero po jakimś czasie się zorientowałem, że już gdzieś to widziałem… I fakt byłem na tej prezentacji na &lt;a href=&quot;http://mstachniuk.blogspot.com/2015/02/voxxed-days-vienna-15.html&quot;&gt;Voxxed Days Vienna 15&lt;/a&gt;.&amp;nbsp;A specjalnie przed pójściem sprawdzałem na blogu, czy to nazwisko nie jest mi znane, ale coś mi poszło nie tak :( &lt;br /&gt;
&lt;br /&gt;
Nie będę opisywał wszystkich praktyk i narzędzi z których korzysta prelegent, tylko zmieszczę jego przykładowe projekty:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chbatey/spring-cloud-example&quot;&gt;https://github.com/chbatey/spring-cloud-example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chbatey/vagrant-cassandra-spark&quot;&gt;https://github.com/chbatey/vagrant-cassandra-spark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chbatey/dropwizard-hystrix&quot;&gt;https://github.com/chbatey/dropwizard-hystrix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Z ciekawostek, to w Spring Boot’cie można za pomocą &lt;a href=&quot;https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica&quot;&gt;hystrix-javanica&lt;/a&gt;&amp;nbsp;skorzystać z adnotacji &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;@HystrixCommand&lt;/span&gt; i możemy metody opakowywać w komendy Hystixowe, bez całej ceremonii. &lt;br /&gt;
&lt;br /&gt;
Na koniec było jeszcze jak sprzedawać takie zabawki biznesowi. Trzeba zrobić &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;if&lt;/span&gt;’a w kodzie, który będzie odciążał nasz system w ciężkich chwilach i podpiąć guzik do tego. Jak będzie duże obciążenie i ktoś będzie  do nas dzwonił, to musimy kazać mu wcisnąć przygotowany guzik i odciążyć serwery. Jak się będzie to powtarzać to w którymś momencie biznes się zapyta, czy nie da się tego zautomatyzować i wtedy wprowadzamy potrzebne zabawki. &lt;br /&gt;
&lt;br /&gt;
Kolejną prezentacją, na którą się udałem była Pawła Szulca na temat: &quot;Event Sourcing &amp;amp; Functional Programming - a pair made in heaven&quot;. Był mały problem z kodem, który na części slajdów był niepokolorowany i zapisanym małą czcionką. Prelegent polecał przeczytanie publikacji &lt;a href=&quot;http://comjnl.oxfordjournals.org/content/32/2/98.full.pdf&quot;&gt;Why Functional Programming Matters&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Następnie Paweł tłumaczył jak działają monady, na co zeszło dużo czasu. Później było na temat Event Sourcing’u, czyli to o czym zawsze Greg Young opowiada. Na koniec pozostało 20 minut czasu na demo. Było ciekawe, bo „opowiadało” fabułę filmu. Prezentacja była dobra, trzymająca poziom. Więcej kodu następnym razem proszę. &lt;br /&gt;
&lt;br /&gt;
Następnie byłem na 15sto minutówce, gdzie Roy van Rijn opowiadał o REPL’u w Javie 9: &quot;Watch out, the REPL is coming&quot;. Była to prezentacja zgłoszona dzień wcześniej i na kolacji ze speakerami była jeszcze łatana przez speców z Oracle’a. Dali radę, bo na demo wszystko zadziałało. Jest to jeszcze wczesny development, więc jest jeszcze sporo błędów, które mogliśmy zobaczyć pod koniec wystąpienia. Jak na prezentację przygotowaną na spontanie to poszła bardzo fajnie. &lt;br /&gt;
&lt;br /&gt;
Następnie byłem na prezentacji Grega Young’a: &quot;8 Lines of Code&quot;. Greg pokazał parę wywołań, które w skrajnych przypadkach mogą powodować jakieś problemy, np: &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;FileStream.Flush()&lt;/span&gt;, &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;FileStream.Seek()&lt;/span&gt;. Nie powinniśmy ponadto tworzyć nieograniczonych kolejek i w momencie zaczynania projektu powinniśmy się zastanowić, jak będziemy chcieli debugować problemy na produkcji. Warto sobie w logach wypisywać wszystkie zmienne środowiskowe, aby można było odtworzyć środowisko, gdzie występuje błąd. Najciekawszych problemów wielowątkowych i tak nie jesteśmy w stanie debugować :( &lt;br /&gt;
&lt;br /&gt;
Kolejną prezentacją na którą się udałem była Teda Newarda: &quot;Busy Java Developer’s Guide to Three REST API Frameworks&quot;. Na początek Ted powiedział: „Chrząszcz brzmi w trzcinie” :) &lt;br /&gt;
&lt;br /&gt;
Ted przedstawił 4 różne frameworki. Na pierwszy ogień poszedł &lt;a href=&quot;http://sparkjava.com/&quot;&gt;SparkJava&lt;/a&gt;&amp;nbsp;(nie mylić z Apache Spark). Jest on inspirowany &lt;a href=&quot;http://www.sinatrarb.com/&quot;&gt;Sinatrą&lt;/a&gt;&amp;nbsp;ze świata Rubyiego. Wygląda on na bardzo małe i proste rozwiązanie, gdzie wiele składni Javy 8 jest wykorzystywane. Hello World: &lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;import static spark.Spark.*;

public class HelloWorld {
    public static void main(String[] args) {
        get(&quot;/hello&quot;, (req, res) -&amp;gt; &quot;Hello World&quot;);
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Rozwiązanie to pozwala zarządzać sesją tak jak kontenery servletów. Rozwiązanie na pewno przydatne do małych rozwiązań i testów. &lt;br /&gt;
&lt;br /&gt;
Następnie na tapetę poszedł &lt;a href=&quot;http://vertx.io/&quot;&gt;Vert.x&lt;/a&gt;.&amp;nbsp;Bazuje on na JVM, ale można z niego korzystać w Javie, JavaScripcie, Groovym i Rubym. Nie wiem jak to jest technicznie rozwiązane, ale brzmi bardzo ciekawie. Model współbieżności jest oparty na Aktorach i ma rozproszoną szynę zdarzeń. Dalej było parę przykładów jak wygląda kod dla różnych języków. Dla Javy poniżej: &lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -&amp;gt; {
      req.response()
        .putHeader(&quot;content-type&quot;, &quot;text/plain&quot;)
        .end(&quot;Hello from Vert.x!&quot;);
    }).listen(8080);
  }
}
&lt;/pre&gt;
&lt;br /&gt;
Tworzenie współbieżnego kodu z Vert.x jest łatwe ze względu na pewne założenia. Kod który tworzymy jest jednowątkowy i każdy moduł (jakkolwiek go definiujemy) ma osobną pętlę z event’ami, która się nie blokuje. &lt;br /&gt;
&lt;br /&gt;
Kolejny był &lt;a href=&quot;http://www.dropwizard.io/&quot;&gt;DropWizard&lt;/a&gt;.&amp;nbsp;Jest to już trochę większy kombajn, który ma zintegrowane wiele bibliotek Javowych w sobie, aby można go było szybko wdrożyć na produkcję. Trochę jak Spring Boot. DropWizard ma wbudowanego &lt;a href=&quot;http://www.eclipse.org/jetty/&quot;&gt;Jetty’iego&lt;/a&gt;, korzysta z &lt;a href=&quot;http://jersey.java.net/&quot;&gt;Jersey&#39;a&lt;/a&gt;&amp;nbsp;do RESTa, &lt;a href=&quot;http://wiki.fasterxml.com/JacksonHome&quot;&gt;Jackson’a&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://metrics.codahale.com/&quot;&gt;Metrics&lt;/a&gt;&amp;nbsp;do zbierania statyskych z różnych części aplikacji, &lt;a href=&quot;http://code.google.com/p/guava-libraries/&quot;&gt;Guava&lt;/a&gt;, &lt;a href=&quot;http://logback.qos.ch/&quot;&gt;Logback&lt;/a&gt;, &lt;a href=&quot;http://www.hibernate.org/subprojects/validator.html&quot;&gt;Hibernate Validator&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.jdbi.org/&quot;&gt;JDBI&lt;/a&gt;&amp;nbsp;dla połączenia z bazą danych, &lt;a href=&quot;http://www.liquibase.org/&quot;&gt;Liquibase&lt;/a&gt;&amp;nbsp;dla wersjonowania bazy, &lt;a href=&quot;http://freemarker.sourceforge.net/&quot;&gt;Freemarker&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://mustache.github.io/&quot;&gt;Mustache&lt;/a&gt;&amp;nbsp;dla frontendu, &lt;a href=&quot;http://joda-time.sourceforge.net/&quot;&gt;Joda Time&lt;/a&gt;&amp;nbsp;i pewnie jeszcze wiele innych. I całość opędzona mavenem. Przykładowy kod poniżej: &lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class HelloWorldApplication extends Application&lt;helloworldconfiguration&gt; {
    public static void main(String[] args) throws Exception {
        new HelloWorldApplication().run(args);
    }

    @Override
    public String getName() {
        return &quot;hello-world&quot;;
    }&lt;helloworldconfiguration&gt;

}
&lt;/helloworldconfiguration&gt;&lt;/helloworldconfiguration&gt;&lt;/pre&gt;
&lt;br /&gt;
Jako wynik dostajemy dużego JARa, którego odpalamy i działa. Możemy jako argument przekazać plik konfiguracyjny do aplikacji. Wygląda na całkiem ciekawy stos. &lt;br /&gt;
&lt;br /&gt;
Ostatnim zaprezentowanym narzędziem był &lt;a href=&quot;http://restx.io/&quot;&gt;RestX&lt;/a&gt;, czyli lekki, modułowy, szybki… To co dostajemy to samoaktualizujący się shell, wstrzykiwanie zależności, wsparcie dla MongoDB, interaktywna dokumentacja RESTa, automatyczne testy, konsola admina. Konkretne endpoint’y RESTowe można generować w stylu testów BDD (&lt;a href=&quot;http://restx.io/docs/generated-app-explained.html#toc4&quot;&gt;Resource Spec&lt;/a&gt;) albo małych klass: &lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;@Component @RestxResource
public class HelloResource {
    @GET(&quot;/message&quot;)
    public Message sayHello(String who) {
        return new Message().setMessage(String.format(
                &quot;hello %s, it&#39;s %s&quot;,
                who, DateTime.now().toString(&quot;HH:mm:ss&quot;)));
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Po wystartowaniu otrzymujemy od razu dokumentację naszego API, konsolę admina i coś do monitorowania. Generalnie projekt zawiera w sobie DropWizard’a, wszystkie komponenty są bezstanowymi singletonami, architektura jest mocno zmodularyzowana i dev mode wspiera hot-recompile kodu źródłowego.  &lt;br /&gt;
&lt;br /&gt;
Na koniec było podsumowanie, że żaden framework nie jest najlepszy, tylko że każdy jest inny - i w sumie racja. &lt;br /&gt;
&lt;br /&gt;
Na koniec całej konferencji zostało motywujące wystąpienie Jurgen Appelo o &quot;The Creative Networker&quot;. Jurgen tłumaczył pewien wykres: &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLJo8DP6GHQM98qGMYRKOMQb1FmKG3rMz2E7BBZsw4XHXJJJ_LrAtfMOC5egsLyqq45CjVOdDuH2h22pTtfmXtkrzXVwyBKkrzei-5xUttY3XRjZaCjfJzuIIPlZ5olTHid0k-5zW1bbAw/s1600/Jurgen_wykres.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLJo8DP6GHQM98qGMYRKOMQb1FmKG3rMz2E7BBZsw4XHXJJJ_LrAtfMOC5egsLyqq45CjVOdDuH2h22pTtfmXtkrzXVwyBKkrzei-5xUttY3XRjZaCjfJzuIIPlZ5olTHid0k-5zW1bbAw/s400/Jurgen_wykres.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Wynika z niego bardzo wiele, a mianowicie, najwięcej uczymy się podczas eksperymentowania. W przypadku popełniania, błędów uczymy się nie wiele, ale nie powinniśmy się tym przejmować. W przypadku praktyk (czyli produkcji masowej), już nie wiele jest nauki, ale za to duży sukces. Zawsze świętujemy sukcesy (a w Polsce pijemy również przy porażkach), ale często nie świętujemy naszych eksperymentów - a powinniśmy. &lt;br /&gt;
&lt;br /&gt;
Prelegent przedstawił siedem zasad dla kreatywnych: &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Szukanie wielu pomysłów - najpierw powinniśmy zbierać jak najwięcej pomysłów&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Generowanie wielu pomysłów - później je jeszcze generować w myśl zasady: &quot;The best way to have a good idea is to have a lot of ideas&quot; - &lt;a href=&quot;https://pl.wikipedia.org/wiki/Linus_Pauling&quot;&gt;Linus Pauling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tworzenie połączeń - musimy naszym pomysłem podzielić się z innymi i wzajemnie się inspirować&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Poszukiwanie kierunku - mindfulness i unfocus są najlepsze dla kreatywności&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Wykonanie pomysłu - trzeba wizję zrealizować&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Zrozumieć błędy - i wynieść naukę na przyszłość&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Uczyć się na porażkach - w końcu wiele wynalazków powstało przez przypadek&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAbZjlA51VBx2u1G2K5q9Hu9MDh4hcKXmxpq5sg6s2-mupNrdn4RF3RbBW6tsOtGp070kPXLqutRfxNoP1QnWBSL0x5ry2x48dTGhga1zX6GwkpfYSMe31_t9fateNIpUxpJQhTlCbAmMe/s1600/seven_rules.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAbZjlA51VBx2u1G2K5q9Hu9MDh4hcKXmxpq5sg6s2-mupNrdn4RF3RbBW6tsOtGp070kPXLqutRfxNoP1QnWBSL0x5ry2x48dTGhga1zX6GwkpfYSMe31_t9fateNIpUxpJQhTlCbAmMe/s640/seven_rules.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh537c45d3u7NkQOQAMEoD9a4WXOwQEZJ1uo6MN1nWFT1ksOFr6IfsufOQJemnoKRYF6VrZB_6sLlRN5MwEj_urLIuOOxVdVYEBLVxoPcn5QG9ZsD24JJ5NMlJtZp6SpJ82xwpawOkElNSS/s1600/Devoxx_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
Omawiane techniki i praktyki nie są jakimś dużym wymysłem prelegenta, a raczej wnioskami z wielu książek i notatek. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4SEsvK3QctOtW7q8jp4OjEMly3DM9QHK4vy4Cj80iMCVaM_iVyo_4nE8ykbcvihwGweqKWA97GGSEXVvgBD4ZE_0Mvo-sJEnUdrfp-05iVelq_I7CxJCKKwglkI1XmjJXiFTJoIqty4nx/s1600/Jurgen_ksiazki.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4SEsvK3QctOtW7q8jp4OjEMly3DM9QHK4vy4Cj80iMCVaM_iVyo_4nE8ykbcvihwGweqKWA97GGSEXVvgBD4ZE_0Mvo-sJEnUdrfp-05iVelq_I7CxJCKKwglkI1XmjJXiFTJoIqty4nx/s640/Jurgen_ksiazki.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
Na koniec była jeszcze reklama książki Jurgena: &lt;a href=&quot;http://www.management30.com/&quot;&gt;Management 3.0&lt;/a&gt;.&amp;nbsp;Był to bardzo motywujący wykład na koniec konferencji, bardzo motywujący do testowania swoich pomysłów i inspirujący do próbowania ze startup’ami.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze krótkie zakończenie konferencji, gdzie można było zobaczyć wszystkich organizatorów i wolontariuszy. Podsumowując 3 dni, to organizacyjnie konferencja była bardzo dobrze ogarnięta. Super miejsce na tak dużą konferencję, dobre nagłośnienie, rzutniki i jedzenie. Trochę brakowało ciastek w przerwach, aby dostarczyć cukru do kory przedczołowej, ale napojów było pod dostatkiem. Trochę mi zabrakło prezentacji najwyższych lotów, które by wywracały aktualne postrzeganie świata o 180 stopni. Mogło by być również więcej tych dobrych, albo ja trafiałem na wiele przeciętnych. Na pewno będę musiał jeszcze sporo prezentacji obejrzeć, jak będą dostępne. </content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/8148349334871846743/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/devoxx-w-polsce-dzien-3-ostatni.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/8148349334871846743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/8148349334871846743'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/devoxx-w-polsce-dzien-3-ostatni.html' title='Devoxx w Polsce - dzień 3 ostatni'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh537c45d3u7NkQOQAMEoD9a4WXOwQEZJ1uo6MN1nWFT1ksOFr6IfsufOQJemnoKRYF6VrZB_6sLlRN5MwEj_urLIuOOxVdVYEBLVxoPcn5QG9ZsD24JJ5NMlJtZp6SpJ82xwpawOkElNSS/s72-c/Devoxx_logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-3245529493014228191</id><published>2015-07-01T23:08:00.000+02:00</published><updated>2015-07-01T23:08:31.434+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devoxx"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><title type='text'>Devoxx w Polsce - dzień 2</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_6NFyg-ctrqIQqhgnVO9MEfMrZCSdHkqUS4wpzWQQeY3_KXbA5U4LScze9lPMRcJ0FVbDGQcQZX4Uw0bdG7Wvvekgh9jvBopIR7JuIELsDfjNuQaXraYzMEh9QtrCIPTo2yvsqkG1msl/s1600/Devoxx_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;109&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_6NFyg-ctrqIQqhgnVO9MEfMrZCSdHkqUS4wpzWQQeY3_KXbA5U4LScze9lPMRcJ0FVbDGQcQZX4Uw0bdG7Wvvekgh9jvBopIR7JuIELsDfjNuQaXraYzMEh9QtrCIPTo2yvsqkG1msl/s320/Devoxx_logo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;Drugi dzień zaczął się dla mnie kiepsko. Byłem najpierw na &quot;Why software developers should care about deployment and monitoring&quot;, Michała Kosmulskiego, który tłumaczył bardzo podstawowe rzeczy. Poszedłem więc na &quot;Case Study: Agile @gov.pl&quot;, Matta Harasymczuka, ale tam zamiast o Agile w sektorze rządowym było o podstawach Agile. Skoro prelegent ma tylko 5 minut, aby zachęcić publikę do swojej prezentacji, to tutaj czas ten został ewidentnie źle wykorzystany.&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
Ostatecznie poszedłem na &quot;Building systems that are #neverdone&quot;, Jamesa Lewisa. Było ogólnie o zasadach &lt;a href=&quot;https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it&quot;&gt;YAGNI&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://pl.wikipedia.org/wiki/DRY&quot;&gt;DRY&lt;/a&gt;, &lt;a href=&quot;https://pl.wikipedia.org/wiki/Test-driven_development&quot;&gt;TDD&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Single_responsibility_principle&quot;&gt;SRP&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/KISS_principle&quot;&gt;KISS&lt;/a&gt;… Nic konkretnego, już Wujek Bob i inni powiedzieli to 100 razy. Jedyne co to biblioteka &lt;a href=&quot;https://github.com/realestate-com-au/pact&quot;&gt;Pact&lt;/a&gt;&amp;nbsp;się przewinęła po raz drugi na konferencji. &lt;br /&gt;
&lt;br /&gt;
Następnie udałem się na wykład Tomka Nurkiewicza pt.: &quot;Hystrix – managing failures in distributed systems&quot;. Jest to biblioteka od Netflix’a, który obecnie generuje sporo ruchu internetowego. A sam Hystrix jest implementacją wzorca &lt;a href=&quot;https://en.wikipedia.org/wiki/Fail-fast&quot;&gt;Fail Fast&lt;/a&gt;.&amp;nbsp;Chodzi o to, że w rozproszonych systemach (np. modne ostatnio wszem i wobec mikroserwisy) czasem część usług może ulec awarii. Jakiś serwis / część systemu może być pod dużym obciążeniem, chwilowo niedostępna, lub odpowiada dopiero po długim czasie. Zamiast próbować taką usługę ciągle odpytywać (i robić jej DoS’a) to może lepiej jest się wstrzymać z zapytaniami i od razu propagować błędną odpowiedź w systemie, albo jakoś inaczej na nią reagować. Podejście takie powoduje, że szybciej mamy informację, że coś nie działa. Dodatkowo jak odciążymy daną usługę, to jest szansa, że się ona naprawi, tzn. skończy przetwarzać zaległe zadania i będzie można z niej ponownie skorzystać. System wtedy jest w stanie samemu się wyleczyć. &lt;br /&gt;
&lt;br /&gt;
Jak działa Hystrix? Mianowicie każde wywołanie, które może się nie udać, opakowujemy w &lt;a href=&quot;https://netflix.github.io/Hystrix/javadoc/com/netflix/hystrix/HystrixCommand.html&quot;&gt;HystrixCommand&lt;/a&gt;.&amp;nbsp;Po wywołaniu metody &lt;a href=&quot;https://netflix.github.io/Hystrix/javadoc/com/netflix/hystrix/HystrixCommand.html#execute()&quot;&gt;execute()&lt;/a&gt; zostanie zwrócona wartość tego co zostało opakowane. Gdy serwis nie odpowiada dłużej niż 1 sekunda (oczywiście można to zmienić), to zostanie zwrócona wartość błędu (Fallback), którą możemy sobie zdefiniować (domyślnie &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;UnsupportedOperationException&lt;/span&gt;). Domyślnie każda komenda (tzn. tego samego typu) posiada pulę wątków ustawioną na 10. Według twórców Hystrixa nie potrzeba więcej. &lt;br /&gt;
&lt;br /&gt;
Oczywiście mamy też większą możliwość konfiguracji zachowania, np. przy jakim procencie błędnych odpowiedzi, albo przy jakiej minimalnej liczbie błędnych request’ów, w danym oknie czasowym nie męczyć więcej zewnętrznej usługi.
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;static class CircuitBreakingDownloadCommand extends HystrixCommand&lt;string&gt; {

 protected CircuitBreakingDownloadCommand() {
  super(
    Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(&quot;Download&quot;))
          .andCommandKey(HystrixCommandKey.Factory.asKey(&quot;SomeCommand&quot;))
          .andThreadPoolPropertiesDefaults(
             HystrixThreadPoolProperties.Setter()
                .withMetricsRollingStatisticalWindowInMilliseconds(10_000))
          .andCommandPropertiesDefaults(
             HystrixCommandProperties.Setter()
                .withCircuitBreakerEnabled(true)
                .withCircuitBreakerErrorThresholdPercentage(50)
                .withCircuitBreakerRequestVolumeThreshold(20)
                .withCircuitBreakerSleepWindowInMilliseconds(5_000))
        );
    }
}
&lt;/string&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Kod z &lt;a href=&quot;https://github.com/nurkiewicz/hystrix-demo/blob/fcb0c7c48152fcfba7beab483c28b1bcedf58c7e/src/test/groovy/com/nurkiewicz/hystrix/H30_Circuit_breaker.groovy&quot;&gt;repozytorium Tomka&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
Hystrix oferuje jeszcze domyślny servlet, który generuje strumień statystyk odnośnie każdego rodzaju Hystrix’owej komendy. Widać go standardowo pod &lt;i&gt;/hystrix.stream&lt;/i&gt; i maksymalnie 5 klientów może się pod niego podłączyć. W ładny sposób są te dane wizualizowane za pomocą &lt;a href=&quot;https://github.com/Netflix/Hystrix/tree/master/hystrix-dashboard&quot;&gt;Hystrix Dashboard&lt;/a&gt;.&amp;nbsp;Gdy chcemy na naszej &quot;desce rozdzielczej&quot; widzieć informacje z wielu miejsc, to za pomocą &lt;a href=&quot;https://github.com/Netflix/Turbine/wiki&quot;&gt;Turbine&lt;/a&gt;&amp;nbsp;możemy połączyć wiele strumieni w jeden i pod niego podłączyć dashboard. Przykładowy wygląd poniżej: &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdYcOUbiKwlLNofTVOzi0QG3cDLetkOolGNUdnWI3URGQj7QXHw8-_Gu5dmzhz1lvKZ1zWkMjtkGelVscxY8RA_Thcu_qhyuErnOZBYzJ318BbMRi1dtri2HdyWLqIlXEXA8dmRugC89-n/s1600/NetflixDashTurbine.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;410&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdYcOUbiKwlLNofTVOzi0QG3cDLetkOolGNUdnWI3URGQj7QXHw8-_Gu5dmzhz1lvKZ1zWkMjtkGelVscxY8RA_Thcu_qhyuErnOZBYzJ318BbMRi1dtri2HdyWLqIlXEXA8dmRugC89-n/s640/NetflixDashTurbine.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Źródło:&amp;nbsp;&lt;a href=&quot;https://github.com/Netflix/Turbine/wiki&quot;&gt;https://github.com/Netflix/Turbine/wiki&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Możemy również zapisywać sobie te statystyki i ładnie wyświetlać w &lt;a href=&quot;http://graphite.wikidot.com/start&quot;&gt;Graphite&lt;/a&gt;. Dokładny opis jak tego dokonać znajdziemy na &lt;a href=&quot;http://www.nurkiewicz.com/2015/02/storing-months-of-historical-metrics.html&quot;&gt;blogu Tomka&lt;/a&gt;.&amp;nbsp;Było jeszcze omawiane pobieżnie parę zagadnień, ale czas już gonił. Z ciekawostek to jeszcze było o &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)&quot;&gt;Executors.newFixedThreadPool()&lt;/a&gt;, które to są niebezpieczne w środowisku EE, bo wrzucają wątki do kolejki, która jest nieskończona. Może to się zakończyć błędem &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;OutOfMemory&lt;/span&gt; i to nie koniecznie w tym miejscu. &lt;br /&gt;
&lt;br /&gt;
Z ciekawych trików, to Tomek jeszcze korzystał z &lt;b&gt;Ctrl + C&lt;/b&gt; do zaznaczania całej linii w IntelliJ-u. Dobre na prezentacje. I jeszcze korzystał z &lt;a href=&quot;http://httpd.apache.org/docs/2.2/programs/ab.html&quot;&gt;Apache Bench&lt;/a&gt;.&amp;nbsp;Jest to odpowiednik &lt;a href=&quot;https://jmeter.apache.org/&quot;&gt;JMeter’a&lt;/a&gt;, ale działa w linii komand i jest dołączony (i był stworzony) do serwera Apache httpd. Przykładowy kod z prezentacji jest dostępny na githubie: &lt;a href=&quot;https://github.com/nurkiewicz/hystrix-demo&quot;&gt;nurkiewicz/hystrix-demo&lt;/a&gt;,&amp;nbsp;a prezentację (i to po polsku) można obejrzeć na kanale Warszawskiego JUGa: &lt;a href=&quot;https://www.youtube.com/watch?v=RpfQ8AHwEvg&quot;&gt;WJUG #161&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Następnie udałem się na prezentację programisty z Elastic’a, David Pilato na temat: &quot;Make sense of your (BIG) data!&quot;. Akcent francuski i żarty z których siał się tylko prowadzący były straszne, ale prelegent nie okazał się kompletnym francuskim ignorantem. Na koniec nawet próbował powiedzieć coś po polsku. &lt;br /&gt;
&lt;br /&gt;
Na początku prezentacji było o tym jak dużo danych generujemy każdego dnia. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlHtnkh-ap5aaLhSVFMUokb-KEMR8OSAhXop-0KKLnFF3iVope-kq13QTSOD5pm6QkaGAcBSC8HGGS4VWxzSPVkWG_WpjugV9o2SV4ZAkrq-jJGo6FxXoKOuOGYTx_-sa2-fh6lVbOMxhT/s1600/DataNeverSleeps_2.0_v2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlHtnkh-ap5aaLhSVFMUokb-KEMR8OSAhXop-0KKLnFF3iVope-kq13QTSOD5pm6QkaGAcBSC8HGGS4VWxzSPVkWG_WpjugV9o2SV4ZAkrq-jJGo6FxXoKOuOGYTx_-sa2-fh6lVbOMxhT/s400/DataNeverSleeps_2.0_v2.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Źródło &lt;a href=&quot;https://www.domo.com/learn/data-never-sleeps-2&quot;&gt;https://www.domo.com/learn/data-never-sleeps-2&lt;/a&gt; &lt;/div&gt;
&lt;br /&gt;
Następnie prelegent pokazał, jak można budować przykładowe zapytania w &lt;a href=&quot;https://www.elastic.co/&quot;&gt;Elastic’u&lt;/a&gt;&amp;nbsp;(dawniej ElasticSearch) i skupił się na aggregacjach. Pokazał jak wygląda &lt;a href=&quot;https://www.elastic.co/products/marvel&quot;&gt;Marvel&lt;/a&gt;, który służy do monitorowania instancji Elastic’a. Dla instancji produkcyjnych narzędzie jest płatne, dla pozostałych serwerów (typu test, QA, stage itp) darmowe. Z ciekawych funkcjonalności, to można sobie odtworzyć, co się działo w shardami, gdy do klastra dołączały się kolejne instancje węzłów. &lt;br /&gt;
&lt;br /&gt;
Dalej prelegent pokazał jak za pomocą &lt;a href=&quot;https://www.elastic.co/products/kibana&quot;&gt;Kibany&lt;/a&gt;&amp;nbsp;można w łatwy sposób wizualizować wszelakie dane jakie mamy zapisane w indexie Elastica.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRWimhsGw_rOS7OqOUooBZ-vJGUzNbV9dSENVNsbA3chuO3Cq_mjzipZ9rGnRV37rxWhSYYYQNA-yNiEZErbk6kMgP-jkFHzPeTe7P_iLHc1thxA7GNQiLp0oRY_rynqudfRoN3QYU0R0y/s1600/kibana-kopia.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRWimhsGw_rOS7OqOUooBZ-vJGUzNbV9dSENVNsbA3chuO3Cq_mjzipZ9rGnRV37rxWhSYYYQNA-yNiEZErbk6kMgP-jkFHzPeTe7P_iLHc1thxA7GNQiLp0oRY_rynqudfRoN3QYU0R0y/s640/kibana-kopia.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB5QE1UEJltV_yn8LXkWkICt9Vb-Xs3DG08WhhR1SyRp3_w27oN6OwD7A2Cu8dgdVjK5P8BwGBnwNOMz9BvATcuQyQRcNwXNXKTR3kSGNyLOx3VuNe6sNFYSD1w8Lw6QQkG5GC56jaV4Nu/s1600/kibana+2-kopia.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;361&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB5QE1UEJltV_yn8LXkWkICt9Vb-Xs3DG08WhhR1SyRp3_w27oN6OwD7A2Cu8dgdVjK5P8BwGBnwNOMz9BvATcuQyQRcNwXNXKTR3kSGNyLOx3VuNe6sNFYSD1w8Lw6QQkG5GC56jaV4Nu/s640/kibana+2-kopia.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I to chyba tyle z prezentacji. Całkiem dobra, ale dla osoby która miała już kontakt z tymi narzędziami nie była bardzo odkrywcza. Miałem jednak za to okazję zadać parę pytań i tak rekomendowaną biblioteką javową do Elastica jest jej &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html&quot;&gt;oficjalna wersja&lt;/a&gt;&amp;nbsp;która to może działać jako węzeł w klastrze, wykorzystywać warstwę transportową między węzłami (udostępnianą standardowo na porcie 9300) i pytać bezpośrednio do miejsca gdzie znajdują się poszukiwane dane.&lt;br /&gt;
&lt;br /&gt;
Kolejna prezentacja, na którą poszedłem, była o &quot;Flavors of Concurrency in Java&quot; prowadzona przez Olega Šelajeva. Na początku było dużo wstępu i dopiero po 20 minutach pojawił się pierwszy kod, na którym omawiał wątki w oldschool’owym wydaniu. Nie dałem rady i wyszedłem. Byłem jeszcze chwilę na Reviewing Architectures, Nathaniela Schutta, ale nie byłem w odpowiednim kontekście i nie dałem rady. &lt;br /&gt;
&lt;br /&gt;
Kolejna prezentacja była najbardziej futurystyczna z całej konferencji a mianowicie: &quot;WebVR - democracy in Virtual Reality&quot;, Marcina Lichwały. Był jeszcze jakiś drugi prowadzący, ale nie był wymieniony z nazwiska. Obaj prelegenci pracują w firmie &lt;a href=&quot;http://www.unit9.com/&quot;&gt;Unit9&lt;/a&gt;, która dostarcza rozwiązania wirtualnej rzeczywistości. Organizowali również pierwszy w Polsce &lt;a href=&quot;http://www.vrchallenge.io/&quot;&gt;festiwal i konkurs wirtualnej rzeczywistości w Łodzi&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Chłopaki opowiadali, jakie zastosowania ma wirtualna rzeczywistość. I jest to nie tylko rozrywka, kampanie reklamowe, ale i edukacji i medycyna (np.: redukcja bólu &lt;a href=&quot;http://youtu.be/jNIqyyypojg&quot;&gt;youtu.be/jNIqyyypojg&lt;/a&gt;).  &lt;br /&gt;
&lt;br /&gt;
Nie pamiętam jakimi okularami się zajmują chłopaki, ale trend jest taki, aby całość obrazu była generowana przez przeglądarki internetowe. Dzięki temu staje się to przenośne. W tym momencie jedynie &lt;a href=&quot;http://mozvr.com/&quot;&gt;MozVR&lt;/a&gt;&amp;nbsp;(z Mozilli) i Chromium wspierają generowanie doznań wirtualnej rzeczywistości. Ostatecznie zawsze zostaje nam wersja dla ubogich w postaci &lt;a href=&quot;https://vr.chromeexperiments.com/&quot;&gt;Cardboard&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
W ramach prezentacji miałem możliwość (podobnie jak inni chętni) przetestować okulary. Obraz całkiem dobry, widać było jedynie małe punkty, na które składał się obraz. Ale to bardzo dobry kierunek i powoli zbliżamy się do już całkiem porządnego sprzętu. Jedynie niektóre osoby z chorobą lokomocyjną nie będą w stanie do końca korzystać z tych wynalazków, bo patrząc w bok i do góry, ciągle niby biegnąc, może zrobić się niedobrze.  &lt;br /&gt;
&lt;br /&gt;
W kolejnym bloku nie było możliwości wyboru, bo był zaplanowany tylko jeden wykład: &quot;Get Past the Syntax, The Real Scare is in the Semantics&quot;, prowadzony przez Venkata Subramaniama. Oczywiście była pełna sala. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-QQDNrWgu_VtJRI_UAa2ZI9ETYAkvdReRsTYCHcFmggeQtBLxSDG9XC79hszsT1qbRAa8isbwhVphXsCC01mAU4fWoUgspw2yQoC_8tFHrbY9XDOnIucq76WExwZ7bwd2t92G8Osc-1-t/s1600/Venkat.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-QQDNrWgu_VtJRI_UAa2ZI9ETYAkvdReRsTYCHcFmggeQtBLxSDG9XC79hszsT1qbRAa8isbwhVphXsCC01mAU4fWoUgspw2yQoC_8tFHrbY9XDOnIucq76WExwZ7bwd2t92G8Osc-1-t/s640/Venkat.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Zaczęło się od tego, że ludzie rożnie postrzegają te same rzeczy. Programiści dlatego nie lubią nowej składni kodu, dlatego wiele języków programowania jest do siebie podobnych C# jest jak Java, a ta jak C++, a C++ jak C... &lt;br /&gt;
&lt;br /&gt;
Venkat chciał nam przez to uświadomić, że nie powinniśmy zwracać uwagi na składnię kodu, a na jego semantykę. No i nasza strefa konfortu powoduje, że się zawsze doszukujemy w nowej składni, tego co już znamy. Jak dla mnie nic więcej konkretnego się nie dowiedziałem na tej prezentacji. &lt;br /&gt;
&lt;br /&gt;
Na koniec drugiego dnia poszedłem jeszcze na &quot;Painfree Object-Document Mapping for MongoDB&quot; prowadzoną przez Philippa Krenna. Prelegent opowiadał o rozwiązaniu &lt;a href=&quot;https://github.com/mongodb/morphia&quot;&gt;Morphia&lt;/a&gt;, które pozwala na mapowanie obiektów Javowych na dokumenty MongoDB. Całość bardzo wygląda jak implementacja JPA (adnotacje na klasach i polach).  &lt;br /&gt;
&lt;br /&gt;
Dalej było o sposobach wykorzystania tego narzędzia, przykłady i dobre praktyki. Na koniec było jeszcze krótko o &lt;a href=&quot;http://projects.spring.io/spring-data-mongodb/&quot;&gt;spring-data-mongodb&lt;/a&gt;. Niby robi to samo co Morphia, ale twórcom się nie spodobała ta implementacja i w zamierzchłych czasach miała sporo błędów, więc twórcy MongoDb wzięli się za własną implementację. Ciekawie też brzmi &lt;a href=&quot;https://github.com/fakemongo/fongo&quot;&gt;Fongo&lt;/a&gt;, który dostarcza implementację in memory dla MongoDb. I ostatnie narzędzie: &lt;a href=&quot;https://github.com/evanchooly/critter&quot;&gt;Critter&lt;/a&gt;, które daje nam coś ala Hibernate’owe Criteria API dla Morphi. To już zostawię bez komentarza. &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/3245529493014228191/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/devoxx-w-polsce-dzien-2.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/3245529493014228191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/3245529493014228191'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/devoxx-w-polsce-dzien-2.html' title='Devoxx w Polsce - dzień 2'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_6NFyg-ctrqIQqhgnVO9MEfMrZCSdHkqUS4wpzWQQeY3_KXbA5U4LScze9lPMRcJ0FVbDGQcQZX4Uw0bdG7Wvvekgh9jvBopIR7JuIELsDfjNuQaXraYzMEh9QtrCIPTo2yvsqkG1msl/s72-c/Devoxx_logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-3228143956016077871</id><published>2015-07-01T22:44:00.000+02:00</published><updated>2015-07-01T22:44:19.462+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devoxx"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><title type='text'>Devoxx w Polsce - wrażenia z pierwszej edycji</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuN8pkwhBzfAJcltoCxgqovkTVL8HdWVN3s_R2ZmkJsHZ-r-y0CqUhBp6WtBErgzGFqk-q4-9PgC0l8Imh2go45KAppApsvcuEr39ry0Aj5jedhoXmkD01BEg64c4YqNqgWpNpr5ZzPY3v/s1600/Devoxx_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;109&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuN8pkwhBzfAJcltoCxgqovkTVL8HdWVN3s_R2ZmkJsHZ-r-y0CqUhBp6WtBErgzGFqk-q4-9PgC0l8Imh2go45KAppApsvcuEr39ry0Aj5jedhoXmkD01BEg64c4YqNqgWpNpr5ZzPY3v/s320/Devoxx_logo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Pierwszy &lt;a href=&quot;http://devoxx.pl/&quot;&gt;Devoxx&lt;/a&gt; w Polsce (dawniej 33 Degree) odbył się w dniach 22-24 czerwca 2015, w nowo wybudowanym centrum kongresowym w Krakowie, mogącym pomieścić ponad 2000 ludzi. I to było idealne miejsce na konferencję - nowy, ładny i przestronny budynek z ogromną salą z balkonami na trzech poziomach, gdzie mogli zmieścić się wszyscy uczestnicy. &lt;br /&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirAznSeHMg4i3xHl0Ueh9WY3u_gpGEsMignr_jyeV6iv9i34yYKTnR-u2RrpJCIkBtSRKyGL0rWoqmNUeApr6qVQfM4pxdmh_94v6ynKuBMWMRqY9odJvhZpMsXYODSE5k99GPLcfoDRqI/s1600/ice2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;492&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirAznSeHMg4i3xHl0Ueh9WY3u_gpGEsMignr_jyeV6iv9i34yYKTnR-u2RrpJCIkBtSRKyGL0rWoqmNUeApr6qVQfM4pxdmh_94v6ynKuBMWMRqY9odJvhZpMsXYODSE5k99GPLcfoDRqI/s640/ice2.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Konferencję otworzył standardowo Grzesiek Duda. W trakcie rozpoczęcia miała być krótka prezentacja &lt;a href=&quot;https://vaadin.com/designer&quot;&gt;Vaadin Designer’a&lt;/a&gt;, ale niestety był problem z połączeniem laptopa do rzutnika. Z racji ograniczonego czasu, trzeba było uwierzyć na słowo, że narzędzie jest fajne. &lt;br /&gt;
&lt;br /&gt;
Pierwszy keynote poprowadził Hadi Hariri: &quot;The Silver Bullet Syndrome&quot;. Opowiadał o tym, w jaki sposób szukamy rozwiązania starych problemów, czyli o wynajdowaniu koła na nowo, aby było bardziej okrągłe. I tak z make’a przerzuciliśmy się na ant’a, później maven’a i gradle’a… Poszukujemy idealnego rozwiązania, najlepiej naszych wszystkich problemów, czyli tytułowego silver bullet. Powoduje to następujący &quot;cykl przetrwania w IT&quot;: nowa technologia -&amp;gt; wciśnięcie jej użytkownikom -&amp;gt; organizowanie szkoleń -&amp;gt; użycie na produkcji -&amp;gt;  jak coś nie działa, to telefon do konsultanta i tak&amp;nbsp;w kółko od nowa. &lt;br /&gt;
&lt;br /&gt;
Hadi wyśmiewał jeszcze inne potworki jakie tworzymy, np.:&amp;nbsp;&lt;a href=&quot;http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html&quot;&gt;AbstractSingletonProxyFactoryBean&lt;/a&gt;, &lt;a href=&quot;https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition&quot;&gt;FizzBuzzEnterpriseEdition&lt;/a&gt; i JavaScript:&lt;br /&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis9oAiphVpPQFoSLkd13WjiLdUFsbwu17VXjlbmaRWCSP7ykavEkoDpgQJZYbXf-ayaRLTQHUnLQFLrS2p_7EWB4lMzcr5Qs0AndbiwK3Wg1hf3ZC_Rwve5gur28LMKNcXgxo0GoC16Gr3/s1600/tweet+js+dringink+game.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;148&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis9oAiphVpPQFoSLkd13WjiLdUFsbwu17VXjlbmaRWCSP7ykavEkoDpgQJZYbXf-ayaRLTQHUnLQFLrS2p_7EWB4lMzcr5Qs0AndbiwK3Wg1hf3ZC_Rwve5gur28LMKNcXgxo0GoC16Gr3/s400/tweet+js+dringink+game.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Tak naprawdę, to powinniśmy zadać sobie pytanie, jaką to nam przyniosło wartość biznesową? Jak usprawniliśmy czyjąś pracę lub życie, a nie wymyślamy kolejne frameworki. Nasze CV powinno więc wyglądać raczej tak: &lt;br /&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRlw_mai4zrwe3glJvpwzUUp1ZqvMFuPasdM3YGM814gXyt7XBOhKpKomXeDSyo7zmwJD2qzqJD8PcKnG7HZ7F6HcmZtkbits2Hrz3UGbN-2EZtbFKPZTFLvfNzC-OLMqLFS7avGM4YiFs/s1600/cv2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;473&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRlw_mai4zrwe3glJvpwzUUp1ZqvMFuPasdM3YGM814gXyt7XBOhKpKomXeDSyo7zmwJD2qzqJD8PcKnG7HZ7F6HcmZtkbits2Hrz3UGbN-2EZtbFKPZTFLvfNzC-OLMqLFS7avGM4YiFs/s640/cv2.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot; style=&quot;text-align: center;&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;(Sorry za kiepską jakość...)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/div&gt;
Ostatecznie stanęło na tym, że jednak musimy ciągle uczyć się nowych rzeczy. Nagranie z prezentacji (ale nie z Devoxxa) jest dostępne na Vimeo: &lt;a href=&quot;https://vimeo.com/130202574&quot;&gt;https://vimeo.com/130202574&lt;/a&gt;, a starszą wersję slajdów znalazłem tutaj: &lt;a href=&quot;http://schd.ws/hosted_files/buildstuff14/a5/wcf.pdf&quot;&gt;http://schd.ws/hosted_files/buildstuff14/a5/wcf.pdf&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Pierwszą prezentacją po keynote na którą poszedłem było: &quot;Principles Of Microservices&quot;, Sama Newmana. Było o &lt;a href=&quot;http://12factor.net/&quot;&gt;The Twelve Factors&lt;/a&gt;, czyli o zebranych zasadach z doświadczeń, jak pisać aplikacje, które są deploy&#39;owane w dużych ilościach, aby było łatwiej nimi zarządzać i utrzymywać. &lt;br /&gt;
&lt;br /&gt;
Z rozwiązań, które warto zapisać (i może kiedyś im się w razie konieczności lub nadmiaru wolnego czasu przyjrzeć) to: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/realestate-com-au/pact&quot;&gt;Pact&lt;/a&gt; - biblioteka do testowania i definiowania kontraktów pomiędzy mikroserwisami (czyli: Consumer driven contracts)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zookeeper.apache.org/&quot;&gt;ZooKeeper&lt;/a&gt; - do ogarnięcia utrzymania, konfiguracji itp. wielu rozproszonych systemów&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; - rozproszona konfiguracja dla wielu serwisów&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.consul.io/&quot;&gt;Consul&lt;/a&gt; - to samo (albo prawie to samo co dwa powyższe)&lt;/li&gt;
&lt;/ul&gt;
Sam na prezentacji przedstawił 8 zasad mikroserwisów i je wyjaśnił: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Modelled Around Business Domain&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Culture Of Automation&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Hide Implementation Details&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Decentralise All The Things&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Deploy Independently&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Consumer First&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Isolate Failure&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Highly Observable&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Najbardziej mi utkwiło w pamięci, że trzeba mieć jedną osobę, która patrzy na aplikację i co się w niej dzieje, korzysta z &lt;a href=&quot;https://www.elastic.co/products/kibana&quot;&gt;kibany&lt;/a&gt; i stosując correlation id, śledzi, co dokładnie się dzieje z danym request’em i gdzie najwięcej czasu spędza. A tutaj jakaś starsza wersja slajdów z &lt;a href=&quot;http://www.slideshare.net/spnewman/principles-of-microservices-xp-days-ukraine&quot;&gt;XP Days Ukraine&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Następnie pospieszyłem na &quot;OnConnectionLost: The life of an offline web application&quot;, prowadzoną przez młodych pracowników z &lt;a href=&quot;http://www.thoughtworks.com/&quot;&gt;ThoughtWorks&lt;/a&gt;: Stefanie Grewenig i Johannesa Thönesa. Prelegenci tworzyli aplikacje, które musiały działać w przeglądarce i również off-line. Przykładowo aplikacja na tableta dla pracownika supermarketu, który sprawdza dostępność produktów na półkach i zamawia co trzeba. Dawniej korzystano z kartek do tego celu, ale można pójść z duchem czasu i zrobić to lepiej. Połączenie z internetem bardzo łatwo zgubić na sklepie, a zamówienie trzeba złożyć, więc warto w takim przypadku, aby aplikacja działała offline. &lt;br /&gt;
&lt;br /&gt;
I tak za pomocą &lt;a href=&quot;http://www.w3schools.com/html/html5_app_cache.asp&quot;&gt;html5 application cache&lt;/a&gt; możemy zdefiniować, które zasoby powinny zostać zapamiętane po stronie przeglądarki, do działania w trybie offline. Mamy również możliwość, wymuszenia aktualizacji tych zasobów, gdy pojawią się ich nowsze wersje na serwerze. Najważniejsze, aby manifest, w którym definiujemy co ma być cachowane, sam nie został zcache&#39;owany. W tym celu warto ustawić w nagłówkach &lt;a href=&quot;https://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers&quot;&gt;no chache&lt;/a&gt;. Alternatywą dla application cache jest &lt;a href=&quot;http://www.w3.org/TR/service-workers/&quot;&gt;Service Workers&lt;/a&gt;, ale póki co jest to googlowy wynalazek, zaimplementowany tylko w Chromie i FF. &lt;br /&gt;
&lt;br /&gt;
Jeśli chodzi o przechowywanie wprowadzonych danych offline, to mamy &lt;a href=&quot;http://www.w3schools.com/html/html5_webstorage.asp&quot;&gt;Web Storage&lt;/a&gt; i &lt;a href=&quot;http://www.w3.org/TR/IndexedDB/&quot;&gt;IndexedDB&lt;/a&gt;. W pierwszym rozwiązaniu jest sporo problemów (między innymi jak użytkownik chce otworzyć wiele zakładek naszej aplikacji) i prelegenci zalecali drugie rozwiązanie. Oferuje ono transakcyjność pomiędzy wieloma zakładkami. Niestety obecnie jest ono&amp;nbsp;wspierane&amp;nbsp;tylko&amp;nbsp;&lt;a href=&quot;http://caniuse.com/#search=filesystem&quot;&gt;w Chrome&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ostatnim problemem, jaki jest do rozwiązania przy aplikacjach działających w przeglądarkach off-line, to synchronizacja danych. Warto korzystać od samego początku ze wzorca Command, czyli wszelkie zmiany, jakie wykonuje użytkownik wrzucamy do lokalnej kolejki i jak stanie się online, to je dopiero przetwarzamy na serwerze. Ewentualnie, aby nie mieć jakiś problemów z łączeniem wyników, to możemy zapisać snapshot’a aktualnego wyniku. Nie warto się spalać nad rozwiązywaniem konfliktów (o ile nie piszemy gita przez przeglądarkę), a w najgorszym wypadku możemy wyświetlić dwie wersje dokumentu i użytkownik skopiuje sobie to, co mu brakuje do nowszej wersji. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;Z dalszych rad - danych wrażliwych nie powinniśmy zapisywać w przeglądarce, bo są one dostępne jawnym tekstem, a sama enkrypcja po stronie JavaScriptu może nie być najlepsza. I jeżeli decydujemy się na budowanie aplikacji działającej bez połączenia z internetami, to w pierwszej kolejności powinniśmy zadbać o działanie bez serwera i wprowadzenie wzorca Command zamiast requestów. W innym wypadku bardzo zemści się to na nas w późniejszym czasie. Slajdy można obejrzeć tutaj: &lt;a href=&quot;http://www.slideshare.net/jthoenes/onconnectionlost-the-life-of-an-offline-web-application-craft-conf-2015&quot;&gt;http://www.slideshare.net/jthoenes/onconnectionlost-the-life-of-an-offline-web-application-craft-conf-2015&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Kolejne wystąpienie pt.: &quot;Co było pierwsze: kod czy architektura?&quot;&amp;nbsp;&lt;/span&gt;Sławka Sobótki rozpoczęło się od poziomów cywilizacji wg. &lt;a href=&quot;https://pl.wikipedia.org/wiki/Skala_Kardaszewa&quot;&gt;Skali Kardaszewa&lt;/a&gt;, aby zachęcić słuchaczy do aktywnego słuchania. I to się z pewnością Sławkowi udało. Prelegent „zajrzał” na chwilę do umysłu programisty i architekta. Ten pierwszy w przypadku problemu wyboru rozwiązania A i B próbuje wybrać lepsze. Architekt w takim przypadku robi krok wstecz, patrzy z dalszej perspektywy i zastanawia się, czemu w ogóle mamy wybór i czy rzeczywiście musimy wybierać.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;Następnie przyglądaliśmy się różnym rodzajom obrazków, jakie malują architekci, aby przejść do tego, jak je malować. Dobry podział tych obrazków jest zebrany w książce &lt;a href=&quot;https://leanpub.com/software-architecture-for-developers&quot;&gt;Software Architecture for Developers&lt;/a&gt;,&amp;nbsp;a mianowicie C4: &lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Context - czyli architektura korporacyjna. Pokazujemy na niej osoby korzystające z systemu, inne zależne systemy i instytucje. Odbiorcami taki obrazów są klienci i zarząd.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Containers - architektura wdrożenia. Tutaj mamy wszelkie techniczne zależne elementy, jak bazy danych, kolejki komunikatów, repozytoria, bazy danych, kontenery, klienci (w sensie przeglądarka, aplikacja na telefon). Jest to przydatny diagram dla administratorów, utrzymaniowców i DevOpsów.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Components - czyli architektura systemu. Obrazek ten pokazuje komponenty / moduły (jakkolwiek sobie zdefiniujemy czym to dokładnie jest). Jest to przydatne dla programistów, dając obraz z lotu ptaka na aplikację&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Classes - architektura aplikacji, pokazująca wewnętrzną strukturę dokumentu, bardziej wzorce niż konkretne klasy&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Jak prezentacja Sławka będzie dostępna on-line to umieszczę tutaj odpowiednie zdjęcia.&lt;br /&gt;
&lt;br /&gt;
Z praktycznych rzeczy to zapamiętałem (albo raczej sobie zapisałem) jeszcze parę rad. Jeśli korzystamy z RESTa, to powinniśmy mieć teoretycznie tylko nazwy zasobów w adresach URL. Jednak praktycznie, to warto rozważyć, co częściej się nam zmienia: zasoby czy procesy? Gdy zasoby są w systemie stabilne, to robimy RESTfull, a jak procesy to do RESTa wrzucamy czasowniki. &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Connascence_(computer_programming)&quot;&gt;Connascence&lt;/a&gt;&amp;nbsp;oznacza, że jak coś zmieniamy w jednym miejscu w systemie, to musimy to również zmienić w drugim miejscu. Przykładowo mikroserwisy nie powinny korzystać z bibliotek współdzielonych. I dodatkowo powinniśmy rozdzielać pojęcia w systemie, aby lepiej nam się rozdzielało komponenty systemu. &lt;br /&gt;
&lt;br /&gt;
W ten sposób zostało przedstawione, jak tworzenie dużej architektury od początku prowadzi do kodu. Następnie Sławek spróbował pokazać podejście odwrotne, tzn. jak z naszych mikrodecyzji na poziomie kodu wyłania się nasza architektura. &lt;br /&gt;
&lt;br /&gt;
Podsumowując, nie wiadomo który framework jest lepszy, ani który język programowania. Programowanie to dyscyplina polegająca na zmyślaniu - faktura to funkcja, albo faktura to obiekt… A tak to wszyscy powinniśmy się nauczyć assemblera, aby wiedzieć jak działa krzem, aby przestać toczyć wojny religijne, o to który język programowania jest lepszy... &lt;br /&gt;
&lt;br /&gt;
Następnie byłem chwilę na wykładzie &quot;Using JavaScript/HTML5 Rich Clients with Java EE 7&quot;, Reza Rahmana, ale&amp;nbsp;musiałem wyjść. W sumie dobrze, bo z późniejszych opinii było nieciekawie, głównie historia, jak to przez lata próbowano ożenić frontend z backendem. &lt;br /&gt;
&lt;br /&gt;
Poszedłem więc na: &quot;Technical leadership – from an expert to a leader&quot;, Mariusza Sieraczkiewicza. Nie widziałem początku, ale prelegent mówił o tym, że dobry leader powinien przygotować takie środowisko, że każdy będzie chciał w nim pracować. Następnie było o rzeczach, których każdy powinien spróbować: więcej myśleć niż tylko reagować, robić sobie codzienną retrospektywę, zrozumieć, a nie oceniać - coaching. Aby móc lepiej motywować ludzi, to powinniśmy ich lepiej poznać, jakie są ich potrzeby i zbierać feedback, a w Agile jest pełno narzędzi związanych z feedbackiem. &lt;br /&gt;
&lt;br /&gt;
Na koniec Mariusz ogłosił, że pisze książkę na ten temat i szuka chętnych chcących podzielić się z nim swoimi doświadczeniami. Kontakt można znaleźć na jego blogu: &lt;a href=&quot;http://msieraczkiewicz.blogspot.com/&quot;&gt;http://msieraczkiewicz.blogspot.com/&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Przedostatnią prezentacją pierwszego dnia konferencji była: &quot;Caching reboot: javax.cache &amp;amp; Ehcache 3&quot; prowadzona przez Louis Jacomet. Początkowo prowadzący omówił, co ile czasu zabiera, jak przeskalujemy czas pewnych operacji komputera na bardziej ludzkie, odczuwalne i zrozumiałe jednostki. Miało to na celu uświadomienie sobie, że naprawdę potrzebujemy cache w aplikacji. Następnie było o zmianach w EhCache w wersji 3 w stosunku do wersji 2. Mianowicie Java doczekała się ustandaryzowanego Caching API ujawniającego się pod numerem &lt;a href=&quot;https://jcp.org/en/jsr/detail?id=107&quot;&gt;JSR-107&lt;/a&gt;.&amp;nbsp;I nowa wersja EhCache’a implementuje tą specyfikację, przez co wsteczna kompatybilność została złamana. &lt;br /&gt;
&lt;br /&gt;
W standardzie JSR-107 nie ma zdefiniowanych ustawień dla Capacity control, ani Locking Options. Dalej było demo, jak łatwo można korzystać z EhCache. Jest możliwość modyfikowania ustawień w trakcie działania aplikacji. Problemem jest jedynie odpowiednia konfiguracja, a mianowicie dobranie odpowiednich wartości. Jedyne co prowadzący mógł polecić, to pójście na produkcję i obserwowanie zachowania. Największym wyzwaniem przy implementacji EhCache’a jest założenie, że błąd w cache’u nie powinien skutkować wyjątkiem do użytkownika (aplikacji). Prezentacja całkiem fajna. &lt;br /&gt;
&lt;br /&gt;
Na końcu dnia poszedłem na prezentację Adama Warskiego pt. &quot;Supler: complex web forms, not so complex&quot;. Adam jak zwykle w wielkim stylu przedstawił rozwiązanie, które stworzył wraz z zespołem w SoftwareMill’u. &lt;a href=&quot;https://github.com/softwaremill/supler&quot;&gt;Supler&lt;/a&gt;&amp;nbsp;jest narzędziem, które spaja frontend w JavaScripcie z backendem Scalowym. Pomaga generować formularze (nawet zagnieżdżone i skomplikowane), a jednocześnie nie jest związany z żadnym frameworkiem. Było przez cały czas live demo i niewiele slajdów. Trochę mi umknęło jak ożenić to rozwiązanie z jakimś frejmworkiem JS. Gdybym musiał tworzyć formularze w Scali, to z pewnością bym pozytywnie rozważył użycie Suplera w projekcie. &lt;br /&gt;
&lt;br /&gt;
Podsumowując pierwszy dzień konferencji, to trzymał poziom, ale czegoś mi zabrakło. Początkowy wykład był mocno motywujący i dający do myślenia, Sławek Sobótka bardzo fajnie opowiedział o malowaniu architektury, ale to było bardzo miękkie. O EhCache i Suplerze była całkiem niezła, ale tego drugiego raczej nie będę mógł zastosować praktycznie w najbliższym czasie. Zabrakło mi trochę jakiejś mocno technicznej prezentacji na temat czegoś nowego, świeżego, lub wywracającego myślenie do góry nogami. </content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/3228143956016077871/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/devoxx-w-polsce-wrazenia-z-pierwszej.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/3228143956016077871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/3228143956016077871'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/07/devoxx-w-polsce-wrazenia-z-pierwszej.html' title='Devoxx w Polsce - wrażenia z pierwszej edycji'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuN8pkwhBzfAJcltoCxgqovkTVL8HdWVN3s_R2ZmkJsHZ-r-y0CqUhBp6WtBErgzGFqk-q4-9PgC0l8Imh2go45KAppApsvcuEr39ry0Aj5jedhoXmkD01BEg64c4YqNqgWpNpr5ZzPY3v/s72-c/Devoxx_logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-1142213397746436847</id><published>2015-02-09T21:28:00.000+01:00</published><updated>2015-02-09T21:28:10.342+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="Voxxed"/><title type='text'>Voxxed Days Vienna 15</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdFJ82FgS3EQEF49FFyTqIohHM6TiNtCW3_3v76zwt7z1NgCALtMeXS6hXn4Y1ciM5EF6Ec34AL_2FliQQoAUSkAHt3N32u2DwIKzpN5vliz1JI94HN1oK8U8LvBqpvnEEQQapu76tPT5w/s1600/FPR5vu-O_400x400.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdFJ82FgS3EQEF49FFyTqIohHM6TiNtCW3_3v76zwt7z1NgCALtMeXS6hXn4Y1ciM5EF6Ec34AL_2FliQQoAUSkAHt3N32u2DwIKzpN5vliz1JI94HN1oK8U8LvBqpvnEEQQapu76tPT5w/s1600/FPR5vu-O_400x400.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Ledwo zakończył się &lt;a href=&quot;http://mstachniuk.blogspot.com/2015/02/chamberconf-wrazenia-jako-organizator.html&quot;&gt;ChamberConf&lt;/a&gt;, a tu już czas na &lt;a href=&quot;https://www.voxxed.com/days-vienna15/&quot;&gt;Voxxed Days Vienna 15&lt;/a&gt;. Była to moja pierwsza zagraniczna konferencja, nie licząc Code Retreatów. Wejściówkę wygrałem w losowaniu, więc czemu by nie pojechać? W końcu z Wrocławia do Wiednia jedzie się tak długo, jak jeszcze całkiem niedawno jechało się do Warszawy. &lt;br /&gt;
&lt;br /&gt;
Konferencję otworzył Greg Young z tematem Polyglot Data. Była to powtórka z Wrocławia, między innymi opowieść o programiście, co zbamałucił system obstawiania wyścigów konnych i jak można było się przed tym zabezpieczyć.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Następnie byłem na prezentacji&amp;nbsp;Norberto Leite - ewangelisty z MongoDB - pt. Operational Database with Elephant Memory. Początkowo było dużo marketingowego gadania, jak to CTO, CIO, CSO i inni C* widzą bazy danych. Było bardzo dużo odniesień do wcześniejszego wystąpienia Greg&#39;a, który trochę jechał po Mongo DB. Według Norberto, ssie ta baza danych, którą akurat używamy.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Dalej były podstawy Hadoopa (HDFS, YARN, MapReduce) oraz o Pig, Hive, Sparku, jakie są drivery do Mongo, z czym można się integrować... Miało być demo, ale nic konkretnego w końcu nie było. Merytorycznie bardzo słabo.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Później byłem chwilę na wystąpieniu Michaela Nitschingera, ale przeniosłem się na Monadic Java prowadzone przez Mario Fusco. I na początek zobaczyłem te wzory&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xvRlxKbl0V62daRoaWjktupuoj1LaZRl1fJQ5sBmx3uBQDJcQjvdQSU8-GjZI0q8Sp8YMGy0iQySlGD7W49ECO_sVEbApgjEj2DCF_4gI0ieJiyNNuxGnp8SvSrhbhW7K32fw6BAg0vR/s1600/20150206_114009.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xvRlxKbl0V62daRoaWjktupuoj1LaZRl1fJQ5sBmx3uBQDJcQjvdQSU8-GjZI0q8Sp8YMGy0iQySlGD7W49ECO_sVEbApgjEj2DCF_4gI0ieJiyNNuxGnp8SvSrhbhW7K32fw6BAg0vR/s1600/20150206_114009.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Tak naprawdę, to monady ukrywają if&#39;a w metodzie, dzięki czemu możemy ładniej, funkcyjnie zapisywać nasz kod. Był pokazany przykład, jak można zrobić dzięki monadom walidację obiektów, a za zadanie domowe, Mario zadał, aby napisać system transakcyjny, z wykorzystaniem monad rzecz jasna.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Prelegent jest współorganizatorem &lt;a href=&quot;https://www.voxxed.com/days-ticino15/&quot;&gt;Voxxed Days Ticino&lt;/a&gt;. Zastanawialiśmy się w przerwie gdzie to jest (Google Maps lokalizowało Ticino w Szwajcarii i we Włoszech), ale w końcu okazało się, że chodzi o włoski region w Szwajcarii.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Później był obiad i tu spore zaskoczenie. Część jedzenia przyjechała z Polski.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRyEDOqSjWG9k21VofdXL52KEe69aofqzxWVYmiU_K0ZTPpPJBv3W8uI2B3zy89CRN7fmjuvj2f76KytVuD-2qZxEqPiK30mAZlhKd1MJRpoG5eknl5qcaiKIMZMXdYezrYHIcy58bcRqt/s1600/20150206_124519.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRyEDOqSjWG9k21VofdXL52KEe69aofqzxWVYmiU_K0ZTPpPJBv3W8uI2B3zy89CRN7fmjuvj2f76KytVuD-2qZxEqPiK30mAZlhKd1MJRpoG5eknl5qcaiKIMZMXdYezrYHIcy58bcRqt/s1600/20150206_124519.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
W końcu Grzesiek Duda był organizatorem tej konferencji i pewnie wychodziło taniej w ten sposób. Część napoi też przebyła sporą drogę.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Kolejny slot był słaby, odwiedziłem wszystkie sale, ale nic ciekawego nie znalazłem.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Później była druga prezentacja Grega Younga, który w zastępstwie kontynuował poranny wykład. Było m.in. o tym aby nie ufać benchmarkom, że często dane z nich przekraczają fizyczne możliwości urządzeń.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Kolejna prezentacja była&amp;nbsp;Sergeya Kuksenko, który to na co dzień pracuje w Oracle i zajmuje się performance&#39;m Javy. Mimo developerskiego charakteru jego pracy, musiał oczywiście pojawić się disclaimer&amp;nbsp;na&amp;nbsp;początku.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Wykład było mało praktyczny, ale bardzo ciekawy. Było o wydajności Javy, ale na poziomie procesora. Sporo rzeczy przypomniało mi się z architektury komputerów ze studiów. Kod z przykładów jest dostępny tutaj:&amp;nbsp;&lt;a href=&quot;https://github.com/kuksenko&quot;&gt;kuksenko&lt;/a&gt;/&lt;a href=&quot;https://github.com/kuksenko/quantum&quot;&gt;quantum&lt;/a&gt;, a slajdy poniżej.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/44390719&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;425&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;b&gt; &lt;a href=&quot;https://www.slideshare.net/SergeyKuksenko/quantum-performance-effects-44390719&quot; target=&quot;_blank&quot; title=&quot;&amp;quot;Quantum&amp;quot; Performance Effects&quot;&gt;&quot;Quantum&quot; Performance Effects&lt;/a&gt; &lt;/b&gt; from &lt;b&gt;&lt;a href=&quot;https://www.slideshare.net/SergeyKuksenko&quot; target=&quot;_blank&quot;&gt;Sergey Kuksenko&lt;/a&gt;&lt;/b&gt; &lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
Ostatni wykład był Christophera Bateya o microservisach. Prelegent przedstawiał, jak to on w projekcie zbudował system, będąc świadomym problemów wynikających z rozproszenia aplikacji. Jednak wszelakie przypadki, że część systemu nie działa, albo są lagi na sieci miał przetestowane.&lt;br /&gt;
&lt;br /&gt;
I tak do symulowania problemów z siecią korzystali z &lt;a href=&quot;https://github.com/tomakehurst/saboteur&quot;&gt;saboteur&lt;/a&gt;, a do mockowania web serwisów&amp;nbsp;&lt;a href=&quot;http://wiremock.org/&quot;&gt;WireMock&lt;/a&gt;. Spore streszczenie prezentacji Christophera można znaleźć na jego blogu:&amp;nbsp;&lt;a href=&quot;http://christopher-batey.blogspot.com/2014/10/building-fault-tolerant-services-do-you.html&quot;&gt;Building fault tolerant services: Do you handle timeouts correctly?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Sama prezentacja nie była jakaś fajna, czegoś w niej brakowało...&lt;br /&gt;
&lt;br /&gt;
Na koniec było jeszcze piwo sponsorowane prze TypeSafe. Niestety nie mogłem zostać za długo, ale z tego co wiem, to impreza trwała długo.&lt;br /&gt;
&lt;br /&gt;
Co do samej imprezy, to miała &amp;nbsp;ona na celu rozruszanie lokalnej społeczności. Merytorycznie daleko jej było do tych najlepszych konferencji - była to typowa lokalna inicjatywa, która jak na pierwszy raz wyszła całkiem spoko.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/1142213397746436847/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/02/voxxed-days-vienna-15.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1142213397746436847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1142213397746436847'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/02/voxxed-days-vienna-15.html' title='Voxxed Days Vienna 15'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdFJ82FgS3EQEF49FFyTqIohHM6TiNtCW3_3v76zwt7z1NgCALtMeXS6hXn4Y1ciM5EF6Ec34AL_2FliQQoAUSkAHt3N32u2DwIKzpN5vliz1JI94HN1oK8U8LvBqpvnEEQQapu76tPT5w/s72-c/FPR5vu-O_400x400.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-986689250705535823</id><published>2015-02-02T21:59:00.000+01:00</published><updated>2015-02-02T21:59:46.536+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ChamberConf"/><category scheme="http://www.blogger.com/atom/ns#" term="IDEA"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>ChamberConf wrażenia jako organizator, prelegent i uczestnik w jednym</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt860tgSdU4Qz-NH2g2XdBDn6Te52zlVkMkEOaGORvHCkE5E2mFmCx3qJbtcJ2M4YW1AuazF068AQ5Zhs8XZrErIKtfMt8kSirg6Ymq0_9A3Qr4axToFSGYSDPp1jRyfbs8zwXlUzHNn3H/s1600/chamber.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt860tgSdU4Qz-NH2g2XdBDn6Te52zlVkMkEOaGORvHCkE5E2mFmCx3qJbtcJ2M4YW1AuazF068AQ5Zhs8XZrErIKtfMt8kSirg6Ymq0_9A3Qr4axToFSGYSDPp1jRyfbs8zwXlUzHNn3H/s1600/chamber.png&quot; height=&quot;69&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
W końcu się zebrałem, aby napisać relację z &lt;a href=&quot;http://chamberconf.pl/&quot;&gt;ChamberConf&lt;/a&gt;. 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...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href=&quot;https://prezi.com/qdh8djlcrfwf/its-not-always-applications-fault/&quot;&gt;prezi.com&lt;/a&gt;&lt;span id=&quot;goog_1004961247&quot;&gt;, jak i na &lt;a href=&quot;http://www.slideshare.net/TomekBorek/to-nie-zawsze-wina-aplikacji&quot;&gt;slideshare&lt;/a&gt;.&lt;/span&gt;&lt;span id=&quot;goog_1004961248&quot;&gt;&lt;/span&gt; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Następnie Konrad Malawski opowiadał o algorytmach głosowania w sieci. Było m.in. o &lt;a href=&quot;http://en.wikipedia.org/wiki/Paxos_%28computer_science%29&quot;&gt;Paxosie&lt;/a&gt; (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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjZQpHcc790eCOVFZ8eXahHQo2YBcbvUWRj1SZGrvsd-HlfSH7_gXLz1Dnu3-0ZyBuTiNbRl5n72B3emD6d9F2krxAoKmTGSC-kY8-fCPMcMRcOCcsn91Y9XIpoUz_p4EWbwEJjB74T8_i/s1600/morsowanie_na_bloga_small.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjZQpHcc790eCOVFZ8eXahHQo2YBcbvUWRj1SZGrvsd-HlfSH7_gXLz1Dnu3-0ZyBuTiNbRl5n72B3emD6d9F2krxAoKmTGSC-kY8-fCPMcMRcOCcsn91Y9XIpoUz_p4EWbwEJjB74T8_i/s1600/morsowanie_na_bloga_small.jpg&quot; height=&quot;426&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Równolegle do warsztatów była ścieżka z prezentacjami. Tam frekwencja była mniejsza, ale podobno bardzo sprzyjało to żywej dyskusji.&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href=&quot;http://warsjawa.pl/&quot;&gt;Warsjawy&lt;/a&gt;. Sam na początku warsztatu się czegoś nowego nauczyłem, a mianowicie poznałem: &lt;a href=&quot;https://plugins.jetbrains.com/plugin/7345&quot;&gt;Presentation Assistant&lt;/a&gt;, 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&#39;a.&lt;br /&gt;
&lt;br /&gt;
Implementowaliśmy ten sam problem co na Warsjawie, czyli &lt;a href=&quot;http://osherove.com/tdd-kata-1/&quot;&gt;StringCalculator&lt;/a&gt;. I jak doszliśmy do wydarzeń regularnych, to znów zaczeły się schody. Okazje się, że jak &quot;ma się jakiś problem, który rozwiązujemy za pomocą regexpa, to de facto rozwiązujemy dwa problemy&quot;. 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: &lt;a href=&quot;https://github.com/mstachniuk/StringCalculatorKata&quot;&gt;mstachniuk/StringCalculatorKata&lt;/a&gt;. A slajdy poniżej:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;400&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/44137127&quot; width=&quot;476&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/986689250705535823/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/02/chamberconf-wrazenia-jako-organizator.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/986689250705535823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/986689250705535823'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/02/chamberconf-wrazenia-jako-organizator.html' title='ChamberConf wrażenia jako organizator, prelegent i uczestnik w jednym'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt860tgSdU4Qz-NH2g2XdBDn6Te52zlVkMkEOaGORvHCkE5E2mFmCx3qJbtcJ2M4YW1AuazF068AQ5Zhs8XZrErIKtfMt8kSirg6Ymq0_9A3Qr4axToFSGYSDPp1jRyfbs8zwXlUzHNn3H/s72-c/chamber.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-4986349272599357512</id><published>2015-01-14T10:23:00.000+01:00</published><updated>2015-01-14T10:23:47.599+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ChamberConf"/><category scheme="http://www.blogger.com/atom/ns#" term="IDEA"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>Duplikowanie bloku kodu w IntelliJ Idea</title><content type='html'>Dzisiaj mam do zaprezentowania mały lifehack w IntelliJ Idea. Wyszło to podczas przygotowywania (a raczej odświeżania) mojego warsztatu na konferencję &lt;a href=&quot;http://chamberconf.pl/&quot;&gt;ChamberConf&#39;15&lt;/a&gt;, której też jestem współorganizatorem (wraz z ekipą z &lt;a href=&quot;http://wroclaw.jug.pl/&quot;&gt;Wrocławskiego JUGa&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Otóż gdy się przesiadałem (dawno dawno temu) z Eclipse&#39;a do Idei, to z początku denerwował mnie sposób duplikowania linii w kodzie. Ale nie o sam skrót klawiaturowy mi chodzi (&lt;b&gt;Ctrl + D&lt;/b&gt; który to w starym środowisku usuwał linię), a o sposób duplikowania zaznaczonego kodu. A działa to tak:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6nd6V9V7vNthWNHuOgUgglL5k8EoJFUQyMUYB1KD7sJXHShSTYGIMyTKgsO-ReggXxm_wYOwGwq3cRgMBRhvwisyDwJwzTvAwG3X5xERtq8MFgPMme7SsyJ8zcCGLxNKFwCfxIb4dLX3z/s1600/01+bez+nowej+lini.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6nd6V9V7vNthWNHuOgUgglL5k8EoJFUQyMUYB1KD7sJXHShSTYGIMyTKgsO-ReggXxm_wYOwGwq3cRgMBRhvwisyDwJwzTvAwG3X5xERtq8MFgPMme7SsyJ8zcCGLxNKFwCfxIb4dLX3z/s1600/01+bez+nowej+lini.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Wiem, że mógłbym szybciej zaznaczyć dany fragment za pomocą &lt;b&gt;Ctrl&amp;nbsp;+ W&lt;/b&gt;, ale wówczas efekt końcowy jest mniej zauważalny.&lt;br /&gt;
&lt;br /&gt;
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ć &lt;a href=&quot;https://youtrack.jetbrains.com/issues/IDEA&quot;&gt;YouTrack dla Idei&lt;/a&gt;&amp;nbsp;i pogrzebałem trochę w ustawieniach.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxNiF4DmFzrywfXmImDHsGUFN5YKqCpGuExSsOt7XGc_ghrrroeWcIBN9D5cf34tD9Ao4GROAo_EdB6jnnDpOvMztRE56sKLdR7vT3ACGHuG1jaCaan3vpvkKvUudUS1YQnvAoiGBh-3L2/s1600/duplicate.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxNiF4DmFzrywfXmImDHsGUFN5YKqCpGuExSsOt7XGc_ghrrroeWcIBN9D5cf34tD9Ao4GROAo_EdB6jnnDpOvMztRE56sKLdR7vT3ACGHuG1jaCaan3vpvkKvUudUS1YQnvAoiGBh-3L2/s1600/duplicate.png&quot; height=&quot;344&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Jak patrzymy na mapowanie klawiszy to mamy &quot;Duplicate Line or Block&quot; jak i &quot;Duplicate Lines&quot;. Pod pierwszą pozycję jest podpięty skrót &lt;b&gt;Ctrl&amp;nbsp;+ D&lt;/b&gt;. Gdy go stamtąd usuniemy i użyjemy w drugiej opcji, to otrzymamy ostrzeżenie o konflikcie:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeu_KiQmCMueeIk1J4yKU3U62-be_OgUqbpeYsXW6Tbe_Y8tp_n3EgL9VypV_hKLY4CptoGS3BGJ6hV8eDIUg5ljFnOHGRb4vm1l_SJQ3Cr24QO2FyDCoiT00tScaoHhrvxeKs5NnPpDW_/s1600/duplicate_warning.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeu_KiQmCMueeIk1J4yKU3U62-be_OgUqbpeYsXW6Tbe_Y8tp_n3EgL9VypV_hKLY4CptoGS3BGJ6hV8eDIUg5ljFnOHGRb4vm1l_SJQ3Cr24QO2FyDCoiT00tScaoHhrvxeKs5NnPpDW_/s1600/duplicate_warning.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Klikamy na &quot;Leave&quot; i uzyskujemy poniższy efekt działania &lt;b&gt;Ctrl&amp;nbsp;+ D&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIBjv1PENp_Jaj5i88Aztp1J_E9MU4Re185I1bOAovP3VL7d0GlK5ltWVIM2omUkPMGSc6GwDzyuvbb1uKxSfjVmz9ilyd3i7MDig8NeLr-oSFCn17M2c__DDllzZ8aqvGvLormtNWszkj/s1600/02+z+nowa+linia.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIBjv1PENp_Jaj5i88Aztp1J_E9MU4Re185I1bOAovP3VL7d0GlK5ltWVIM2omUkPMGSc6GwDzyuvbb1uKxSfjVmz9ilyd3i7MDig8NeLr-oSFCn17M2c__DDllzZ8aqvGvLormtNWszkj/s1600/02+z+nowa+linia.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Jak widać, ten sam (tak samo zaznaczony) fragment kodu, po wciśnięciu magicznej kombinacji, wstawia się w nowej linii!&lt;br /&gt;
&lt;br /&gt;
Mam nadzieję, że ten prosty wpis się spodobał. Jak chcesz poznać więcej trików, to zapraszam na wspomnianą już konferencję: &lt;a href=&quot;http://chamberconf.pl/&quot;&gt;ChambeConf&#39;15&lt;/a&gt;, lub odezwij się bezpośrednio do mnie.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/4986349272599357512/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2015/01/duplikowanie-bloku-kodu-w-intellij-idea.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/4986349272599357512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/4986349272599357512'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2015/01/duplikowanie-bloku-kodu-w-intellij-idea.html' title='Duplikowanie bloku kodu w IntelliJ Idea'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6nd6V9V7vNthWNHuOgUgglL5k8EoJFUQyMUYB1KD7sJXHShSTYGIMyTKgsO-ReggXxm_wYOwGwq3cRgMBRhvwisyDwJwzTvAwG3X5xERtq8MFgPMme7SsyJ8zcCGLxNKFwCfxIb4dLX3z/s72-c/01+bez+nowej+lini.gif" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-648286014730956778</id><published>2014-12-09T00:12:00.000+01:00</published><updated>2014-12-09T00:12:23.333+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bazy danych"/><category scheme="http://www.blogger.com/atom/ns#" term="db"/><category scheme="http://www.blogger.com/atom/ns#" term="db2"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="Liquibase"/><title type='text'>Moje wystąpienie na dbConf </title><content type='html'>&lt;a href=&quot;http://mstachniuk.blogspot.com/2014/07/dbconf-2014-nowa-konferencja-dla.html&quot;&gt;Jakiś czas temu wspominałem&lt;/a&gt; o konferencji dla bazodanowców &lt;a href=&quot;http://www.dbconf.pl/2014/pl/&quot;&gt;dbConf.pl&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Dziś czas w końcu na relacje z niej, gdyż właśnie się pojawiło moje wystąpienie.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;281&quot; mozallowfullscreen=&quot;&quot; src=&quot;//player.vimeo.com/video/111985060&quot; webkitallowfullscreen=&quot;&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;br /&gt;
Już nie pierwszy raz mam okazję obejrzenia samego siebie w roli prelegenta, ale to pierwsze, publicznie dostępne nagranie. Poprzednie mało kiepski głos. Na początku jestem mocno spięty, gdyż trochę za późno wyjechałem z Wrocławia i musiałem nieźle palić gumę aby zdążyć na czas. Przyjechałem co prawda na miejsce pół godziny przed konferencją, ale byłem trochę zmęczony i lekko zestresowany – do poprawy następnym razem. Można się jeszcze pewnie przyczepić do wielu mankamentów, ale trzeba się nie poddawać i działać dalej. Chyba że myślicie inaczej to czekam na głosy krytyczne.&lt;br /&gt;
&lt;br /&gt;
Moje wystąpienie było jako pierwsze, więc później mogłem już tylko sobie na spokojnie słuchać innych prelekcji i odpoczywać.&lt;br /&gt;
&lt;br /&gt;
Co do samej konferencji, to bardzo mi się podoba jej formuła. Jest ona weekendowa, w górach, więc w razie zmęczenia można sobie trochę powędrować, co uczyniłem drugiego dnia konferencji. Opuściłem wprawdzie przez to wykłady, ale nie ukrywam, że to miałem w planach:-) Nadrobię sobie niedługo, oglądając pominięte, ciekawsze wystąpienia. Spis opublikowanych już prelekcji można już znaleźć &lt;a href=&quot;http://www.dbconf.pl/2014/pl/materialy&quot;&gt;na stronie konferencji&lt;/a&gt;, lub na kanale na &lt;a href=&quot;http://vimeo.com/album/3157340&quot;&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
DbConf jest wyjazdem beż żon, dzieci, kochanek i wszyscy uczestnicy śpią w jednym ogromnym hotelu. Bardzo dobrze to wpływa na integrację, gdyż osoby nie rozchodzą się wieczorami, a wspólnie spędzają czas wolny. Pierwszego dnia zaplanowano spontanicznie konkurs gry w &lt;a href=&quot;http://vittorioromeo.info/projects.html&quot;&gt;open hexagon&lt;/a&gt;. Jest to chyba gra dla psychopatów, wystarczy obejrzeć poniższą zajawkę:&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/VDWT02j_0Jc&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
My graliśmy na jakimś wyższym poziomie, gdzie średni czas rozgrywki wynosił 3 sekundy. Ponadto muzyczka była jeszcze bardziej męcząca niż na filmiku powyżej, więc szybko odpadłem. Nie polecam nikomu tej gry.&lt;br /&gt;
&lt;br /&gt;
W drugi dzień, jak już wspomniałem, odpuściłem sobie wykłady na rzecz chodzenia po górach. Wróciłem jednak na wieczorny grill, który odbył się na zewnątrz. Dzień wcześniej jakaś inna równoległa konferencja też miała mieć podobną imprezę, ale przenieśli się gdzieś do środka. My byliśmy twardzi i siedzieliśmy na zewnątrz przy ognisku. Dobrze że zdążyłem zakupić sobie czapkę tuż przez przyjazdem.&lt;br /&gt;
&lt;br /&gt;
W niedzielę był jeszcze warsztat, ale z tego co widziałem nie było już na nim wielu uczestników. Pewnie albo niektórzy za bardzo zabalowali przy ognisku lub już się rozjeżdżali do domów.&lt;br /&gt;
&lt;br /&gt;
Podsumowując, była to pierwsza edycja tejże konferencji. Liczebnie było skromnie (bo tylko 50 osób), ale jest szansa że się to rozrośnie. Podobnie ponoć zaczynał &lt;a href=&quot;https://www.phpcon.pl/&quot;&gt;PhpCon&lt;/a&gt; - inna konferencja również organizowana przez &lt;a href=&quot;http://www.linux.org.pl/&quot;&gt;Polską Grupę Użytkowników Linuxa&lt;/a&gt;. Szkoda tylko, że termin się pokrył z czeskim &lt;a href=&quot;http://geecon.cz/&quot;&gt;GeeConem&lt;/a&gt;, więc ciężko by było być w dwóch miejscach na raz.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/648286014730956778/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/12/moje-wystapienie-na-dbconf.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/648286014730956778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/648286014730956778'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/12/moje-wystapienie-na-dbconf.html' title='Moje wystąpienie na dbConf '/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-6152870105320644600</id><published>2014-12-01T00:22:00.000+01:00</published><updated>2014-12-01T00:22:22.081+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDEA"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="testy"/><category scheme="http://www.blogger.com/atom/ns#" term="warsjawa"/><title type='text'>Warsjawa 2014 podsumowanie nr 2 i dawanie feeedback’u</title><content type='html'>W moim przedostatnim wpisie: &lt;a href=&quot;http://mstachniuk.blogspot.com/2014/09/warsjawa-2014-czyli-ja-jako-prowadzacy.html&quot;&gt;Warsjawa 2014, czyli ja jako prowadzący 2 warsztaty&lt;/a&gt; umieściłem materiały z których korzystałem podczas tych warsztatów i opisałem swoje pierwsze wrażenia. Teraz czas na kolejną ostatnią część podsumowania, ponieważ już jakiś czas temu spłynęły do mnie wyniki ankiety przeprowadzonej przez organizatorów. A jest się czym pochwalić :-D Poniżej zamieszczam fragmenty korespondencji, którą otrzymałem od organizatorów.&lt;br /&gt;
&lt;br /&gt;
Odnośnie &lt;b&gt;Upiększ swoje testy. Testowanie jednostkowe dla średnio zaawansowanych&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Your workshop was among&amp;nbsp;&lt;b&gt;best&lt;/b&gt;&amp;nbsp;workshops of Warsjawa 2014!&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;Here comes the results:&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;number of feedbacks: 8&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;average grade (1 to 5, higher is better): 4.63&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;feedback comments:&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;- A lot of knowledge presented, but a bit too fast.&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;- Bardzo fajne i przydatne warsztaty - fajnie zorganizowane&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;- Z warsztatów jestem bardzo zadowolony. Poznałem nowe, lepsze metody testowania, których mam nadzieje użyć w codziennej pracy. Projekt na githubie znacznie ułatwił cala sprawę. Dziękuje :)&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;/i&gt;&lt;i&gt;- Workshop was as described. From a begginer point of view approach : from simplest libraries to most helpful was realy good.&lt;/i&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Co to dla mnie oznacza? Że dostałem 5 głosów z oceną 5 i 3 z oceną 4, lub jakiś inny wariant dający sumę 37. Przy ośmiu głosach daje to właśnie oceną 4.63 (a dokładniej 4.625). Bardzo się cieszę tak wysoką oceną, która w tym momencie trochę rekompensuje ogrom trudu włożonego w przygotowanie tegoż warsztatu.&lt;br /&gt;
&lt;br /&gt;
Odnośnie &lt;b&gt;Poznaj lepiej swoje środowisko programistyczne i zwiększ swoją produktywność z IntelliJ Idea&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Here comes the results:&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;number of feedbacks: 6&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;average grade (1 to 5, higher is better): 4.5&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;feedback comments:&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;- Prawdziwe warsztaty, bardzo ciekawie poprowadzone na konkretnym przykładzie. Nie mam do nich żadnych uwag.&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;- Miałem iść na C/C++ in Android Apps. Jednak mnogość instalowania narzędzi zniechęciła mnie (była sobota 16:00)... dosłownie na 1 minutę przed startem warsztatu przyszedłem tutaj. I nie żałuje. Skrótów wszystkich nie zapamiętałem, ale wiem dokładnie co można za ich pomocą osiągnąć. Formuła warsztatu wymagała ciągłego zaangażowania oraz umożliwiała świetną zabawę w poprawienie kodu kogoś innego :) Prelegent bardzo pozytywnie nastawiony do życia i moim zdaniem niezły kozak jeżeli chodzi o Intelli :)&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;- Very good workshop, I learned a lot about the Intellij Idea.&lt;/i&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Tutaj ocena nie jest już tak wysoka, ale i tak jest dobrze. Zwłaszcza że warsztat był w sobotę pod koniec dnia i większość już pewnie myślała o wieczornym piwie. Bardzo mnie tutaj ucieszyła druga opisowa opinia jednego z uczestników. Dzięki - kimkolwiek jesteś.&lt;br /&gt;
&lt;br /&gt;
Podczas analizowania feedbacku od uczestników moich warsztatów naszły mnie jednak smutne przemyślenia. Ludzie bardzo niechętnie dają opinię zwrotną drugiej osobie! Trzeba się o nią wręcz dopraszać i ciągnąć za język. Szkoda, że system głosowania na Warsjawie nie zadziałał, bo on mógłby dać trochę szerszy obraz oceny warsztatu. A tak, to ankietę pokonferencyjną – jak widać powyżej – mało komu chce się wypełnić. Nie wiem czy to wynika z naszej introwertycznej natury, nieśmiałości, poprawności politycznej, czy z problemu z wyrażaniem swoich odczuć? Przecież na co dzień przekzujemy dalej swoje opinie na temat kodu naszych współtowarzyszy projektu. Przecież robicie Code Review? A może nie?&lt;br /&gt;
&lt;br /&gt;
W każdym bądź razie prelegenci, czy też prowadzący warsztaty – zwłaszcza Ci poczatkujący – oczekują jakiejś zwrotnej opinii na temat swojej pracy! Wierzę w możliwość ciągłego udoskonalenia się i poprawiania swoich zdolności, aby kolejnym razem wypaść lepiej.&lt;br /&gt;
&lt;br /&gt;
W jaki sposób wiec najlepiej zbierać konstruktywne opinie o sobie i swojej pracy? Jak masz jakieś pomysły to koniecznie pisz w komentarzach!&lt;br /&gt;
&lt;br /&gt;
Chcę jeszcze dokonać publicznej konstruktywnej samooceny (aby dać przykład, jakie potknięcia warto wytykać) i napisać, co poszło mi nie tak na moich warsztatach, aby następnym razem nie popełnić tego samego błędu. Na pierwszym warsztacie zapomniałem puścić powitalny filmiki od organizatorów. Niestety, ale tuż przed samymi warsztatami musiałem trochę pozmieniać bazę w git’cie (mam na myśli &lt;i&gt;rebase&lt;/i&gt;, ale nie mam pojęcia jak to można na polski przetłumaczyć), aby historia na publicznym repo nie wyglądała później tak:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;
After reabse of 12 branches on master in &lt;a href=&quot;https://twitter.com/hashtag/git?src=hash&quot;&gt;#git&lt;/a&gt; &lt;a href=&quot;http://t.co/cQDWtdEtDJ&quot;&gt;pic.twitter.com/cQDWtdEtDJ&lt;/a&gt;&lt;br /&gt;
— Marcin Stachniuk (@MarcinStachniuk) &lt;a href=&quot;https://twitter.com/MarcinStachniuk/status/514061897038303233&quot;&gt;September 22, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;//platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
Z tego względu gdzieś mi umknęła wiadomość od organizatorów, prosząca o puszczenie filmików. Sory!&lt;br /&gt;
&lt;br /&gt;
Co do drugiego warsztatu, to trochę mniej się do niego przygotowałem (w sensie slajdów), ale na szczęście nie to było najważniejsze, co widać po ocenie. Ważne, że uczestnicy się świetnie bawili i wynieśli sporą wiedzę z warsztatu.&lt;br /&gt;
&lt;br /&gt;
Błędem był jednak brak porządnej aplikacji na telefon / tablet, pokazującej odliczany czas i dającej sygnał dźwiękowy co określony interwał. W tym warsztacie było bardzo ważne, aby co 5 minut robić zmianę, ale mój budzik nie zawsze dzwonił, przez co niektórzy siedzieli dłużej przy klawiaturze. Jak ktoś ma godną polecenia aplikację, do tego na Androida, to czekam na info!&lt;br /&gt;
&lt;br /&gt;
Również brak przerwy mniej więcej w połowie warsztatu był kiepskim pomysłem, gdyż to chyba szybko wymęczyło ludzi. W okolicach drugiej godziny, widziałem zmęczenie na twarzach uczestników. A przerwa tuż przed końcem warsztatów nie była wystarczająco odświeżająca.&lt;br /&gt;
&lt;br /&gt;
Mogłem również się trochę lepiej przygotować z implementowanego problemu, aby w razie dojścia do ślepego zaułku (do którego doszliśmy), aby szybko z niego wyskoczyć na właściwe tory. Do poprawienia następnym razem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Przy okazji konfitury, firma &lt;a href=&quot;https://www.spartez.com/&quot;&gt;Spartez&lt;/a&gt; zorganizowała jeszcze konkurs dla uczestników. Zadania można było rozwiązać wcześniej online, aby nie tracić czasu na samej konferencji. Jak zobaczyłem pytania (a było ich 6), od razu wiedziałem kto wygra – i nie pomyliłem się. Mimo wszystko zostałem wyróżniony i dostałem gadżety firmowe. Niestety ucho od kubka się potłukło w transporcie, ale jakoś mi specjalnie na nim nie zależało. Liczy się satysfakcja, z rozwiązanych zadań.&lt;br /&gt;
&lt;br /&gt;
Podsumowując, obydwie wysokie oceny z warsztatów motywują mnie do dalszego działania w sferze dzielenia się moją wiedzą z innymi. Jeśli więc chciałbyś, abym poprowadził któryś w/w warsztatów u Ciebie w mieście / w firmie, daj znać na priv – e-mail do mnie znajdziesz na tej stronie.&lt;br /&gt;
&lt;br /&gt;
A jeśli nie miałeś/-aś okazji uczestniczenia w moich warsztatach podczas Warsjawy, to być może, niedługo będzie taka możliwość w okolicach Wrocławia. Po więcej szczegółów zapraszam na stronę: &lt;a href=&quot;http://chamberconf.pl/&quot;&gt;chamberconf.pl&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/6152870105320644600/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/12/warsjawa-2014-podsumowanie-nr-2-i.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/6152870105320644600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/6152870105320644600'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/12/warsjawa-2014-podsumowanie-nr-2-i.html' title='Warsjawa 2014 podsumowanie nr 2 i dawanie feeedback’u'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-7294591900715887746</id><published>2014-11-07T17:54:00.002+01:00</published><updated>2014-11-07T17:54:47.204+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gradle"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><title type='text'>JDK 7 i 8 64 bit + Windows 7 - problemy z połączeniem internetowym</title><content type='html'>Co jakiś czas powraca do mnie problem na mojej maszynie związany chyba z kiepską implementacją IPv6 w 64 bitowym JVM lub Windowsie. Nie wiem dokładnie gdzie leży problem, ale już drugi raz spędziłem sporo czasu, aby znaleźć rozwiązanie, wiec czas na notatkę na blogu. Kłopot się objawia tym że maven / gradle / inny DSL do ściągania połowy Internetu, ma problemy ze dociągnięciem zależności i trzeba go ubić.&lt;br /&gt;
&lt;br /&gt;
Aby rozwiązać ten problem warto dodać / uaktualnić zmienną środowiskową JAVA_OPTS tak, aby znalazła się w niej poniższa flaga:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;-Djava.net.preferIPv4Stack=true
&lt;/pre&gt;
&lt;br /&gt;
W przypadku gradle’a warto to jeszcze wrzucić do pliku gradle.properties w naszym projekcie, np.:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;org.gradle.jvmargs=-Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true
&lt;/pre&gt;
&lt;br /&gt;
Teraz już powinno być lepiej, chyba ze akurat trafimy na jakąś przerwę w działaniu ogólnodostępnych repozytoriów, z których aktualnie korzystamy.&lt;br /&gt;
&lt;br /&gt;
Więcej informacji:&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/17648392/why-do-i-need-java-net-preferipv4stack-true-only-on-some-windows-7-systems&quot;&gt;Why do I need java.net.preferIPv4Stack=true only on some windows 7 systems?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://docs.oracle.com/javase/6/docs/technotes/guides/net/ipv6_guide/&quot;&gt;Networking IPv6 User Guide for JDK/JRE 5.0&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/7294591900715887746/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/11/jdk-7-i-8-64-bit-windows-7-problemy-z.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/7294591900715887746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/7294591900715887746'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/11/jdk-7-i-8-64-bit-windows-7-problemy-z.html' title='JDK 7 i 8 64 bit + Windows 7 - problemy z połączeniem internetowym'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-2615091972872503304</id><published>2014-11-06T08:43:00.000+01:00</published><updated>2014-11-06T08:43:23.127+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="książka"/><category scheme="http://www.blogger.com/atom/ns#" term="opinia"/><category scheme="http://www.blogger.com/atom/ns#" term="recenzja"/><title type='text'>Recenzja książki &quot;Czy jesteś wystarczająco bystry, żeby pracować w Google?&quot;</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinh0Ws8DuTb6iXyHZCwluPSaByrWczqTs_bR3H1-D2tD3QcAlo7OjW8M3q3-mbUBcTAtsVjmPBOgkbIjL7W-M3Y4r0DsLJu6pe-Rr8gCwYDFCqSo0DqpeBMtLyVqfsclbnTL4e1OubRrvz/s1600/Czy-jestes-wystarczajaco-bystry-zeby-pracowac-w-Google_William-Poundstone.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinh0Ws8DuTb6iXyHZCwluPSaByrWczqTs_bR3H1-D2tD3QcAlo7OjW8M3q3-mbUBcTAtsVjmPBOgkbIjL7W-M3Y4r0DsLJu6pe-Rr8gCwYDFCqSo0DqpeBMtLyVqfsclbnTL4e1OubRrvz/s1600/Czy-jestes-wystarczajaco-bystry-zeby-pracowac-w-Google_William-Poundstone.jpg&quot; height=&quot;200&quot; width=&quot;136&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Nie mam w zwyczaju recenzowania na blogu przeczytanych książek (wyjątkiem była dotychczas książka &lt;a href=&quot;http://kaczanowscy.pl/tomek/&quot;&gt;Tomka Kacznowskiego&lt;/a&gt;: &lt;a href=&quot;http://practicalunittesting.com/&quot;&gt;Practical Unit Testing&lt;/a&gt;), ale po przeczytaniu „Czy jesteś wystarczająco bystry, żeby pracować w Google?” Pana Poundstone Williama, postanowiłem to zmienić (aby pojawiały się na moim blogu nie tylko posty relacjonujące różne konferencje, ale i recenzje i tematy techniczne [o te najciężej ze względu na konieczny duży nakład na przygotowanie czegoś fajnego]). &lt;br /&gt;
&lt;br /&gt;
Na książkę wpadłem przypadkiem, będąc kiedyś w księgarni i standardowo przeglądając co jest na półce pod szyldem „informatyka”. Książka jest wydana przez &lt;a href=&quot;http://www.wsqn.pl/&quot;&gt;Wydawnictwo SQN&lt;/a&gt;, (na stronie &lt;a href=&quot;http://helion.pl/ksiazki/czy-jestes-wystarczajaco-bystry-zeby-pracowac-w-google-poundstone-william,a_006u.htm&quot;&gt;Heliona&lt;/a&gt; niby też jest, ale wiecznie „czasowo niedostępna”), więc pewnie niewielu z Was na nią trafiło. Sam pewnie bym ją szybciej kupił i przeczytał, gdyby wieść o niej przyszła do mnie wraz newsletter’em wspomnianej księgarni. &lt;br /&gt;
&lt;br /&gt;
Książka od samego początku opisuje z jakimi przywilejami wiąże się, wymarzona przez wielu, praca w Google. Szybko jednak przechodzi do tego, jak bardzo ciężko się tam dostać. W końcu jednej osobie na 130 kandydatów się to udaje. A dlaczego? Głównie ze względu na pytania otwarte, w których trzeba się wykazać swoimi umiejętnościami. Nie ma jednego zbioru pytań (i poprawnych odpowiedzi), z których korzystają podczas rekrutacji w Google. Pytania są tak ciężkie, że albo się już wcześniej zna pytanie wraz z poprawną odpowiedzią, albo się na nie raczej nie odpowie. Co gorsza, pytania często nie mają jednej poprawnej odpowiedzi.&lt;br /&gt;
&lt;br /&gt;
W książce jest również uzasadniona bezsensowność i bezcelowość prowadzenia rozmów kwalifikacyjnych.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Podczas rozmowy o pracę można stwierdzić, czy dana osoba potrafi miło prowadzić rozmowę, można zadać szereg pytań technicznych, by wykluczyć kandydatów, którzy nie mają zielonego pojęcia, o czym mówią, lecz po za tym można by równie dobrze rzucać kośćmi.&lt;/i&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
- twórca BitTorrenta, Bram Cohen&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
Niby coś tam można sprawdzić podczas rozmowy kwalifikacyjnej, ale to nie gwarantuje sukcesu, że kandydat sprawdzi się w danym projekcie lub firmie. Poza tym jest ciężko zweryfikować, czy odrzuceni kandydaci by się sprawdzili. Można jedynie zwiększać prawdopodobieństwo, że dany człowiek się nada.&lt;br /&gt;
&lt;br /&gt;
Dalej książka opisuje szczegóły odrzucania aplikacji kandydatów przez Google. Proces ten jest bardzo skomplikowany i decyzja zależy od wielu osób. Taki skomplikowany proces musi sporo kosztować firmę, ale dzięki temu jest ona pewniejsza, że ma u siebie tych najlepszych.&lt;br /&gt;
&lt;br /&gt;
Książka jest przepełniona zabawnymi historyjkami i anegdotami, które w dużej mierze uszczypliwie wyśmiewają podejście do problemów firmy Microsoft. Tzn. książka porównuje, jak pewne zadania rozwiązał by ktoś z Google, a jak ktoś z firmy produkującej Windowsy (lub cokolwiek innego). Ma to jednak na celu pokazanie innego sposobu myślenia.&lt;br /&gt;
&lt;br /&gt;
Powyższa książka nie mogłaby się oczywiście obejść bez zagadek. Są w niej opisane pytania logiczne, pytania wymagające przebłysku geniuszu, myślenia niestandardowego (lateralnego), myślenia rozbieżnego, pytania Fermiego i pytania oparte o algorytmy. Na początku każdego rozdziału, jak i często w środku, dostajemy porcję pytań, aby można było wytężyć swoje szare komórki i zatrzymać degradację neuronów. Oczywiście książka oferuje na koniec odpowiedzi do wszystkich zagadek, jak i praktyczne wskazówki, w jaki sposób próbować odpowiadać na te pytania.&lt;br /&gt;
&lt;br /&gt;
Podsumowując, polecam tę książkę każdej osobie technicznej, która chce zrobić coś więcej ze sobą niż tylko odbębnić 8 godzin w pracy. Książka nadaje się również dla osób, które nie koniecznie pracują w IT, a ich praca (aktualna lub przyszła) wymaga kreatywności i niestandardowego myślenia. Oczywiście jest to pozycja obowiązkowa dla tych, co wybierają się do Google.&lt;br /&gt;
&lt;br /&gt;
Btw. Za tydzień 15-stego listopada jest &lt;a href=&quot;http://globalday.coderetreat.org/&quot;&gt;Global Day of Code Retreat&lt;/a&gt;&amp;nbsp;i obywa się on również we Wrocławiu. Zostało jeszcze kilka wolnych miejsc, więc czas najwyższy się zarejestrować:&amp;nbsp;&lt;a href=&quot;http://coderetreat-2014-wroclaw.eventbrite.com/&quot;&gt;http://coderetreat-2014-wroclaw.eventbrite.com&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/2615091972872503304/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/11/recenzja-ksiazki-czy-jestes.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/2615091972872503304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/2615091972872503304'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/11/recenzja-ksiazki-czy-jestes.html' title='Recenzja książki &quot;Czy jesteś wystarczająco bystry, żeby pracować w Google?&quot;'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinh0Ws8DuTb6iXyHZCwluPSaByrWczqTs_bR3H1-D2tD3QcAlo7OjW8M3q3-mbUBcTAtsVjmPBOgkbIjL7W-M3Y4r0DsLJu6pe-Rr8gCwYDFCqSo0DqpeBMtLyVqfsclbnTL4e1OubRrvz/s72-c/Czy-jestes-wystarczajaco-bystry-zeby-pracowac-w-Google_William-Poundstone.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-4483573370806203504</id><published>2014-09-29T18:59:00.000+02:00</published><updated>2014-09-29T18:59:25.106+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDEA"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="testy"/><category scheme="http://www.blogger.com/atom/ns#" term="warsjawa"/><title type='text'>Warsjawa 2014, czyli ja jako prowadzący 2 warsztaty</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXKZ99cAYB0nRDSCWY4V_QlppW_hql5mhPtAGRYXjP0OrLOiXY17IrsaOStKsWuQTczMToqoop314aQisGW-_bghLX5pFY8O_NzhmYtLlJmIABSD1cuIyfm-tLezTC_8_CFIDsM6X4hPV/s1600/warsjawa-white.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXKZ99cAYB0nRDSCWY4V_QlppW_hql5mhPtAGRYXjP0OrLOiXY17IrsaOStKsWuQTczMToqoop314aQisGW-_bghLX5pFY8O_NzhmYtLlJmIABSD1cuIyfm-tLezTC_8_CFIDsM6X4hPV/s1600/warsjawa-white.png&quot; height=&quot;100&quot; width=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
W tym roku miałem okazję poprowadzić 2 warsztaty na &lt;a href=&quot;http://warsjawa.pl/&quot;&gt;Warsjawie&lt;/a&gt;. Wcześniej prowadziłem jedynie prezentacje (czy to w pracy czy na &lt;a href=&quot;http://mstachniuk.blogspot.com/2010/12/wrazenia-po-pierwszej-mojej-prezentacji.html&quot;&gt;WrocławJUG&lt;/a&gt;), a w formie warsztatów to był mój pierwszy raz! I od razu 2 różne tematy!&lt;br /&gt;
&lt;br /&gt;
Jak mi poszło? Uważam, że co najmniej dobrze. Wydaje mi się, że nie miałem większych potknięć, feedback zbierany od uczestników jest jak dotychczas pozytywny.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaWWVU2Yn7-dtcltBcosg1hppfVEJwOB2oPLjsmLUtxHIrIAsZmaCOIBkCMBlkRT5836FGcHpv2u8Ne3W08JB2-TCmYkO5Mo5sioUEsSA3BFiq-viv-N5G_3Bt7OFjGnC1JBE0DoXvNCV/s1600/Karol_Lipski.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaWWVU2Yn7-dtcltBcosg1hppfVEJwOB2oPLjsmLUtxHIrIAsZmaCOIBkCMBlkRT5836FGcHpv2u8Ne3W08JB2-TCmYkO5Mo5sioUEsSA3BFiq-viv-N5G_3Bt7OFjGnC1JBE0DoXvNCV/s1600/Karol_Lipski.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Podobne opinie słyszałem, gdy się podpytywałem uczestników, jak i przeczytałem w e-mailach. Pewnie coś więcej będę mógł się dowiedzieć (zwłaszcza liczę na uwagi krytyczne, aby wiedzieć co poprawić następnym razem), gdy uczestnicy wypełnią ankietę pokonferencyjną. Wszelakie e-maile i komentarze również mile widziane.&lt;br /&gt;
&lt;br /&gt;
A tymczasem zamieszczam poniżej materiały z których korzystałem.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Upiększ swoje testy! Testowanie jednostkowe dla średniozaawansowanych.&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;470&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/39650866&quot; style=&quot;border: 1px solid rgb(204, 204, 204); margin-bottom: 5px; max-width: 100%;&quot; width=&quot;580&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Kod używany na warsztacie:&amp;nbsp;&lt;a href=&quot;https://github.com/mstachniuk/SolarSystem&quot;&gt;https://github.com/mstachniuk/SolarSystem&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc z IntelliJ Idea.&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;470&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/39651041&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;580&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/MarcinStachniuk/idea-39651041&quot; target=&quot;_blank&quot; title=&quot;Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc z IntelliJ Idea&quot;&gt; &lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Kod napisany przez uczestników podczas warsztatów:&amp;nbsp;&lt;a href=&quot;https://github.com/mstachniuk/WarsjawaCodingDojo&quot;&gt;https://github.com/mstachniuk/WarsjawaCodingDojo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Co do samej konferencji, to minusy (z punktu widzenia prelegenta):&lt;br /&gt;
- nie do końca przygotowane sale (rzutnik, nasłonecznienie, jakieś pudła)&lt;br /&gt;
- system do komunikacji z uczestnikami nie wysyła załączników i wiadomości nie dochodzą do wszystkich&lt;br /&gt;
- nie do końca udany pomysł ze szwendaniem się po knajpach po konferencji&lt;br /&gt;
&lt;br /&gt;
A na plus:&lt;br /&gt;
- obecność zagranicznych spikerów&lt;br /&gt;
- wcześniejsza rejestracja dla prelegentów&lt;br /&gt;
- transparentnosć, co ile kosztowało&lt;br /&gt;
- długie przerwy, dobry timeline&lt;br /&gt;
&lt;br /&gt;
I oby tak dalej, albo i jeszcze lepiej!&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/4483573370806203504/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/09/warsjawa-2014-czyli-ja-jako-prowadzacy.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/4483573370806203504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/4483573370806203504'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/09/warsjawa-2014-czyli-ja-jako-prowadzacy.html' title='Warsjawa 2014, czyli ja jako prowadzący 2 warsztaty'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXKZ99cAYB0nRDSCWY4V_QlppW_hql5mhPtAGRYXjP0OrLOiXY17IrsaOStKsWuQTczMToqoop314aQisGW-_bghLX5pFY8O_NzhmYtLlJmIABSD1cuIyfm-tLezTC_8_CFIDsM6X4hPV/s72-c/warsjawa-white.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-420945039583222849</id><published>2014-09-11T23:39:00.000+02:00</published><updated>2014-09-12T10:21:24.860+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDEA"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="społeczność"/><category scheme="http://www.blogger.com/atom/ns#" term="warsjawa"/><category scheme="http://www.blogger.com/atom/ns#" term="WrocJUG"/><title type='text'>Rusza rejestracja na tegoroczną Warsjawę oraz moje tematy</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglkr1KQC3TEWe2789x2s18gX0KpLpt-u_G9lzTSNg_ZoUaG3vgP3VYFjkuUZnieVFWsh5cnGbDVqx0yVutcIBosWUtGlTKi0E8XS2auIsKEwLIjqCDXTQuCRF__IjsKJzcOZDo6pAr6IzJ/s1600/warsjawalogo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglkr1KQC3TEWe2789x2s18gX0KpLpt-u_G9lzTSNg_ZoUaG3vgP3VYFjkuUZnieVFWsh5cnGbDVqx0yVutcIBosWUtGlTKi0E8XS2auIsKEwLIjqCDXTQuCRF__IjsKJzcOZDo6pAr6IzJ/s1600/warsjawalogo.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Już niedługo (21.09.2014 21:00) ruszy rejestracja dla uczestników &lt;a href=&quot;http://warsjawa.pl/&quot;&gt;Warsjawy&lt;/a&gt; - darmowej konferencji, która składa się z samych warsztatów! Liczba miejsc jest ograniczona, dlatego warto się spieszyć, zwłaszcza, że jest szansa na warsztaty, które będzie prowadził Venkat Subramaniam! Jest to założyciel&amp;nbsp;&lt;a href=&quot;http://www.agiledeveloper.com/&quot;&gt;Agile Developer&lt;/a&gt;, autor wielu książek jak i świetny prelegent, którego mieliśmy okazję wielokrotnie oglądać na polskich konferencjach. Styl jego prezentacji jest specyficzny, a o części jego wystąpień można przeczytać na moim blogu.&lt;br /&gt;
&lt;br /&gt;
Dzięki wizycie Venkata w Warszawie, udało się go zaprosić także do Wrocławia i poprowadzi on wykład&amp;nbsp;&lt;a href=&quot;http://www.meetup.com/WroclawJUG/events/203655052/&quot;&gt;Programming with Lambda Expressions&lt;/a&gt; w ramach &lt;a href=&quot;http://wroclaw.jug.pl/&quot;&gt;WrocJUG&lt;/a&gt;. Będzie również warsztat:&amp;nbsp;&lt;a href=&quot;http://www.meetup.com/WroclawJUG/events/203654922/&quot;&gt;Programming Concurrency - Workshop&lt;/a&gt;, ale na niego nie ma już miejsc, a lista oczekujących jest długa.&lt;br /&gt;
&lt;br /&gt;
Jednocześnie zapraszam na warsztaty, które sam będę prowadził w ramach Warsjawy. Poniżej przedstawiam tematy, które będę prowadził, wraz z krótkim komentarzem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Czas:&lt;/b&gt; Piątek, 26 września 2014 13:00&lt;br /&gt;
&lt;b&gt;Temat:&lt;/b&gt; Upiększ swoje testy. Testowanie jednostkowe dla średnio zaawansowanych&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Opis:&lt;/b&gt; Warsztat jest przeznaczony dla średniozaawansowanych programistów Java, którzy napisali już trochę testów i chcieliby je upiększyć. Podczas warsztatu będziemy ćwiczyć tworzenie ładnej sekcji given (za pomocą Builder&#39;ów), jak i czytelniejsze zapisywanie assercji (za pomocą Hamcrest&#39;a, FEST&#39;a i AssertJ). Bedzie jeszcze o testowaniu wyjątków i testach parametrycznych. Warsztat będzie prowadzony po polsku, względnie może być po niemiecku;) Wymagane jest zabranie ze sobą własnego komputera ze skonfigurowanym środowiskiem programistycznym i opcjonalnie konto na GitHub&#39;ie (do przesyłania gist&#39;ów).&lt;br /&gt;
&lt;br /&gt;
Być może, jak starczy czasu, będzie można poćwiczyć jeszcze inne rzeczy, ale to już&amp;nbsp;zależy&amp;nbsp;głównie od prędkości grupy, jak i zainteresowania tym, co będą chcieli usłyszeć uczestnicy.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Czas:&lt;/b&gt; Sobota, 27 września 2014 16:00&lt;br /&gt;
&lt;b&gt;Temat:&lt;/b&gt;&amp;nbsp;Poznaj lepiej swoje środowisko programistyczne i zwiększ swoją produktywność z IntelliJ Idea&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Opis:&lt;/b&gt;&amp;nbsp;Każdy programista powinien poświęcić 10 godzin na dogłębne poznanie swojego zintegrowanego środowiska pracy, aby móc z niego efektywnie (i efektownie) korzystać! A Ty ile czasu na to poświęciłeś? Warsztat jest przeznaczony dla programistów Java, korzystających z IntelliJ Idea, lub chcących się go nauczyć. Warsztat będzie miał formę Coding Dojo, podczas którego będziemy wspólnie pisać Katę i wzajemnie uczyć się korzystania z Idei bez użycia myszki. Warsztat będzie prowadzony po polsku, względnie może być po niemiecku;) Własny komputer nie jest wymagany, gdyż będziemy kodować wspólnie na jednym, podpiętym do rzutnika. Przyda się za to notatnik i długopis do zapisywania nowopoznanych kombinacji klawiszowych.&lt;br /&gt;
&lt;br /&gt;
Na pomysł tego warsztatu wpadłem po tym, jak go z wielkim sukcesem przeprowadziłem w ostatnim projekcie. Po prostu, gdy udało się kupić IntelliJ Idea dla całego zespołu (o co bardzo ciężko walczyłem - skutecznie), musiałem wdrożyć kolegów w nowe środowisko. Wcześniej pokazywałem jedynie czym się różni Idea od Eclipse&#39;a, ale to nie to samo co praktyka przy klawiaturze. Nie chciałem również słyszeć narzekań, że teraz trzeba się na nowo uczyć wszystkich kombinacji klawiszowych.&lt;br /&gt;
&lt;br /&gt;
Zebrałem więc cały zespół, wyjaśniłem zasady i poszłooo! Było bardzo intensywnie, śmiesznie i co najważniejsze pouczająco. Ludzie wychodzili wówczas z sali z ugotowaną głową, ale widziałem później, że te warsztaty bardzo im pomogły. Zebrałem również bardzo pozytywne opinie na retrospektywie.&lt;br /&gt;
&lt;br /&gt;
Mam nadzieję, że na Warsjawie będzie równie gorąco.&lt;br /&gt;
&lt;br /&gt;
P.S. W razie jak byście chcieli się wcześniej zapisać na warsztaty, to przeczytajcie &lt;a href=&quot;https://twitter.com/erbetowski/status/510134152994492416&quot;&gt;ten&lt;/a&gt; status.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/420945039583222849/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/09/rusza-rejestracja-na-tegoroczna.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/420945039583222849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/420945039583222849'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/09/rusza-rejestracja-na-tegoroczna.html' title='Rusza rejestracja na tegoroczną Warsjawę oraz moje tematy'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglkr1KQC3TEWe2789x2s18gX0KpLpt-u_G9lzTSNg_ZoUaG3vgP3VYFjkuUZnieVFWsh5cnGbDVqx0yVutcIBosWUtGlTKi0E8XS2auIsKEwLIjqCDXTQuCRF__IjsKJzcOZDo6pAr6IzJ/s72-c/warsjawalogo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-432460178412628883</id><published>2014-09-01T22:29:00.000+02:00</published><updated>2014-09-05T10:45:23.367+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JUnit"/><category scheme="http://www.blogger.com/atom/ns#" term="Mockito"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerMock"/><category scheme="http://www.blogger.com/atom/ns#" term="testy"/><title type='text'>Implementacja Singleton’a w Javie</title><content type='html'>Ostatnio, podczas z jednej z rozmów rekrutacyjnych, dostałem pytanie, &quot;A jak by Pan zaimplementował singleton w Javie?&quot;. Pytanie dość standardowe, mógł by je zadać każdy. Odpowiadam więc: „Klasa, z prywatnym konstruktorem, z polem statycznym o typie zadeklarowanej klasy, metoda &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;getInstnce()&lt;/span&gt;, itd.”. Rekruter na to: &quot;No dobra, a jakiś inny pomysł?&quot;.&lt;br /&gt;
&lt;br /&gt;
Na szybko nie przychodziło mi jednak nic do głowy... Wtedy padło pytanie, które zmotywowało mnie do przygotowania tego wpisu: &quot;A czytał Pan &lt;a href=&quot;http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683&quot;&gt;Effective Java, Joshua Bloch&lt;/a&gt;?&quot;. A no nie czytałem i nie sądzę, abym ją przeczytał.&lt;br /&gt;
&lt;br /&gt;
Dlaczego?&lt;br /&gt;
&lt;br /&gt;
Przede wszystkim uważam że ta książka jest trochę przestarzałą. Drugie wydanie pochodzi z 2008 roku i informacje w niej zawarte są trochę nieaktualne. To nie książka o &lt;a href=&quot;http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612&quot;&gt;wzorcach projektowych Bandy Czworga&lt;/a&gt;, która nie traci na swojej aktualności, a jedynie pozycja o tym jak coś tam dobrze zrobić w Javie. I tak przykładowo rozdział: &quot;Item 51 Beware the performance of string concatenation&quot;, traktujące o tym, aby lepiej używać &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;StringBuilder&lt;/span&gt;’a niż &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;+&lt;/span&gt; do sklejania tekstów, jest już dawno nieaktualne! Chciałem kiedyś pisać posta o tym, ale na &lt;a href=&quot;https://stackoverflow.com/questions/10078912/best-practices-performance-mixing-stringbuilder-append-with-string-concat&quot;&gt;stackoverflow&lt;/a&gt; i jeszcze gdzieś tam już dawno o tym było. Nie wiem tylko od kiedy dokładnie istnieje ten mechanizm zamiany &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;+&lt;/span&gt; na &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;StringBuilder&lt;/span&gt;’a w Javie.&lt;br /&gt;
&lt;br /&gt;
O innych dobrych praktykach, można się dowiedzieć zawsze z innych źródeł, niekoniecznie czytając wspomnianą książkę.&lt;br /&gt;
&lt;br /&gt;
Dobra wróćmy do tematu wpisu. W innym rozdziale Effective Java (Item 3: Enforce the singleton property with a private constructor or an enum type), jest zalecenie, aby Singletona implementować za pomocą Enuma. Z tym rozwiązaniem spotkałem się po raz pierwszy podczas review kodu kogoś, kto czytał tę książkę. Użycie wówczas enuma w roli singletonu było dla mnie zupełnie niezrozumiałe! Musiałem dopytać autora o co chodzi.&lt;br /&gt;
&lt;br /&gt;
Dlaczego nie lubię tego rozwiązania? Spójrzmy na przykładowy kawałek kodu (inspirowany Joshuą Blochem, co bym za dużo nie musiał wymyślać, jak tu mądrze użyć singletona). Kod jest i tak kiepski (obliczanie czasu), ale chodzi mi o zaprezentowanie działania omawianego wzorca.&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public enum Elvis {
    INSTANCE;

    private final int ELVIS_BIRTHDAY_YEAR = 1935;

    public int howOldIsElvisNow() {
        return new GregorianCalendar().get(Calendar.YEAR) - ELVIS_BIRTHDAY_YEAR;
    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class ElvisProfitService {

    public double ELVIS_SALARY_YEAR = 70_000;

    public double calculateElvisProfit() {
        return Elvis.INSTANCE.howOldIsElvisNow() * ELVIS_SALARY_YEAR;
    }
}
&lt;/pre&gt;
&lt;br /&gt;
No i weź tu panie przetestuj taki kod! Możemy jeszcze Elvisa statycznie zaimportować, to linijka 6 skróci się do jeszcze mniej czytelnej formy.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;return INSTANCE.howOldIsElvisNow() * ELVIS_SALARY_YEAR;
&lt;/pre&gt;
&lt;br /&gt;
Ktoś ma jakieś pomysły jak taki kod przetestować? Da się oczywiście, z wykorzystaniem &lt;a href=&quot;https://code.google.com/p/powermock/&quot;&gt;PowerMock&lt;/a&gt;’a [link do rozwiązania na końcu ^1], ale chyba nie o to chodzi aby pisać nietestowany kod?&lt;br /&gt;
&lt;br /&gt;
Dlaczego wolę starszą wersję tegoż rozwiązania:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class Elvis {

    private static final Elvis INSTANCE = new Elvis();

    private final int ELVIS_BIRTHDAY_YEAR = 1935;

    private Elvis() {
    }

    public static Elvis getInstance() {
        return INSTANCE;
    }

    public int howOldIsElvisNow() {
        return new GregorianCalendar().get(Calendar.YEAR) - ELVIS_BIRTHDAY_YEAR;
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Dochodzi prywatny konstruktor, statyczna metoda &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;getInstance()&lt;/span&gt; i inicjalizacja pola klasy wraz z deklaracją.&lt;br /&gt;
&lt;br /&gt;
W tym przypadku kod korzystający z tego singletonu, mógłby być następujący:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class ElvisProfitService {

    private final double ELVIS_SALARY_YEAR = 70_000;
    private Elvis elvis = Elvis.getInstance();

    public double calculateElvisProfit() {
        return elvis.howOldIsElvisNow() * ELVIS_SALARY_YEAR;
    }

    // For tests
    void setElvis(Elvis elvis) {
        this.elvis = elvis;
    }
}
&lt;/pre&gt;
&lt;br /&gt;
W linii 4 wywołałem &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;getInstance()&lt;/span&gt;, aby w przykładowym kodzie produkcyjnym było wszystko cacy. Dzięki temu, zależność ta jest definiowana jako pole w kasie i mamy setter do tego, więc możemy sobie bardzo ładnie przetestować tą funkcjonalność, bez hackowania z PowerMockiem:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class ElvisProfitServiceTest {

    @Test
    public void shouldCalculateElvisProfit() {
        // given
        ElvisProfitService service = new ElvisProfitService();
        Elvis elvis = mock(Elvis.class);
        when(elvis.howOldIsElvisNow()).thenReturn(1);
        service.setElvis(elvis);

        // when
        double elvisProfit = service.calculateElvisProfit();

        // then
        assertEquals(70_000, elvisProfit, 0.1);
    }
}
&lt;/pre&gt;
&lt;br /&gt;
W sekcji given mamy bardzo ładnie zdefiniowane zachowanie, za pomocą &lt;a href=&quot;https://code.google.com/p/mockito/&quot;&gt;Mockito&lt;/a&gt;, jakie ma przyjmować masz singleton na potrzeby tego testu.&lt;br /&gt;
&lt;br /&gt;
A Ty jak definiujesz (o ile to robisz) swoje singletony? Które rozwiązanie uważasz za lepsze?&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
[1] Co do rozwiązania zagadki, jak przetestować Singletona jako Enum’a, to tutaj jest odpowiednia rewizja na github’ie: &lt;a href=&quot;https://github.com/mstachniuk/SingletonInJava/commit/e714fb866d4ff5463e16925697dbabfe991fff39&quot;&gt;SingletonInJava&amp;nbsp;e714fb&lt;/a&gt;&amp;nbsp;a kod poniżej:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;@RunWith(PowerMockRunner.class)
@MockPolicy(ElvisMockPolicy.class)
public class ElvisProfitServiceTest {

    @Test
    public void shouldCalculateElvisProfit() {
        // given
        ElvisProfitService service = new ElvisProfitService();

        // when
        double elvisProfit = service.calculateElvisProfit();

        // then
        assertEquals(70_000, elvisProfit, 0.1);
    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public class ElvisMockPolicy implements PowerMockPolicy {

    @Override
    public void applyClassLoadingPolicy(MockPolicyClassLoadingSettings settings) {
        settings.addFullyQualifiedNamesOfClassesToLoadByMockClassloader(&quot;com.blogspot.mstachniuk.singletoninjava.Elvis&quot;);
    }

    @Override
    public void applyInterceptionPolicy(MockPolicyInterceptionSettings settings) {
        Method method = Whitebox.getMethod(Elvis.class, &quot;howOldIsElvisNow&quot;);
        settings.proxyMethod(method, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                return 1.0;
            }
        });
    }
}
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/432460178412628883/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/09/implementacja-singletona-w-javie.html#comment-form' title='Komentarze (10)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/432460178412628883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/432460178412628883'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/09/implementacja-singletona-w-javie.html' title='Implementacja Singleton’a w Javie'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-5804103667326933733</id><published>2014-07-17T15:25:00.000+02:00</published><updated>2014-07-17T15:25:36.165+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDEA"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Wyższy poziom produktywności w IntelliJ Idea</title><content type='html'>Ostatnio natrafiłem na &lt;a href=&quot;http://2014.geekout.ee/presentations&quot;&gt;nagrania&lt;/a&gt; z konferencji &lt;a href=&quot;http://2014.geekout.ee/&quot;&gt;Geekout z Estonii&lt;/a&gt;. Zainteresowała mnie 3cia prezentacja: &lt;a href=&quot;http://vimeo.com/98922030&quot;&gt;Mouseless Driven Development by Hadi Hariri&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;281&quot; mozallowfullscreen=&quot;&quot; src=&quot;//player.vimeo.com/video/98922030&quot; webkitallowfullscreen=&quot;&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;br /&gt;
Prelegent (pracownik JetBains’a) opowiadał o tym jak efektywnie kodować bez użycia myszki. Myślałem, że już dostatecznie poznałem to moje ulubione środowisko developerskie, ale jak zobaczyłem pierwszą ciekawostkę, którą pokazał Hadi, to zacząłem robić notatki. A skoro notatki to już nie wiele trzeba, aby był wpis na bloga…&lt;br /&gt;
&lt;br /&gt;
Uważam, że najlepszą metodą poznawania środowiska pracy, jest patrzenie jak korzystają z niego inni. I to może być przy okazji warsztatów typu &lt;a href=&quot;http://coderetreat.org/&quot;&gt;Code Retreat&lt;/a&gt;, &lt;a href=&quot;http://codingdojo.org/&quot;&gt;Coding Dojo&lt;/a&gt; czy innych &lt;a href=&quot;https://en.wikipedia.org/wiki/Hackathon&quot;&gt;hackathon&#39;ów&lt;/a&gt;, lub właśnie oglądając screencasty i wystąpienia z konferencji. Zachęcam do obejrzenia powyższego video (choć ten efekt z przekrzywionym obrazem z rzutnika uważam za głupi), gdyż opisałem poniżej rzeczy dla mnie nowe, tudzież te wymagające mojego odświeżenia. Warto, przed dalszą lekturą tego wpisu, znać choć połowę skrótów z &lt;a href=&quot;http://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard.pdf&quot;&gt;IntelliJIDEA_ReferenceCard.pdf&lt;/a&gt;, gdyż niżej będzie o bardziej zaawansowanych zagadnieniach. A więc do dzieła!&lt;br /&gt;
&lt;br /&gt;
Jak wszyscy zapewne wiedzą (albo powinni wiedzieć), &lt;b&gt;Ctrl + N&lt;/b&gt; otwiera klasy lub pliki (gdy dwa razy naciśniemy tą kombinację, lub &lt;b&gt;Ctrl + Shift + N&lt;/b&gt;). I tutaj nazwę możemy podawać w szelaki sposób: CamelCase, snake_case (ale dla ułatwienia ze spacją), wspomagając się gwiazdką itd. Idea będzie szukać wszystkiego co pasuje i wyświetli w logicznym porządku. W Eclipse „jakoś tam” też to działa, ale o wiele gorzej.&lt;br /&gt;
&lt;br /&gt;
Ale co mnie właściwie onieśmieliło, to gdy pisząc po nazwie klasy &lt;i&gt;:&amp;lt;numer lini&amp;gt;&lt;/i&gt; (słownie: dwukropek i numer linii), plik zostanie otworzony na żądanej pozycji! Ciekawie działa również &lt;b&gt;Alt + F1&lt;/b&gt;, które pozwala otworzyć nam plik np. w Project View, Structure, Exporatorze Windowsa, i w innych oknach. A chcąc otworzyć plik w osobnym oknie można zamiast Entera wcisnąć &lt;b&gt;Shift + Enter&lt;/b&gt;. A jak chcemy wyszukiwać wszędzie, to możemy to zrobić za pomocą podwójnego naciśnięcia &lt;b&gt;Shift&lt;/b&gt;. Część tych wskazówek zaczerpnąłem ze strony JetBrains’a: &lt;a href=&quot;http://www.jetbrains.com/idea/webhelp/navigating-to-class-file-or-symbol-by-name.html&quot;&gt;Navigating to Class, File or Symbol by Name&lt;/a&gt;, a część z opisanego na początku video.&lt;br /&gt;
&lt;br /&gt;
Do wyszukiwania użycia jakiejś zmiennej lub metody, zawsze korzystałem z &lt;b&gt;Alt + F7&lt;/b&gt;. Jest to skrót, który swoimi korzeniami sięga &lt;a href=&quot;http://www.ghisler.com/&quot;&gt;TotalCommandera&lt;/a&gt;, a nawet &lt;a href=&quot;https://pl.wikipedia.org/wiki/Norton_Commander&quot;&gt;Norton Commandera&lt;/a&gt;. Podobnie jest zresztą z &lt;b&gt;Shift + F6&lt;/b&gt;&amp;nbsp;- rename. Natomiast jak chcemy widzieć dolnego okienka z wynikami poszukiwań, możemy skorzystać z &lt;b&gt;Ctrl + F7&lt;/b&gt;, które to skoczy nam do pierwszego wykorzystania i zaznaczy pozostałe. A jak byśmy chcieli podświetlić wykorzystanie wielu różnych zmiennych, to na każdej możemy skorzystać z &lt;b&gt;Ctrl + Shift + F7&lt;/b&gt;. Jeszcze podobnie zachowuje się &lt;b&gt;Ctrl + Alt + F7&lt;/b&gt;, które to pokazuje wyniki wyszukiwania w popupie. Poniżej przykłady z mojego projektu &lt;a href=&quot;https://github.com/mstachniuk/HamcrestVsFest&quot;&gt;HamcrestVsFest&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_iPskAQAjAn0cZLSrBwLlqFdbVjshQBDrk3FsAa1715aZIeWQt7KbQVw-NckY38hvB7OoiIn3xwnM5tB827h-RjsA7K6OtJh_5sZfdU6m7HgkTdKhtT8mmsKbDLv8IfHz2QQWWkpp2qw2/s1600/Alt+F7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_iPskAQAjAn0cZLSrBwLlqFdbVjshQBDrk3FsAa1715aZIeWQt7KbQVw-NckY38hvB7OoiIn3xwnM5tB827h-RjsA7K6OtJh_5sZfdU6m7HgkTdKhtT8mmsKbDLv8IfHz2QQWWkpp2qw2/s1600/Alt+F7.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Alt&amp;nbsp;+ F7&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAE5UeFG_GD5kH_Iq9I3zsEPjB05cFhHbynwmdRmsbB9vj51urCtfXA3ddN_ZGpwa0d9nPQdAY-J_yCtorm28nLiF7vCN1PdB7cMthL7AQRIGPc-_I7_nu5ySeB6D2l5n1mJEasaE3fEc/s1600/Ctrl+F7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAE5UeFG_GD5kH_Iq9I3zsEPjB05cFhHbynwmdRmsbB9vj51urCtfXA3ddN_ZGpwa0d9nPQdAY-J_yCtorm28nLiF7vCN1PdB7cMthL7AQRIGPc-_I7_nu5ySeB6D2l5n1mJEasaE3fEc/s1600/Ctrl+F7.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Ctrl&amp;nbsp;+ F7&lt;/b&gt;. Obiekt mercury jest tworzony w lini 10, ale po raz pierwszy jest użyty w linii 20.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO9JWN7sXsgcIUmkmgDYes_8hpBzN73WYDQ90owZR6zRTDUSj1PUxkG7aXvZG4_Mr8ztTrKppn5kXidB9gnVJgkZn1hcd-c-kOpMGDscc-jAE_YnVJO8N_xKF7SzBYHKyHm9o1ld5ERBSi/s1600/Ctrl+Shift+F7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO9JWN7sXsgcIUmkmgDYes_8hpBzN73WYDQ90owZR6zRTDUSj1PUxkG7aXvZG4_Mr8ztTrKppn5kXidB9gnVJgkZn1hcd-c-kOpMGDscc-jAE_YnVJO8N_xKF7SzBYHKyHm9o1ld5ERBSi/s1600/Ctrl+Shift+F7.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Ctrl&amp;nbsp;+ Shift&amp;nbsp;+ F7&lt;/b&gt;. Tutaj wykonane na &lt;i&gt;mercury&lt;/i&gt;, &lt;i&gt;PlanetBuilder&lt;/i&gt;, &lt;i&gt;RotationDirection&lt;/i&gt; i &lt;i&gt;Gases&lt;/i&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzNb9lnc22L5Egr7Hq0dvz8j0eE41u-LPWz5rsT1bugWe8mTedr6UwbFWSiaSxlh49hWVkx24wtNbhrA_-_3or-l7sZfPKEx3DVGK5qCkSLs1vJCVnMihXUJCMvc8BeuXIsTup_JzqBgLh/s1600/Ctrl+Alt+F7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzNb9lnc22L5Egr7Hq0dvz8j0eE41u-LPWz5rsT1bugWe8mTedr6UwbFWSiaSxlh49hWVkx24wtNbhrA_-_3or-l7sZfPKEx3DVGK5qCkSLs1vJCVnMihXUJCMvc8BeuXIsTup_JzqBgLh/s1600/Ctrl+Alt+F7.png&quot; height=&quot;155&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Ctrl&amp;nbsp;+ Alt&amp;nbsp;+ F7&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Dalej było o tym, jak zmaksymalizować przestrzeń na pisanie kodu. I tak prelegent, przekonywał nas, że można się obejść bez nawigation bara na górze ekranu.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeV2L1Lwt9A9x3HUjcBHdidEJiHJav3Vr4fMnGzVGSpgaCvZzBNOAd45io9RJDzX5A4VP3GbKyy3nXQkJBxhuj8GYvCtj5fASLHStyTDnQIlP6yDBTRckGdUV-LRFmMuRgVw_pxEa6RQeU/s1600/navigation+bar.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeV2L1Lwt9A9x3HUjcBHdidEJiHJav3Vr4fMnGzVGSpgaCvZzBNOAd45io9RJDzX5A4VP3GbKyy3nXQkJBxhuj8GYvCtj5fASLHStyTDnQIlP6yDBTRckGdUV-LRFmMuRgVw_pxEa6RQeU/s1600/navigation+bar.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
To ten pasek, gdzie jest rozpisane, w jakim pakiecie i pliku aktualnie jesteśmy. Nie jest on nam potrzebny, bo możemy się dostać do niego za pomocą &lt;b&gt;Alt + Home&lt;/b&gt;. Mi osobiście on nie przeszkadza, bo jest na tym samym poziomie, co ostatnio uruchamiana konfiguracja projektu, a to lubię widzieć.&lt;br /&gt;
&lt;br /&gt;
Nie potrzebujemy również Tab’ek, gdy mamy wiele otwartych plików, bo przeglądanie ich i szukanie odpowiedniej po nazwie zajmuje wiele czasu.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLd7-jtDnPXnGPvmw7OvG363frJes_U93bmdBbXROg2chyphenhyphenQXYhZykFYugbKgxdg-yvtUUyIRxBOQkBLQ_r3tDcqOPIfyo3yeWT-89xQzuzMB6HkY7bq6Cq-89kGMcBdmrifS0xrCzOrNqZ/s1600/FileTabs.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLd7-jtDnPXnGPvmw7OvG363frJes_U93bmdBbXROg2chyphenhyphenQXYhZykFYugbKgxdg-yvtUUyIRxBOQkBLQ_r3tDcqOPIfyo3yeWT-89xQzuzMB6HkY7bq6Cq-89kGMcBdmrifS0xrCzOrNqZ/s1600/FileTabs.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
Tak naprawdę potrzebujemy tylko &lt;b&gt;Ctrl + E&lt;/b&gt;, które w bardziej czytelny sposób nam pokazuje, jakie pliki ostatnio przeglądaliśmy i szybciej je w ten sposób odnajdziemy. Jeśli zależy nam tylko na tych które ostatnio edytowaliśmy, to możemy skorzystać z &lt;b&gt;Ctrl + Shift + E&lt;/b&gt;. Jest to ulubiony skrót prowadzącego prezentację do tego stopnia, że musi używać zewnętrznej klawiatury w laptopie, bo przycisk &lt;b&gt;E&lt;/b&gt; mu się zepsuł. Przykłady użycia poniżej, a Tab&#39;ki możemy całkowicie wyłączyć w ustawieniach.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVMMY_U8aqQiQLLtlOXGCjbap8SbhV1qXNcQDCIFjVExcVX2p39AVTFhoF2-SvkWnHiZH4ScloleIX2tPjvwTtARdouRL3GcaS2gaEMmqk6sfmEoTQZAMdeoFKRKA31tP8D4M6lDfaKKto/s1600/Ctrl+E.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVMMY_U8aqQiQLLtlOXGCjbap8SbhV1qXNcQDCIFjVExcVX2p39AVTFhoF2-SvkWnHiZH4ScloleIX2tPjvwTtARdouRL3GcaS2gaEMmqk6sfmEoTQZAMdeoFKRKA31tP8D4M6lDfaKKto/s1600/Ctrl+E.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Ctrl&amp;nbsp;+ E&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;&lt;td&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz_LxyIB6vu9MOqX-gwDy5nWaujzNcwdG08muVTA3aaJzTNbPhQmhmsuW94vC-2DUbamp0OBCOeUAhfZMseioa-QGKGfdp8J39znZ819jeGgZP7Eo2pGamFkr81qMte7SMFCB41SIkI91a/s1600/Ctrl+Shift+E.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz_LxyIB6vu9MOqX-gwDy5nWaujzNcwdG08muVTA3aaJzTNbPhQmhmsuW94vC-2DUbamp0OBCOeUAhfZMseioa-QGKGfdp8J39znZ819jeGgZP7Eo2pGamFkr81qMte7SMFCB41SIkI91a/s1600/Ctrl+Shift+E.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Ctrl&amp;nbsp;+ Shift&amp;nbsp;+ E&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifsZksVWfzb8xjIAmrcmHYfCCfinTcfD3ZmLV6jT1x6jShauLMAsMUL5bkhyXLs5Gj9QPa0DHx184IpuQRgCkDIP0aMCSxBsHhU2m8GSLfB1IVBoezOm-6p3H6_vTp-fjRBR1VXz1_KXWL/s1600/Tabki+settings.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifsZksVWfzb8xjIAmrcmHYfCCfinTcfD3ZmLV6jT1x6jShauLMAsMUL5bkhyXLs5Gj9QPa0DHx184IpuQRgCkDIP0aMCSxBsHhU2m8GSLfB1IVBoezOm-6p3H6_vTp-fjRBR1VXz1_KXWL/s1600/Tabki+settings.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Jak usunąć Tab&#39;ki z otwartymi plikami.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Przeskakiwać pomiędzy poszczególnymi oknami w IntelliJ Idea można za pomocą &lt;b&gt;Alt + &amp;lt;numer okienka&amp;gt;&lt;/b&gt;, widoczny przy jego nazwie&lt;b&gt;.&lt;/b&gt;&amp;nbsp;Niestety nie na wszystkie okienka wystarczyło numerków, więc jak chcemy np. dostać się do Mavena lub Bazy danych, to &lt;b&gt;Ctrl + Tab&lt;/b&gt; jest twoim przyjacielem.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoddobXK7ULZGPkytrx_vNztLN7NWYgTstm8ziGFgBtMQodcyoiiIfrgLrkOul-h_kLOjyus6c79GlKPF8Co_LRJZ2VcbhXlTyo-bvgAAJHT5CYF9IegQ93gnYPEJ-ubTchT75flIU_TX0/s1600/Ctrl+Tab.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoddobXK7ULZGPkytrx_vNztLN7NWYgTstm8ziGFgBtMQodcyoiiIfrgLrkOul-h_kLOjyus6c79GlKPF8Co_LRJZ2VcbhXlTyo-bvgAAJHT5CYF9IegQ93gnYPEJ-ubTchT75flIU_TX0/s1600/Ctrl+Tab.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Ctrl&amp;nbsp;+ Tab&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
A jak już w ogóle byśmy chcieli tylko i wyłącznie kod widzieć, to warto się zapoznać z Prezentation Mode. Warto na Windowsie sobie zdefiniować skrót &lt;b&gt;Ctrl + Shift + P&lt;/b&gt; jako wejście do tego trybu. Na pewno może się to przydać podczas prezentacji, jak i osobom lubiącym widzieć tylko kod na ekranie.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Następnie poznałem nowe znaczenie &lt;b&gt;F4&lt;/b&gt; w oknie projektu. Dotychczas używałem tego klawisza tylko do otwierania właściwości projektu, a w ten sposób można również otworzyć plik i automatycznie skoczyć do jego edycji. Jest to lepsze od oczywistego &lt;b&gt;Entera&lt;/b&gt;, który tylko otwiera wybrany plik, ale fokus pozostaje na oknie projektu.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
A co z operacjami typowymi dla myszki, jak dostrajanie wielkości okna projektu? Sam dotychczas myślałem, że jest to jedynie możliwe za pomocą myszki, ale da się też z klawiatury! To kolejne moje wielkie odkrycie z tej prezentacji, po którym mi i osobom na sali opadła szczęka. Chcąc przykładowo zmienić rozmiar widoku projektu, musimy mieć na nim focus (&lt;b&gt;Alt + 1&lt;/b&gt;) i teraz już wciskamy tylko &lt;b&gt;Ctrl + Shift + Prawo / Lewo&lt;/b&gt;. Okno z wynikami testu? Po porostu &lt;b&gt;Alt + 4&lt;/b&gt; aby uzyskać fokus i &lt;b&gt;Ctrl + Shift + Góra / Dół&lt;/b&gt;. Na oknie z kodem to nie działa, gdyż te skróty odpowiadają za zaznaczanie tekstu i przenoszenie linii w pionie.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Było jeszcze o mulitikursorze, który swoim zasięgiem może objąć wiele wierszy. Tu już trzeba zrobić z użyciem prawego &lt;b&gt;Alt’a i myszki&lt;/b&gt;. Ale Idea proponuje jeszcze &amp;nbsp;coś innego, a mianowicie &lt;b&gt;Alt + J&lt;/b&gt;, które zaznacza dany tekst w pliku i tworzy multikursor. Jest jeszcze: &lt;b&gt;Ctrl + Alt + Shift + J&lt;/b&gt;, ale jak to działa, sprawdźcie sami. Aby opuścić ten tryb edycji, trzeba wcisnąć &lt;b&gt;2 x Esc&lt;/b&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Warto przypomnieć o Live Templates (&lt;b&gt;Ctrl + J&lt;/b&gt;) i &lt;a href=&quot;http://www.jetbrains.com/idea/webhelp/using-postfix-templates.html&quot;&gt;Postfix templates&lt;/a&gt;, o których to się nie pamięta, a za pomocą których można tworzyć kod w ciekawszy sposób. Możemy również otaczać kawałek kodu różnymi konstrukcjami (np. &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;if&lt;/span&gt;, &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;try/catch&lt;/span&gt;, itp.) za pomocą &lt;b&gt;Ctrl + Alt + T&lt;/b&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Warto także utworzyć własną szybka listę (&lt;i&gt;Quick Lists&lt;/i&gt; w &lt;i&gt;Settings&lt;/i&gt;), gdzie można wrzucić operacje, które często używamy i przypisać wywołaniu tej listy jakiś skrót klawiaturowy. Muszę sobie przygotować taką listę, z rzeczami które często potrzebuję, a nie mają domyślnego skrótu klawiaturowego.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Na koniec jeszcze pozostaje nam &lt;b&gt;Ctrl + ~&lt;/b&gt;, które to umożliwia nam szybką zmianę, m.in. kolorów, Look and Feel jak i skrótów klawiaturowych (przykładowo na te z Eclipse’a). Może się to przydać, gdy akurat musimy zrobić Pair Programing z użytkownikiem Eclipse’a.&amp;nbsp;I aby śledzić nasze postępy w niewykorzystywaniu myszki, warto się przyjrzeć statystykom z menu &lt;i&gt;Help -&amp;gt; Productivity Guide&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
A Ty jakie znasz bardziej zaawansowane i skomplikowane skróty w IntelliJ Idea? Pisz w komentarzu!&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/5804103667326933733/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/wyzszy-poziom-produktywnosci-w-intellij.html#comment-form' title='Komentarze (13)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5804103667326933733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5804103667326933733'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/wyzszy-poziom-produktywnosci-w-intellij.html' title='Wyższy poziom produktywności w IntelliJ Idea'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_iPskAQAjAn0cZLSrBwLlqFdbVjshQBDrk3FsAa1715aZIeWQt7KbQVw-NckY38hvB7OoiIn3xwnM5tB827h-RjsA7K6OtJh_5sZfdU6m7HgkTdKhtT8mmsKbDLv8IfHz2QQWWkpp2qw2/s72-c/Alt+F7.png" height="72" width="72"/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-5105825280567534845</id><published>2014-07-11T00:35:00.000+02:00</published><updated>2014-07-11T00:35:37.071+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="confitura"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><category scheme="http://www.blogger.com/atom/ns#" term="społeczność"/><title type='text'>Konfitura, marmolada, dżem, powidło i spiżarnia, czyli wrażenia po confiturze 2014</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSBDKB7nvZznBnO88_UVuHRyof_T6zn4iAdwewPKfas_W1vgplHjQseoZ94-4wrFCUG-lHgWq_tUb2oGyi5NAU-iLE6GZUFJvLG-ewL1c9olmk_MkEC_Jt1E42tglyB1UK96qZjTsAhHf/s1600/man.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSBDKB7nvZznBnO88_UVuHRyof_T6zn4iAdwewPKfas_W1vgplHjQseoZ94-4wrFCUG-lHgWq_tUb2oGyi5NAU-iLE6GZUFJvLG-ewL1c9olmk_MkEC_Jt1E42tglyB1UK96qZjTsAhHf/s1600/man.png&quot; height=&quot;200&quot; width=&quot;192&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;Rapid dev environments, Marcin Brański i Przemek Hejman&lt;/b&gt;&lt;br /&gt;
Prelegenci opowiadali o tym w jaki sposób tworzyć środowiska developerskie, a właściwie ich konfiguracje i obrazy, aby później można było je szybko odtworzyć np. na nowej maszynie. Chłopaki bardzo sprawnie i płynnie mówili, widać, że przećwiczyli to wystąpienie wcześniej. Ale niestety używali w swoich wypowiedziach sporo skrótów, które nie koniecznie musieli wszyscy znać. Pokazywali również sporo detalów, a zabrakło mi jakiegoś big picture, co do czego jest, oraz czym różnią się opisywane rozwiązania.&lt;br /&gt;
&lt;br /&gt;
I tak oto było o następujących narzędziach: &lt;a href=&quot;http://www.packer.io/&quot;&gt;Packer.io&lt;/a&gt;, &lt;a href=&quot;http://puppetlabs.com/&quot;&gt;Puppet&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.ansible.com/&quot;&gt;Ansible&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.getchef.com/chef/&quot;&gt;Chef&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.saltstack.com/&quot;&gt;Salt&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.fabfile.org/&quot;&gt;Fabric&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.docker.com/&quot;&gt;Docker&lt;/a&gt; i &lt;a href=&quot;http://orchardup.github.io/fig/&quot;&gt;Fig&lt;/a&gt; (nakładka na dockera). Niestety z powodu znikomej znajomości tematu nie jestem w stanie nic więcej tutaj napisać.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Git nie dla początkujących, Tomasz Borek&lt;/b&gt;&lt;br /&gt;
Tomek na początku przedstawił różnicę, pomiędzy surowym repozytorium (utworzonym z flagą --bare), a zwykłym repozytorium. Dalej już było ciekawiej. Prelegent pokazywał, co tak naprawdę jest potrzebne w katalogu &lt;i&gt;.git&lt;/i&gt;, aby istniało repozytorium. I tak są to katalogi: &lt;i&gt;objects&lt;/i&gt; i &lt;i&gt;refs/heads&lt;/i&gt; oraz plik &lt;i&gt;HEAD&lt;/i&gt; z zawartością (np.: „ref: refs/heads/master”). Ciekawa sztuczka, ale trwała trochę za długo i prelegent miał problemy z koordynacją, tj. czy klepać w klawiaturę, trzymać mikrofon, stać, siedzieć, czy mówić do mikrofonu stojącego na biurku (o którym później prelegent kompletnie zapomniał).&lt;br /&gt;
&lt;br /&gt;
To było trochę jako ciekawostka, ale Tomek omówił również, po co są pozostałe katalogi i pliki. I tak w &lt;i&gt;description&lt;/i&gt; jest opis projektu, który nie jest nigdzie pushowany i prawie nigdzie nie używany. W &lt;i&gt;info/exclude&lt;/i&gt; można zignorować pewne pliki, których nie chcemy wersjonować. Przydaje się to w momencie, gdy mamy jakiś plik z ustawieniami lub hasłami, który tylko lokalnie powinien być dostępny, a z jakiś powodów nie chcemy go ignorować za pomocą &lt;i&gt;.gitignore&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Jeszcze było o &amp;nbsp;wewnętrznej budowie commit’a. Ogółem git’a można potraktować jak acykliczny graf skierowany. Pojedyńczy commit może wskazywać na drzewo lub inne commity, drzewo wskazuje na BLOBy lub drzewa, a w BLOBach zapisywana jest zawartość plików. Co ciekawe, to nazwy plików nie są zapisywane w BLOBie, a w drzewie. Dlatego łatwo jest wykrywać zmiany położenia plików, nawet jak częściowo zmieni się zawartość.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze o root-commit’cie, który jest praojcem wszystkich commit’ów. Jak jakiś inny commit nie jest w stanie osiągnąć tegoż praojca, to znaczy, że jest wiszącym commit’em i można go usunąć. Swoją drogą ciekawi mnie, skąd się biorą takie wisielce? Chyba jak nie usuwamy niezmerge&#39;owanych branchy z flagą -D, lub jakiś pojedynczych commit&#39;ów, to nie powinno dochodzić do takich sytuacji.&lt;br /&gt;
&lt;br /&gt;
Dalej było wspomniane, że nie warto wrzucać duże pliki do repozytorium. Nawet jak te pliki tam umieścimy, a następnie usuniemy, to i tak strasznie nam to spowolni pracę z git’em. A ciężko takie coś usunąć z historii tak, aby jej nie popsuć.&lt;br /&gt;
&lt;br /&gt;
Oczywiście ta prezentacja nie mogłaby się odbyć z pominięciem tematu funkcji skrótu SHA1. Organizacja &lt;a href=&quot;http://www.nist.gov/&quot;&gt;NIST&lt;/a&gt;(National Institute of Standards and Technology), która to ogłosiła ten algorytm, obecnie wycofuje się z niego i zaleca zastąpienie go SHA3. Ale w Gitcie ta funkcja skrótu nie jest wykorzystywana w celach kryptograficznych a identyfikacyjnych, więc zagrożenie jest naprawdę niewielkie. Co prawda można wygenerować plik, który będzie nam kolidował z czymś w repozytorium, ale na to pewnie też się znajdzie obejście. Po za tym zmiana funkcji hashującej wymusiłaby zmianę protokołów git’a, a ta jest dodatkowo tak zoptymalizowana, że trafia z chache CPU.&lt;br /&gt;
&lt;br /&gt;
SHA1 jest wykorzystywana w Gitcie do identyfikowania commitu i innych obiektów. Dla commitów wystarczają nam zazwyczaj pierwsze 6, lub 8 znaków tegoż skrótu. Największy otwarty znany projekt hostowany na Gicie, czyli &lt;a href=&quot;https://www.kernel.org/&quot;&gt;linux kernel&lt;/a&gt;, potrzebuje 12 znaków do identyfikacji commit’a. Wartości te są widoczne w &lt;i&gt;.git/objects&lt;/i&gt; i są one pogrupowane w podkatalogi, aby nie osiągnąć maksymalnego limitu ilości plików w jednym katalogu i aby można było je szybko odszukać.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze o różnicy w sposobie przechowywania zmian w gitcie, a w SVNie. I tak SVN przechowuje różnice w plikach. Natomiast Git przechowuje całe pliki i gdy się nic w nich nie zmienia, to aktualizuje tylko wskaźnik na aktualną wersję pliku. Nie jest to do końca prawdą, gdyż gdy repozytorium nam rośnie, to git przechowuje stare rewizje również jako różnice w pliku i dodatkowo je kompresuje. Najnowsza wersja jest zawsze przechowywana jako pełen plik, gdyż najczęściej jej potrzebujemy. Dodatkowo Git został zoptymalizowany pod względem ilości zajmowanego miejsca na dysku.&lt;br /&gt;
&lt;br /&gt;
Tomek wspomniał również o komendzie &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;add&lt;/span&gt; w trybie interaktywnym, gdzie można wybrać, które zmiany w danym pliku wejdą do commita. Było również o takich poleceniach jak squash (pozwala złączyć commity w jeden), rebase (modyfikuje historię) i instaweb. Ta ostatnia komenda git’a pozwala przeglądać historię repozytorium przez przeglądarkę. Niestety funkcjonalność ta, póki co, nie działa w &lt;a href=&quot;https://code.google.com/p/msysgit/&quot;&gt;mysysgit&lt;/a&gt; na Windowsie(&lt;a href=&quot;https://github.com/msysgit/git/issues/11&quot;&gt;#11&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Z rzeczy poza Gitem z prezentacji dowiedziałem się o fajnej powłoce &lt;a href=&quot;http://www.zsh.org/&quot;&gt;ZSH&lt;/a&gt; i o nakładce na nią ze zbiorem fajnych rozszerzeń: &lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh&quot;&gt;Oh My ZSH&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Prezentacja bardzo fajna. Spodziewałem się trochę więcej o komendach typu &lt;a href=&quot;http://git-scm.com/book/pl/Mechanizmy-wewn%C4%99trzne-w-Git-Komendy-Plumbing-i-Porcelain&quot;&gt;plumbing&lt;/a&gt; i tego co się pod spodem dzieje, gdy wywołujemy komendy typu &lt;a href=&quot;http://git-scm.com/book/pl/Mechanizmy-wewn%C4%99trzne-w-Git-Komendy-Plumbing-i-Porcelain&quot;&gt;porcelain&lt;/a&gt;. Ale o tym można sobie doczytać (nawet po polsku) w książce &lt;a href=&quot;http://git-scm.com/book/pl/Mechanizmy-wewn%C4%99trzne-w-Git&quot;&gt;Pro Git 9. Mechanizmy wewnętrzne w Git&lt;/a&gt;, a prezentacja Tomka była dobrym wstępem do tego.&lt;br /&gt;
&lt;br /&gt;
Po tej prelekcji niestety zmarnowałem trochę czasu na chodzeniu po stanowiskach sponsorskich, ale mówi się trudno. Ominięte wykłady oglądnę, gdy już zostaną opublikowane.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Clean architecture - jak uporządkować architekturę Twojej aplikacji. Wnioski z projektu. Andrzej Bednarz&lt;/b&gt;&lt;br /&gt;
Prelegent opowiadał, o swoim greenfield projekcie, w którym wraz z zespołem postanowili poszukać dobrej architektury. W tym celu przejrzeli to, co wielkie autorytety tego świata mówią i piszą w tym temacie i zaczęli podążać ścieżką promowaną przez Wujka Boba, a mianowicie &lt;a href=&quot;http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html&quot;&gt;Clean architecture&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Podejście nie jest jakoś szczególnie nowe. Mówi o odseparowaniu GUI i baz danych od naszej logiki. Każda sensowna architektura o tym mówi. Kluczowe w czystej architekturze jest odwrócenie zależności, tj. aby nasz core aplikacji NIE był zależny od bazy danych, frameworka GUI i innych komponentów. Czyli w naszych encjach powinniśmy przechowywać przykładowo datę w formacie typowym dla daty, a nie zdeterminowanym przez bazę danych, czy ORM. Innymi słowy, musimy mieć zależności DO naszej aplikacji. Więcej powinien wyjaśnić ten rysunek ze strony &lt;a href=&quot;http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html&quot;&gt;Wujka Boba&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9W0mFL4UO27dIJme5X3VLeNDkAr8vW6YU0fVirzHDObHGeCGAbjmW-2_OiMXHOdP-Qi4exL2nQsKI4FSidDdtt9BZcxaVd7to4bV6qRTNBmKfMAwiHPb30iuPc9Xd6KuFTgIdPrLCARsN/s1600/CleanArchitecture.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9W0mFL4UO27dIJme5X3VLeNDkAr8vW6YU0fVirzHDObHGeCGAbjmW-2_OiMXHOdP-Qi4exL2nQsKI4FSidDdtt9BZcxaVd7to4bV6qRTNBmKfMAwiHPb30iuPc9Xd6KuFTgIdPrLCARsN/s1600/CleanArchitecture.jpg&quot; height=&quot;470&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Podejście takie powoduje, że nie jesteśmy uzależnieni od używanych framework&#39;ów i możemy je łatwo wymienić. Zyskujemy również na łatwości testowania naszej logiki biznesowej. Architektura ta wymusza jednak pewien narzut na tworzenie warstw abstrakcji, wielu DTO i konwersji między różnymi obiektami.&lt;br /&gt;
&lt;br /&gt;
Prezentacja była ogółem fajna. Andrzej pokazał na &lt;a href=&quot;https://github.com/andbed/clean-architecture&quot;&gt;przykładzie kodu&lt;/a&gt;, jak to wygląda u niego w projekcie. Osobiście zabrakło mi trochę porównania w kodzie, z typową architekturą 3warstwową, aby móc uświadczyć różnice. Wadą wystąpienia było patrzenie prelegenta przez plecy, na kod wyświetlany na ścianie, aby pokazywać gdzie coś jest. Jak by nie można było włączyć odpowiedniego trybu pracy z rzutnikiem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;JVM and Application Bottlenecks Troubleshooting with Simple Tools Daniel Witkowski&lt;/b&gt;&lt;br /&gt;
W tym roku było sporo wykładów na Confiturze dotyczących szybkości działania tworzonych przez nas aplikacji. Prelegent pokazał kilka prostych sztuczek, jak wyłapywać problemy w naszych aplikacjach.&lt;br /&gt;
&lt;br /&gt;
Na początku trzeba ustalić nasze wymagania jakościowe, czyli SLA, czas odpowiedzi, ile requestów na sekundę musimy wytrzymać itd. Następnie prelegent odpalił przygotowaną aplikację, „klikający” w nią &lt;a href=&quot;http://jmeter.apache.org/&quot;&gt;JMeter&lt;/a&gt; i obserwowaliśmy, co nam pokazuje nam JVisualVM. I gdzieś tam chyba z Thread Dump’a wyczytaliśmy, że gdzieś jest ręcznie wywoływany Garbage Collector. Oczywiście wiadomo, że to jest zła praktyka, ale można zawsze ją wyłączyć, za pomocą flagi&amp;nbsp;&lt;i&gt;-XX:+DisableExplicitGC&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Będąc już przy temacie GC, to warto zawsze zapisywać logi z jego działania i przeglądać za pomocą &lt;a href=&quot;http://www.tagtraum.com/gcviewer.html&quot;&gt;GCViewer&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Inną pożyteczną wiadomością, jaką ze sobą niesie JVisualVM, jest podgląd wątków. Można tam przykładowo sprawdzić, czy liczba wątków http (przyjmujących żądania) jest taka jak się spodziewamy. Gdy będzie tylko jeden, to nie dobrze, bo requesty będą obsługiwane sekwencyjnie.&lt;br /&gt;
&lt;br /&gt;
Wykres aktywności wątków, może również pokazać nam problemy z synchronizacją i blokowaniem się. Może to świadczyć o niewłaściwym użyciu słówka &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;synchronized&lt;/span&gt;&amp;nbsp;(np. na metodzie &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;doGet()&lt;/span&gt;) lub innych mutex’ów. Jeśli widzimy, że wiele wątków nam się blokuje, to musimy znów w Thread dumpie szukać miejsc, gdzie coś może być nie tak.&lt;br /&gt;
&lt;br /&gt;
Warto też spojrzeć, czy nie mamy problemów z odczytem / zapisem na dysku. W Linuxach można to sprawdzić za pomocą top’a, a na Windowsie poprzez &lt;a href=&quot;http://technet.microsoft.com/pl-pl/sysinternals/bb896653.aspx&quot;&gt;Process Explorer&lt;/a&gt;. I tak jeśli dyski nie wyrabiają, może to oznaczać, ze mamy włączony za wysoki poziom logowania. Przy tej okazji w końcu zrozumiałem zasadność takich zapisów:&lt;br /&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;if(log.isDebugEnabled()) {
     log.debug(createLogMessage());
}
&lt;/pre&gt;
&lt;br /&gt;
Jeśli ktoś napisze jakieś długotrwające operacje w metodzie &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;createLogMessage()&lt;/span&gt;, to powyższy &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;if&lt;/span&gt;, spowoduje, że nie będą ona wykonywane, gdy są i tak niepotrzebne. I tu bardzo fajnie widać wyższość Scali, gdzie taki argument mógłby być wyliczany w razie potrzeby.&lt;br /&gt;
&lt;br /&gt;
Ponadto jakie nie wiemy w jaki sposób jest zaimplementowane &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;isDebugEnabled()&lt;/span&gt;, to lepiej odczytać tą wartość raz i trzymać gdzieś w systemie.&lt;br /&gt;
&lt;br /&gt;
Na koniec była jeszcze (na szczęście krótka) reklama narzędzia &lt;a href=&quot;http://www.azulsystems.com/products/zing/diagnostics&quot;&gt;Zing Vision&lt;/a&gt;, jako że prelegent jest przedstawicielem &lt;a href=&quot;http://www.azulsystems.com/&quot;&gt;Azul Systems&lt;/a&gt;. Firma ta jest również producentem maszyny wirtualnej &lt;a href=&quot;http://www.azulsystems.com/products/zing/whatisit&quot;&gt;Zing&lt;/a&gt;, która wg. producenta jest lepsza od implementacji Oracla.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Working with database - still shooting yourself in the foot? Piotr Turski&lt;/b&gt;&lt;br /&gt;
Prezentacja Piotrka bardzo mi się podobała, gdyż w moim projekcie doszliśmy do prawie tych samych wniosków co prelegent, a o drobnych różnicach mogliśmy sobie porozmawiać na Spoinie.&lt;br /&gt;
&lt;br /&gt;
Piotrek korzysta w swoim projekcie z dwóch baz: H2 i Oracle. Jednak H2 nie do końca sprawdzała się w testach, gdyż czasem pojawiały się błędu specyficzne dla Oracla. Przykładowo w klauzurze &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;in&lt;/span&gt;&amp;nbsp;nie może być więcej niż 1000 elementów. Jest to dość znany problem, ale u Piotrka wyszło to dopiero na produkcji. Innym problemem było wykorzystywanie specyficznych możliwości „wyroczni” w zakresie wyszukiwania po umlautach (üöä). H2 tego nie obsługiwało, więc nie dało się testować. Innym problemem był typ &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Date&lt;/span&gt;, który na Oracle, inaczej jak na H2, po za datą zawiera również dokładną godzinę.&lt;br /&gt;
&lt;br /&gt;
Z tych powodów w projekcie prelegenta testy integracyjne puszczano na Oracle, i każdy developer miał pod ręką dla siebie takową bazę. H2 nie zostało jednak wyrzucone z projektu (mimo 3 rund rozmów na ten temat), gdyż jest lżejsze, szybsze, i tylko kilka funkcjonalności na nim nie działa.&lt;br /&gt;
&lt;br /&gt;
W takim wypadku, warto mieć mechanizm czyszczenia bazy na potrzeby testów. Można to załatwić &lt;a href=&quot;http://dbunit.sourceforge.net/&quot;&gt;DbUnit&lt;/a&gt;’em, ale utrzymywanie plików z danymi jest kosztowne. Po za tym narzędzie to nie zresetuje sekwencji. Można próbować również próbować przywracać dane z backup’a, ale to również może prowadzić do innego stanu bazy. Problematyczne jest tutaj usuwanie constraint’ów i powiązanych z nim index’ów. Dlatego warto wygooglać, jak można resetować bazę na Oraclu i dopasować rozwiązanie do własnych potrzeb.&lt;br /&gt;
&lt;br /&gt;
Przy takich akrobacjach, warto zadbać o proces wprowadzania zmian na bazie danych. Piotrek używał w tym celu &lt;a href=&quot;http://flywaydb.org/&quot;&gt;flyway&lt;/a&gt;, a ja u siebie korzystałem z &lt;a href=&quot;http://www.liquibase.org/&quot;&gt;liquibase&lt;/a&gt;. Nie można wtedy niestety ręcznie robić hotfix’ów. Zaletą jest to, że do testów można wtedy budować bazę tak samo jak na produkcji.&lt;br /&gt;
&lt;br /&gt;
Warto również wprowadzić mechanizm testu „produkcyjnego deploymentu”. Chodzi o to, aby zgrywać stan z produkcyjnej bazy danych (schemat i dane) i wykonać deployment aplikacji (co wymusza wykonanie migracji). Zyskujemy wtedy pewność, że nic nie powinno się posypać przy roll out’cie.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze trochę o testowaniu integracyjnym z bazą danych, np., gdy chcemy sprawdzić HQL’a. Można do tego zaprząc wspomnianego już DbUnit’a, ale analizowanie później czemu test się wywalił, jest czasochłonne. Lepiej przygotować dane do testów w teście. Przecież i tak mamy zapewne możliwość zapisywania naszych encji w bazie, więc możemy to wykorzystywać w setupie naszych testów. Warto również przy tej okazji skorzystać z &lt;a href=&quot;https://pl.wikipedia.org/wiki/Budowniczy_(wzorzec_projektowy)&quot;&gt;Builder&lt;/a&gt;’ów.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Programowanie JEE&#39;ish bez stresu Jakub Marchwicki&lt;/b&gt;&lt;br /&gt;
Prelegent opowiadał na początku o tym, że warto czasem zbudować jakąś aplikację, wykorzystując inne technologie, niż standardowy Spring, Hibernate i JSF. Pozwala nam to przypomnieć, co te technologie załatwiają za nas, oraz jak działają pewne rzeczy na niższym poziomie. Do tego są lekkie, a przecież nie zawsze potrzebujemy tych wszystkich kombajnów, aby skosić 2m² trawnika.&lt;br /&gt;
&lt;br /&gt;
I tak Jakub pokazał kilka alternatywnych rozwiązań:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/jetty/&quot;&gt;Jetty&lt;/a&gt;&amp;nbsp;+&amp;nbsp;&lt;a href=&quot;http://www.sql2o.org/&quot;&gt;sql2o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/jetty/&quot;&gt;Jetty&lt;/a&gt;&amp;nbsp;+ &lt;a href=&quot;http://resteasy.jboss.org/&quot;&gt;RESTEasy&lt;/a&gt;&amp;nbsp;+ &lt;a href=&quot;http://mybatis.github.io/mybatis-3/&quot;&gt;MyBatis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sparkjava.com/&quot;&gt;Spark&lt;/a&gt;&amp;nbsp;+ &lt;a href=&quot;http://www.jooq.org/&quot;&gt;jOOQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/webbit/webbit&quot;&gt;Webbit&lt;/a&gt;&amp;nbsp;+&amp;nbsp;&lt;a href=&quot;http://jdbi.org/&quot;&gt;jdbi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dropwizard.github.io/dropwizard/&quot;&gt;Dropwizard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Opisywane przykłady, można sobie tutaj przejrzeć: &lt;a href=&quot;https://github.com/kubamarchwicki/micro-java&quot;&gt;github.com/kubamarchwicki/micro-java&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zakończenie konferencji.&lt;/b&gt;&lt;br /&gt;
Na zakończenie konferencji było jeszcze losowanie nagród, wręczanie statuetek, podziękowania dla wolontariuszy itd. Szkoda, że część konkursów była wcześniej rozwiązywana, tj. w przerwach międzywykładowych. Niszczyło to szansę potencjalnych zwycięzców. Oganizatorzy od razu zapowiedzieli, że rejestracja w przyszłym roku będzie poprawiona i nie będzie tak długiej kolejki. Trzymam za słowo.&lt;br /&gt;
&lt;br /&gt;
Na koniec była jeszcze impreza: Spoina, gdzie można było jeszcze trochę pogadać, zjeść pizzę, napić się piwka i pograć w kręgle. Bardzo fajne zwieńczenie tej konferencji, na którą 1400 wejściówek rozeszło się w 2 godziny od rozpoczęcia rejestracji.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Organizatorzy namawiali jeszcze do udziału w siostrzanej konferencji tj: w &lt;a href=&quot;http://warsjawa.pl/&quot;&gt;Warsjawie&lt;/a&gt;. A ja ze swojej strony dziękuję za super konferencję i zachęcam do &lt;a href=&quot;http://mstachniuk.blogspot.de/2014/07/dbconf-2014-nowa-konferencja-dla.html&quot;&gt;nowej inicjatywy dBConf&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/5105825280567534845/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/konfitura-marmolada-dzem-powido-i.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5105825280567534845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/5105825280567534845'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/konfitura-marmolada-dzem-powido-i.html' title='Konfitura, marmolada, dżem, powidło i spiżarnia, czyli wrażenia po confiturze 2014'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSBDKB7nvZznBnO88_UVuHRyof_T6zn4iAdwewPKfas_W1vgplHjQseoZ94-4wrFCUG-lHgWq_tUb2oGyi5NAU-iLE6GZUFJvLG-ewL1c9olmk_MkEC_Jt1E42tglyB1UK96qZjTsAhHf/s72-c/man.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-3887945965949082992</id><published>2014-07-10T23:46:00.000+02:00</published><updated>2014-07-11T07:23:07.878+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bazy danych"/><category scheme="http://www.blogger.com/atom/ns#" term="db"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><title type='text'>dBConf 2014 nowa konferencja dla bazodanowców w Polsce</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUlpn4L_H0Ma4a_X3GUEoLGF3M5oemG5ulczrHd0f07gPnlmUuK9Aen0VpeH3jVT-FZ07IvpeDzfwAf781f8hAAuNisIjHnPQ3Aj60TWjtoIz6fosRX-sYe5a3rmyXcDgA7clFUwZ4iCu/s1600/hand.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUlpn4L_H0Ma4a_X3GUEoLGF3M5oemG5ulczrHd0f07gPnlmUuK9Aen0VpeH3jVT-FZ07IvpeDzfwAf781f8hAAuNisIjHnPQ3Aj60TWjtoIz6fosRX-sYe5a3rmyXcDgA7clFUwZ4iCu/s1600/hand.png&quot; height=&quot;166&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Ruszyła właśnie nowa konferencyjna inicjatywa w Polsce, mianowicie: &lt;a href=&quot;https://www.dbconf.pl/&quot;&gt;dBConf 2014&lt;/a&gt;, czyli &quot;Bazodanowcy wszystkich środowisk łączcie się!&quot; - tak brzmi motto konferencji. Organizatorem jest &lt;a href=&quot;http://www.linux.org.pl/&quot;&gt;PLUG&lt;/a&gt;, czyli&amp;nbsp;&lt;a href=&quot;http://www.linux.org.pl/&quot;&gt;Polska Grupa Użytkowników Linuxa&lt;/a&gt;. Konferencja odbędzie się w dniach 24 - 26 października w Szczyrku. Rejestracja dla uczestników jest już otwarta i do końca lipca obowiązuje promocyjna cena.&lt;br /&gt;
&lt;br /&gt;
A dlaczego o tym wspominam? Widzę trzy powody. Po pierwsze jest to nowa inicjatywa na naszej konferencyjnej scenie i myślę, że sporo z Was może również być zainteresowana udziałem. Wiem, że na co dzień pewnie programujecie, ale z pewnością również nie jest Wam obca tematyka baz danych. No bo przecież gdzieś trzeba składować te wszystkie dane wpisywane przez użytkowników waszych aplikacji.&lt;br /&gt;
&lt;br /&gt;
Po drugie, jak pokazuje &lt;a href=&quot;https://www.dbconf.pl/2014/pl/agenda&quot;&gt;agenda&lt;/a&gt;, będę występował i przemawiał na tej konferencji. Opowiem trochę o &lt;a href=&quot;http://www.liquibase.org/&quot;&gt;Liquibase&lt;/a&gt;, czyli jak zarządzać zmianami w relacyjnych bazach danych. Jest to temat właściwie na styku dwóch światów, tj. kodu i perzystencji, ale organizatorom się spodobało. Chciałem o tym przemawiać na tegorocznej &lt;a href=&quot;http://2014.confitura.pl/&quot;&gt;Confiturze&lt;/a&gt;, ale mój opis w C4P był za mało seksi i nie przeszedł głosowania. Po za tym w czerwcu miałem masę innych aktywności, więc i tak nie koniecznie znalazłbym czas na odpowiednie przygotowanie się.&lt;br /&gt;
&lt;br /&gt;
Po trzecie i chyba najważniejsze, piszę o tej konferencji, ponieważ można jeszcze zgłaszać swoje wystąpienia, do czego Ciebie (tak Ciebie drogi czytelniku), gorąco zachęcam! Jest to na pewno dobra okazja do sprawdzenia swoich umiejętności prezenterskich, jak i podzielenia się swoją wiedzą z innymi. C4P jeszcze trwa, więc powinieneś się zgłosić! Mnie e-mail od organizatorów, którzy natrafili na mojego bloga, odpowiednio do udziału zachęcił. Czas więc i na Ciebie, nie zwlekaj, tylko zgłoś swój temat.</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/3887945965949082992/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/dbconf-2014-nowa-konferencja-dla.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/3887945965949082992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/3887945965949082992'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/dbconf-2014-nowa-konferencja-dla.html' title='dBConf 2014 nowa konferencja dla bazodanowców w Polsce'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUlpn4L_H0Ma4a_X3GUEoLGF3M5oemG5ulczrHd0f07gPnlmUuK9Aen0VpeH3jVT-FZ07IvpeDzfwAf781f8hAAuNisIjHnPQ3Aj60TWjtoIz6fosRX-sYe5a3rmyXcDgA7clFUwZ4iCu/s72-c/hand.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3943774940621879037.post-1081517796572730958</id><published>2014-07-03T22:12:00.000+02:00</published><updated>2014-09-12T00:01:29.601+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="33degree"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="konferencja"/><title type='text'>Relacja z 33 Degree 2014</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi4pj5gNQ40bbfryozBdZflgrmTuapzdgGo4_Jf5S35A2zT51_dSrtdKlZlc6dfUCdDR41_rhfV8ucE7unNrEQdb-LNP-ITofbNIMnoL40sOD-3yjhYWQLZpYTeyVu0ZQ0dnNpAQeSBxgr/s1600/diuk.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi4pj5gNQ40bbfryozBdZflgrmTuapzdgGo4_Jf5S35A2zT51_dSrtdKlZlc6dfUCdDR41_rhfV8ucE7unNrEQdb-LNP-ITofbNIMnoL40sOD-3yjhYWQLZpYTeyVu0ZQ0dnNpAQeSBxgr/s1600/diuk.png&quot; height=&quot;200&quot; width=&quot;161&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Tegoroczną konferencję &lt;a href=&quot;http://2014.33degree.org/&quot;&gt;33Degree&lt;/a&gt; rozpocząłem od wykładu &lt;a href=&quot;http://2014.33degree.org/speaker/show/85&quot;&gt;Tomka Bujoka&lt;/a&gt; pt. &lt;a href=&quot;http://2014.33degree.org/talk/show/110&quot;&gt;33 things you want to do better&lt;/a&gt;. Pierwszy poprzedzający go keynote był nudny, a drugi gdzieś już chyba widziałem lub słyszałem.&lt;br /&gt;
&lt;br /&gt;
Tomek przedstawił sporo narzędzi ze swojego toolboxa, z którymi warto się zaznajomić i w razie konieczności używać. I tak było o bibliotekach: &lt;a href=&quot;https://code.google.com/p/guava-libraries/&quot;&gt;Guava&lt;/a&gt;, &lt;a href=&quot;http://projectlombok.org/&quot;&gt;Lombok&lt;/a&gt;, &lt;a href=&quot;http://www.slf4j.org/&quot;&gt;SLF4J&lt;/a&gt;, &lt;a href=&quot;http://www.unitils.org/&quot;&gt;Unitils&lt;/a&gt;&amp;nbsp;(testy jednostkowe na plikach), &lt;a href=&quot;https://code.google.com/p/junitparams/&quot;&gt;JUnitParams&lt;/a&gt;, &lt;a href=&quot;https://code.google.com/p/awaitility/&quot;&gt;Awaitility&lt;/a&gt; (do testowania wielowątkowego), &lt;a href=&quot;http://byteman.jboss.org/&quot;&gt;Byteman&lt;/a&gt; (ciekawy projekt do zmiany zachowania kodu produkcyjnego w locie), &lt;a href=&quot;https://code.google.com/p/spock/&quot;&gt;Spock&lt;/a&gt;, &lt;a href=&quot;http://groovy.codehaus.org/Grape&quot;&gt;grape&lt;/a&gt;&amp;nbsp;(do skryptów shelowych w Groovy’m), &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt;, bash i inne. Na koniec Tomek zareklamował swój projekt: &lt;a href=&quot;https://github.com/babun/babun&quot;&gt;babun&lt;/a&gt;. Jest to skonfigurowana powłoka z preinstalowanym gitem i paroma narzędziami do przyjemniejszej pracy z shellem pod Windowsem.&lt;br /&gt;
&lt;br /&gt;
Z powyższych warto sobie odświeżyć Lomboka. Kiedyś już przyglądałem się tej bibliotece, ale był wtedy problem ze wsparciem dla IntellJ Idea. Teraz wygląda na to, &lt;a href=&quot;https://code.google.com/p/lombok-intellij-plugin/&quot;&gt;że jest już lepiej&lt;/a&gt;&amp;nbsp;i doszła możliwość &lt;a href=&quot;http://projectlombok.org/features/experimental/Builder.html&quot;&gt;tworzenia builderów za pomocą adnotacji&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
O kolejnej prezentacji: &lt;a href=&quot;http://2014.33degree.org/talk/show/34&quot;&gt;RESTing away from hell&lt;/a&gt; &lt;a href=&quot;http://2014.33degree.org/speaker/show/59&quot;&gt;Jakuba Janczaka&lt;/a&gt; nic nie napiszę, bo było nudno i nawet&amp;nbsp;nic&amp;nbsp;nie zanotowałem.&lt;br /&gt;
&lt;br /&gt;
Kolejna prezentacja &lt;a href=&quot;http://2014.33degree.org/talk/show/80&quot;&gt;Get Back in Control of Your SQL&lt;/a&gt; &lt;a href=&quot;http://2014.33degree.org/speaker/show/21&quot;&gt;Lukasa Edera&lt;/a&gt; bardzo mi się podobała. Początkowo prelegent przedstawił wady na przykładowym kodzie takich rozwiązań jak: JDBC, EJB 2 / 3 i Hibernate. Rozwiązaniem na wszystko ma być &lt;a href=&quot;http://www.jooq.org/&quot;&gt;JOOQ&lt;/a&gt;. Narzędzie to generuje na podstawie schematu bazy danych stałe zawierające nazwy tabel, kolumn itp. Później możemy z tego korzystać za pomocą fluent API, które jest bardzo zbliżone do SQL. Właściwie jedno i drugie czyta się tak samo, tyle że w Javie dochodzi kilka kropek i nawiasów. Jeszcze przyjemniej wygląda to w Scali. A całość jest Type Safe. Jest nawet jakiś prosty mapping na obiekty POJO. Niestety JOOQ, jest rozwiązaniem &lt;a href=&quot;http://www.jooq.org/legal/licensing&quot;&gt;komercyjnym, dla komercyjnych baz danych&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Narzędzie spodobało mi się i chętnie bym z niego kiedyś skorzystał w projekcie. Jakby ktoś chciał obejrzeć wystąpienie (ale z GeeCON&#39;a), jest już dostępne:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;281&quot; mozallowfullscreen=&quot;&quot; src=&quot;//player.vimeo.com/video/99526433&quot; webkitallowfullscreen=&quot;&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;br /&gt;
A w tak zwanym międzyczasie rozwinął się &lt;a href=&quot;https://groups.google.com/forum/#!topic/wroclaw-jug/s9_W6eRWhp8&quot;&gt;gorący wątek&lt;/a&gt; na Wrocław JUG (wielkie brawa za reaktywację) i padło tam jeszcze parę innych narzędzi tego typu: &lt;a href=&quot;https://code.google.com/p/liquidform/&quot;&gt;LIQUidFORM&lt;/a&gt; (ale to już trochę martwy projekt) &lt;a href=&quot;http://prevayler.org/&quot;&gt;Prevayler&lt;/a&gt; i &lt;a href=&quot;http://www.querydsl.com/&quot;&gt;Querydsl&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Kolejny wykład był dosłownie &lt;a href=&quot;http://2014.33degree.org/talk/show/11&quot;&gt;sprintem po nowościach w JEE 7&lt;/a&gt;. Prelegent (&lt;a href=&quot;http://2014.33degree.org/speaker/show/6&quot;&gt;Arun Gupta&lt;/a&gt;) przeleciał w 50 min po 50 nowinkach, dotykając każdego aspektu tej technologii. Dla mnie były to jedynie zmiany kosmetyczne, żadnej nowej wielkiej rewolucji.&lt;br /&gt;
&lt;br /&gt;
Następnie słuchałem prezentacji &lt;a href=&quot;http://2014.33degree.org/speaker/show/73&quot;&gt;Josh Longa&lt;/a&gt;&lt;span id=&quot;goog_1161961311&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1161961312&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.blogger.com/&quot;&gt;&lt;/a&gt;&amp;nbsp;pt. &lt;a href=&quot;http://2014.33degree.org/talk/show/99&quot;&gt;Microservices and REST with Spring Boot&lt;/a&gt;. Było kodowanie na żywo, ale bardzo fajnie. Prelegent zaczął od &lt;a href=&quot;http://start.spring.io/&quot;&gt;start.spring.io&lt;/a&gt; i pokazał jak niewiele należy samemu dopisać, aby mieć już coś działającego. Było sporo o &lt;a href=&quot;http://martinfowler.com/articles/richardsonMaturityModel.html&quot;&gt;Richardson Maturity Model&lt;/a&gt; i trochę o bezpieczeństwie. W międzyczasie prelegent korzystał z ciekawej wtyczki do Chrome’a do generowania zapytań RESTowych: &lt;a href=&quot;https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo&quot;&gt;Advanced REST client&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Dzień drugi zaczął się znów od keynotów. Pierwszy był wypełniony tabelkami z Excela i kolorowymi Clipart’ami z Worda bez konkretnego przesłania. Typowy przykład jak nie robić prezentacji... Szybko opuściłem salę.&lt;br /&gt;
&lt;br /&gt;
Drugi keynote był już lepszy. Prelegent wziął na studium przypadku pisanie latarki na iOS. Najważniejsze jest, aby przy różnych przedsięwzięciach nie tylko programistycznych, odpowiedzieć sobie na pytanie „What, Whoam and Why?”&lt;br /&gt;
&lt;br /&gt;
Prelegent opowiadał dalej o aplikacjach i ich interakcji z użytkownikiem. Nasza aplikacja powinna mówić do pojedynczej osoby (używać odpowiednich form gramatycznych), bo interakcja jest między użytkownikiem a sprzętem. W ten sposób uda nam się przemówić do tłumów. Nie zmienimy w ten sposób całego świata (bo nie możemy), ale zmienimy świat dla jednej osoby, a to już jest sukces. A zmieniając rzeczywistość pojedynczych osób zmieniamy świat wielu osób.&lt;br /&gt;
&lt;br /&gt;
Było jeszcze o reklamach Apple które nie mówią o tym jak świetny jest ich produkt, ale uderzają w ludzkie życie, uczucia i inne wartości. Na koniec było jeszcze o córce prelegenta, która mu zmarła, przez co wykład bardzo oddziaływał na emocje prelegenta, jak i słuchaczy.&lt;br /&gt;
&lt;br /&gt;
Następnie byłem na wystąpieniu &lt;a href=&quot;http://2014.33degree.org/speaker/show/30&quot;&gt;Tomka Nurkiewicza&lt;/a&gt; na temat OLAPowej bazy danych &lt;a href=&quot;http://meteorite.bi/saiku&quot;&gt;Saiku&lt;/a&gt;. Bardzo fajne narzędzie do generowania raportów, trendów, wykresów itd. Wykład był fajny, było wiele przykładów użycia… Jakbym kiedyś potrzebował, to chętnie spróbuję.&lt;br /&gt;
&lt;br /&gt;
Później byłem na wykładzie &lt;a href=&quot;http://2014.33degree.org/speaker/show/39&quot;&gt;Jarosława Pałki&lt;/a&gt; na temat &lt;a href=&quot;http://2014.33degree.org/talk/show/61&quot;&gt;Patterns for Organic Architecture&lt;/a&gt;. Spodziewałem się, że będzie to prezentacja bardziej techniczna, z przedstawieniem konkretnych wzorców, ale było bardzo miękko, więc się zawiodłem.&lt;br /&gt;
&lt;br /&gt;
Następnie byłem na prezentacji &lt;a href=&quot;http://2014.33degree.org/speaker/show/10&quot;&gt;Venkat’a Subramaniam’a&lt;/a&gt;, który przedstawiał &lt;a href=&quot;http://openjdk.java.net/projects/nashorn/&quot;&gt;Projekt Nashorn&lt;/a&gt;. Jest to narzędzie, które kompiluje kod JavaScript’a do bytecodeu JVM. Czyli możemy sobie po stronie serwera pisać w JavaScript. Prelegent pokazywał na żywo, jak można wywoływać JS z Javy i na odwrót.&lt;br /&gt;
&lt;br /&gt;
Kolejnym slotem byłem mocno zawiedziony. Najpierw byłem na prezentacji &lt;a href=&quot;http://2014.33degree.org/speaker/show/48&quot;&gt;Abdelmonaim Remani&lt;/a&gt; dotyczącej &lt;a href=&quot;http://2014.33degree.org/talk/show/48&quot;&gt;debuggingu&lt;/a&gt;. Wykład był tragiczny, jak dla studentów pierwszego roku. „Aby znaleźć bug’a trzeba najpierw zlokalizować komponent w którym on jest”. Musiałem opuścić prezentację. W innych salach również nie było lepiej, gdyż sporo ludzi wędrowało wte i wewte.&lt;br /&gt;
&lt;br /&gt;
W końcu wylądowałem na prezentacji dotyczącej &lt;a href=&quot;http://2014.33degree.org/talk/show/108&quot;&gt;github’a i gerrit’a&lt;/a&gt; &lt;a href=&quot;http://2014.33degree.org/speaker/show/33&quot;&gt;Luca Milanesio&lt;/a&gt;. Prelegent porównywał oba systemy i przedstawił workflow, aby push’ować do innego brancha, który po przeglądnięciu się merguje z masterem. Było również wspomniane o &lt;a href=&quot;https://pypi.python.org/pypi/git-review&quot;&gt;Git review plugin&lt;/a&gt;, który po wypushowaniu zmian podaje linka do review. Było również o jakimś pluginie do Jenkinsa, który wspiera Gerrita. Całość można przetestować na &lt;a href=&quot;http://gerrithub.io/&quot;&gt;gerrithub.io&lt;/a&gt;, które się integruje z naszymi repozytoriami z GitHuba.&lt;br /&gt;
&lt;br /&gt;
Następnie byłem na prezentacji &lt;a href=&quot;http://2014.33degree.org/talk/show/73&quot;&gt;JavaScript Design Patterns&lt;/a&gt; &lt;a href=&quot;http://2014.33degree.org/speaker/show/28&quot;&gt;Pratika Patela&lt;/a&gt;. Było o wzorcach z JS, za pomocą których możemy osiągnąć pewne elementy, które mamy w Javie. I tak przykładowo za pomocą namespace możemy utworzyć globalny obiekt, w ramach którego możemy trzymać sporo rzeczy. Należy jednak uważać, aby nam ten twór nie urósł za bardzo, bo nie będzie on odśmiecany. Było jeszcze o Mixin module (coś na kształt Dependency Injection), publish subscribre w ramach jednego kontekstu, Command (jako Aspect) i Factory (np. w backbone).&lt;br /&gt;
&lt;br /&gt;
Na koniec została jeszcze zaprezentowana ciekawa stronka: &lt;a href=&quot;http://todomvc.com/&quot;&gt;TodoMVC.com&lt;/a&gt; na której jest napisana jedna i ta sama aplikacja z wykorzystaniem różnych bibliotek JavaScriptowych.&lt;br /&gt;
&lt;br /&gt;
Trzeciego dnia keynote’y były przesunięte na koniec dnia, więc na szczęście można było je bezboleśnie pominąć. A dzień rozpocząłem od wystąpienia &lt;a href=&quot;http://2014.33degree.org/speaker/show/49&quot;&gt;Jarka Ratajskiego&lt;/a&gt; &lt;a href=&quot;http://2014.33degree.org/talk/show/45&quot;&gt;Doing WEB development clean way&lt;/a&gt;, gdyż miało być duże show i ciekawy sposób prowadzenia prezentacji. I rzeczywiście było trochę strzelania do zombie i wywoływania osób z publiczności do odpowiedzi. Było również poprawianie kodu JS na żywo, ale nie do końca ono działało, ze względu na przeskalowanie ekranu.&lt;br /&gt;
&lt;br /&gt;
Co do konkretów, to Jarek pokazał, że należy korzystać ze statycznej analizy kodu, zwłaszcza w dynamicznych, słabo typowanych językach jak JS, gdzie można bardzo łatwo zrobić sobie krzywdę. Takową analizę można przeprowadzić za pomocą np. &lt;a href=&quot;http://www.jshint.com/&quot;&gt;jshint&lt;/a&gt;. Prelegent również namawiał do korzystania z frameworków JS, takich jak &lt;a href=&quot;https://angularjs.org/&quot;&gt;angularjs&lt;/a&gt; i do używania pluginów w przeglądarkach wspierających development.&lt;br /&gt;
&lt;br /&gt;
Było również o trendach, jak kiedyś, a jak obecnie tworzy się strony internetowe. I tak na dzień dzisiejszy królują single page applications. Z narzędzi było jeszcze o &lt;a href=&quot;http://lesscss.org/&quot;&gt;Lesscss&lt;/a&gt; które pomaga nam generować CSS. Wartością dodaną jest możliwość tworzenia zmiennych funkcji itp. do lepszego zarządzania tymi stylami.&lt;br /&gt;
&lt;br /&gt;
Prezentacja fajna w formie, ale jak na konferencję pokroju 33 Degree, to było za dużo show, a za mało konkretów. A wiem, że Jarka na pewno stać na więcej.&lt;br /&gt;
&lt;br /&gt;
Później byłem na prezentacji &lt;a href=&quot;http://2014.33degree.org/speaker/show/36&quot;&gt;Jakuba Kubryńskiego&lt;/a&gt; na temat &lt;a href=&quot;http://2014.33degree.org/talk/show/63&quot;&gt;Spring Boot&lt;/a&gt;. Już wcześniej o tym na konferencji słyszałem, ale postanowiłem jeszcze raz zobaczyć. Generalnie framework (a właściwie zbiór frameworków) został pomyślany dla, ostatnio dość popularnych, microserwisów. Jest również świetną baza, dla nowych projektów, gdyż trzeba bardzo mało napisać aby wystartować z aplikacją. Dodatkowo aplikacja zawiera wbudowanego tomcata lub jetty, więc można bardzo szybko ją wystartować.&lt;br /&gt;
&lt;br /&gt;
Jakub pokazał możliwości frameworka i ostatnie 15 minut był live coding. Poprzez lokalne Wi-Fi można było się połączyć ze stworzoną na szybko stroną i dzięki temu prelegent mógł pokazać satystyki jakie daje nam spring boot. Prezentacja bardzo udana.&lt;br /&gt;
&lt;br /&gt;
Następnie byłem na reaktywnej Javie &lt;a href=&quot;http://2014.33degree.org/speaker/show/34&quot;&gt;Tomasza Kowalczewskiego&lt;/a&gt;. Było o bibliotece &lt;a href=&quot;https://github.com/Netflix/RxJava&quot;&gt;RxJava&lt;/a&gt;, ale jakoś mnie nie poniosło. Sposób przemawiania do mnie nie dotarł.&lt;br /&gt;
&lt;br /&gt;
Na koniec konferencji byłem chyba na najmniejszym wykładzie podczas całej imprezy. Była to prelekcja &lt;a href=&quot;http://2014.33degree.org/speaker/show/82&quot;&gt;Dariusza Lukszy&lt;/a&gt; pt. &lt;a href=&quot;http://2014.33degree.org/talk/show/107&quot;&gt;Your own full blown Gerrit plugin&lt;/a&gt;. Na sali było jakieś 10 osób, i wszyscy zgromadzili się bliżej prelegenta. Ale trudno się dziwić, skoro w sali obok było show &lt;a href=&quot;http://2014.33degree.org/speaker/show/10&quot;&gt;Venkata&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Darek opowiadał, jak łatwo można napisać plugin do Gerrita, który wykonuje ponowny build naszego kodu na Jenkinsie. Kod można znaleźć tutaj: &lt;a href=&quot;https://github.com/dluksza/gerrit-retriggerme&quot;&gt;gerrit-retriggerme&lt;/a&gt;. Darek bardzo zwinnie przełączał&amp;nbsp;się&amp;nbsp;pomiędzy otagowanymi wersjami swojego kodu, opowiadając przy tym co się w nim zmieniło. Temat ciekawy, jakby ktoś potrzebował.&lt;br /&gt;
&lt;br /&gt;
Podsumowując konferencję było bardzo gorąco, zwłaszcza w namiocie ze stoiskami sponsorskimi. Dmuchawy i otwieranie kolejnych ścian trochę pomagało, ale to i tak lepiej niż gnieździć się w wąskich korytarzach kina. Na szczęście stanowiska sponsorskie szybko reagowały na upał i załatwiały zimne napoje w kolejnych dniach konferencji.&lt;br /&gt;
&lt;br /&gt;
Fajnie też, że przygotowano aplikację na telefon z rozkładem jazdy, ale brakowało mi w niej informacji o tym, kiedy, gdzie, jaki konkurs jest rozstrzygany. Pomogłoby to jeszcze bardziej promować&amp;nbsp;się&amp;nbsp;sponsorom konferencji. W tym roku chyba najbardziej zaszalał Luxoft, dając (prawie) każdemu uczestnikowi tableta. Wiadomo, że nie był to jakiś super sprzęt, ale zasponsorowanie tak sporej ilości urządzeń to na pewno było nie lada wyzwanie i koszt. Choć pewnie spora większość uczestników już takie zabawki dawno posiada w swoich zasobach.&lt;br /&gt;
&lt;br /&gt;
Co do poziomu wykładów, to było bardzo nierówno. Nie było chyba żadnego, który by wywrócił, lub choćby zachwiał mój dotychczasowy światopogląd. Brakowało mi również bardziej praktycznych warsztatów.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sporo czasu zajęło&amp;nbsp;mi&amp;nbsp;sporządzenie tej notki, ale niełatwo jest streścić 3 dni konferencji w jeden wpis. A już na dniach zbliża się &lt;a href=&quot;http://2014.confitura.pl/#/&quot;&gt;Confitura&lt;/a&gt;. Mam nadzieję, że relacja z tej imprezy powstanie szybciej.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mstachniuk.blogspot.com/feeds/1081517796572730958/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/relacja-z-33-degree-2014.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1081517796572730958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3943774940621879037/posts/default/1081517796572730958'/><link rel='alternate' type='text/html' href='http://mstachniuk.blogspot.com/2014/07/relacja-z-33-degree-2014.html' title='Relacja z 33 Degree 2014'/><author><name>Marcin Stachniuk</name><uri>http://www.blogger.com/profile/04065017918407296856</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi4pj5gNQ40bbfryozBdZflgrmTuapzdgGo4_Jf5S35A2zT51_dSrtdKlZlc6dfUCdDR41_rhfV8ucE7unNrEQdb-LNP-ITofbNIMnoL40sOD-3yjhYWQLZpYTeyVu0ZQ0dnNpAQeSBxgr/s72-c/diuk.png" height="72" width="72"/><thr:total>4</thr:total></entry></feed>