13 maja 2010

Siedzę w Turcji i przetwarzam sygnały zewsząd, trochę o NetBeans i WAS8 również

Siedzę w Turcji i mnie trochę zdusił cały ten zgiełk wokół. Pisałem o moich poprzednich wizytach w Stambule i mimo, że wiele rzeczy już doświadczyłem poprzednio, teraz nie są wcale znajome. Uczę się pilnie tureckiego i potrafię nawiązać komunikację - skorzystać z "protokołu komunikacyjnego" jakim jest język turecki. Mieszają mi się te pojęcia z IT z życiem codziennym i gdzie nie spojrzę, czego nie doświadczę, to właśnie jakby reminiscencja doświadczeń z IT :)

A działo się przez ostatni tydzień sporo. W Turcji moim zadaniem jest namierzenie problemów wydajnościowych w kodzie pisanym jeszcze na początku tego wieku, w czasach wszechobecnej Java 1.4 i z niedoświadczonym (takie odnoszę wrażenie) zespołem, który o automatycznym budowaniu aplikacji, testowaniu i całym tym "zgiełku" utrzymywania wysokiej jakości oprogramowania, obawiam się, że nawet nie słyszał. Nie jest to w żaden sposób zarzut, ale przestroga, że tworzenie czegokolwiek wymaga wiedzy, a nauka jedynie na projektach, to równia pochyła i krótkowzroczna perspektywa wolnego czasu. Wierzę, że czytelnicy tego bloga biorą sobie do serca wytyczne "Growing Object-Oriented Software, Guided by Tests". Jest wiele książek, które należą do kategorii "Obowiązkowa lektura" i ta z pewnością tam jest, ale wstrzymam się z rekomendacją do końca jej lektury, bo skończyłoby się na znanym i (nie)lubianym, strywializowanym "obowiązkowa lektura dla każdego". Potrzebuję bardziej efektownych recenzji, bo tego typu mi się przejadły. Co książka, to obowiązkowa lektura i wszystko zależy od punktu widzenia.

A skoro o nim, to mój punkt widzenia dwukrotnie w ciągu dnia sprowadza się do 30-minutowej "wycieczki" taksówką z hotelu w Taksim, aż do prawie przy lotnisku i spowrotem. Jazda przy 120 km/h na zatłoczonej otoban zderzak w zderzak daje się odczuć. Gdyby nie te widoki wokół, pewnie osiwiałbym już dawno. A tak urzeczony panoramą z zatłoczonymi parterówkami z gdzieniegdzie wystającymi meczetami z 2 minaretami i hotelami wysokimi na 30 pięter zapominam o bożym świecie. I filmuję, aby móc później pokazać rodzince. Pomyślałem sobie, czy dałoby radę przenieść ten typ jazdy do nas, do Warszawy chociażby, gdzie też czasami doświadczam podobnego uczucia, ale mimo wprawy taksówkarza, sądzę, że liczba kolizji nauczyłaby go manier, bo...jak to mówią "Do tanga trzeba dwojga" i to, że taksówkarz pędzi setką zderzak w zderzak, to tylko i dlatego, że inny kierowca robi podobnie. Tym samym nastąpiło "uwspólnienie interfejsów" i można się dopasować. W Warszawie o to trudniej.

Nauczyłem się w międzyczasie kilku sztuczek przydatnych tu i ówdzie, np. wyłączenie wszystkich katalogów z obsługi repozytorium Mercurial (hg), począwszy od katalogu bieżącego w dół, to po prostu:
$ cat .hgignore
syntax: regexp
^build.xml$
^build/
^nbproject/build-impl.xml$
^nbproject/private/platform-private.properties$
^nbproject/private/private.xml$
Włączamy sytax: regexp i bawimy się wyrażeniami regularnymi. Możemy mieszać konfigurację z wyrażeniami powłoki uniksowej przez syntax: glob. I tak naprzemiennie. Więcej można przeczytać w dokumentacji hgignore. Proste i przyjemne.

Siedząc wieczorami w hotelu, kiedy wracam ze spacerów po Taksim, zabrałem się za rozwój wtyczki NetBeans dla serwera aplikacyjnego WAS V8. Tak w ramach (samo)rozwoju programistycznego. Na razie udało mi się wyświetlić WAS V8 jako jeden z wielu serwerów w okienku Add Server..., więc idzie powoli, ale postępy zauważalne. Przydaje się znajomość skrótów klawiszowych i jak na razie przywykłem do Cmd+O (odszukanie typu) oraz Cmd+Shift+I (uprządkowanie importów). Po niedługich doświadczeniach z bardzo rozbudowanym klawiszowo edytorze javowym w Eclipse IDE, kiedykolwiek muszę usiąść przy NetBeans IDE, pod kątem skrótów klawiszowych odczuwa się jego niedojrzałość. Brakuje mi bardziej strawnych podpowiedzi i kombinacji z Eclipse. Cóż, przyzwyczajenie drugą naturą człowieka, więc przygryzam wargi i moje narzekania zrzucam na barki moich przyzwyczajeń, z którymi wiemy, że trzeba walczyć. Co też czynię sumiennie i z pokorą.

Jeju, po 4 dniach upalnych, przy temperaturze koło 30tki, zaczęło właśnie padać! Będzie znośniej, bo kiedy wychodzę z klimatyzowanego budynku do taksówki od razu daje się odczuć zmęczenie upałem i przenikliwym słońcem. Idzie się wykończyć, a to jedynie przez 30 minut w taksówce około 18tej (!)

Przeglądając kody źródłowe wtyczek do serwerów w NetBeans zauważyłem, że pewne konstrukcje są udokumentowane. Chyba zaczyna mi się udzielać "dobro" książki "Growing OO Software...", bo u mnie komentarzy niewiele, a raczej skłaniam się ku umieszczaniu ich w ramach dedykowanej metody o nazwie, która odpowiada komentarzowi, a tym samym mówi czytelnikowi, co robi. Zastanawiam się, czy to krok w dobrym kierunku? Doszło wręcz do tego, że cała metoda sprawdzająca, domyślnie wywoływana przez NetBeans IDE - valid() - jest jedynie wywołującą metodę docelową (zamiast umieszczania jej kodu bezpośrednio w ciele metody). Odnotowuję to jako krok ku mojemu, lepszemu warsztatowi programistycznemu i nie mam złudzeń, pod wpływem której książki jestem. Uzależnia. Sama metoda valid() mówi, a przynajmniej stara się wskazać swoją potrzebę istnienia, ale moja metoda mówi, co to znaczy być valid() i jakie warunki muszą zostać spełnione. Każde ze swoją metodą.

W trakcie pisania wtyczki przyszło mi stworzyć kawałek funkcjonalności wizualnej z GUI, co okazało się trywialne przez użycie asystenta New > Wizard.

Poszło gładko, aczkolwiek wizualne programowanie jakoś mnie ogranicza. Opierając się na tym asystencie, wiele jest wyłączone i zamiast dłubać w klasie muszę przestawić się na programowanie wizualnie, przez definiowanie właściwości w różnych widokach.

W pewnym momencie miałem nawet problem z zaznaczeniem komponentu, którego właściwości chciałem zmienić, ale na pomoc przyszedł mi klawisz TAB, dzięki któremu mogłem przeskakiwać między komponentami w GUI - w ten sposób dotarłem do JPanel, który był niewidoczny, bo z takimi rozmiarami na nic więcej nie mógł się porwać. Do zapamiętania: Cmd+Backspace kasuje wybrany komponent

Na zakończenie mojego tygodnia poza domem, w Turcji, zabrałem się za nagrywanie skrinkasta o NetBeans IDE 6.9, WAS V8 i @WebServlet, czyli filmiku o platformie do nauki Java EE 6. I tak się przygotowuję powolutku do niego. Mam już scenariusz i pierwsze próby już poszły do kosza. Dzisiaj spróbuję ponownie. Kupiłem nawet książkę o profesjonalnym nagrywaniu skrinkastów The Screencasting Handbook i próbuję swoich reżyserskich sił. Książka pełna rad, których wizualizację powinniście poczuć niedługo. Nagranie w trakcie realizacji. I będzie z głosem! Co mnie niezwykle przyciąga do tych nagrań, to możliwość wyuczenia się prowadzenia krótkich sesji warsztatowych, gdzie mam niewiele ponad 5-8 minut i prezentuję pewną funkcjonalność. Pozwala mi to wybrać tylko jeden element w danej sesji nagraniowej i przygotować się do ich zbiorczego odtworzenia w postaci 45minutówki podczas konferencji czy spotkania. Sama praca niełatwa, ale końcowy efekt...bezcenne! W końcu nauczę się nie przekraczać danego mi czasu antenowego i sesje będą ciekawsze, bo wyłącznie z kodem.

Ciekawe doświadczenie z przekazywaniem informacji nowoprzybyłym w postaci nagrania-skrinkastu doświadczyłem całkiem niedawno. Zostałem zaproszony do udziału w międzynarodowym przedsięwzięciu i strefy czasowe były tak rozbiegane, że jedynym sposobem na przekazanie mowy powitalnej był...skrinkast. Gość nagrał go i rozdał do zapoznania się. Zainteresowanych zaprosił do udziału w sesji jeden-na-jeden. Cel zrealizowany i w jaki nowatorski sposób. Ach, powinienem był napisać, że celem projektu jest właśnie stworzenie kursu do samodzielnego prowadzenia przez uczestników, tj. self-paced online course, więc była to swego rodzaju przygrywka do pracy, którą w podobnym stylu każdy będzie musiał zrealizować.

Na zakończenie, spostrzeżenie porównujące społeczności stojące za Twitterem i Facebookiem - "Facebook is the people you went to school with. Twitter is the people you wished you went to school with." ~@twittelator. Dla mnie rewelacja!

Pozdrowienia dla uczestników GeeCONa. Bawią się, a my musimy charować! Odkujemy się podczas Javarsovia 2010. Będzie rewelacyjnie. Już sama obsada sponsorska to gwarantuje, a liczba tematów z naszej, polskiej społeczności javowej jeszcze bardziej upewnia mnie w tym przekonaniu. Agenda właśnie się tworzy i z 4 ścieżkami po 6 wystąpień każda...co tu dużo pisać - 26 czerwca macie przecież już zarezerwowane i przegadamy temat w bezpośrednim starciu. Do zobaczenia!