niedziela, 15 maja 2016

GeeCON 2016

Prezentacje

Human Design Engineering

by Matt Ferrar

O tym jak to ludzie są różni, ale że trzeba ich zrozumieć i znaleźć między nimi wspólny mianownik, żeby zaprojektować dla nich dobry interfejs użytkownika. Do tego ogólniki w rodzaju, że należy rozmawiać z klientami, żeby dowiedzieć się co im przeszkadza oraz żeby łączyć i mieszać różne podejścia i technologie. Na koniec garść frazesów w rodzaju “właściwy produkt musi pojawić się we właściwym czasie”.


A Decade of DDD, CQRS, Event Sourcing

by Greg Young

Z tej prezentacji najlepiej zapamiętałem część o kulcie cargo wśród programistów, którzy ucząc się jakiejś metodologii lub technologii zaczynają na ślepo podążać za autorytetami. Tymczasem od wszystkich reguł i wzorców są wyjątki i CQRS nie jest tu wyjątkiem.

Była także krytyka programistów, którzy mają ambicje by tworzyć kolejne frameworki, ale porzucają je po kilku miesiącach. Zapoznanie się z frameworkiem zaczyna zajmować więcej więcej czasu niż napisanie podobnego kodu i wtedy jego twórcy ogłaszają, że to już nie framework tylko “reference application”. Naprawdę użyteczne są tylko te elementy, które można zaimportować do swojego projektu jako biblioteki.

Caught in the Act: Kotlin Bytecode Generation and Runtime Performance

by Dmitry Jemerov

O tym jak bytecode wygenerowany ze źródeł w Kotlinie przekłada się na kod w Javie. Nie znałem wcześniej Kotlina, ta prezentacja to nie był mój pierwszy wybór (ta którą wybrałem została odwołana) i nie przekonała mnie do pisania w Kotlinie. Wydaje mi się, że przynajmniej po części, język rozwiązuje problemy, które istniały tylko do czasu wprowadzenia Javy 8.

Cloud Native Java

The Bootiful Application

by Josh Long

Dwie bardzo podobne do siebie prezentacje z tworzeniem REST-owej aplikacji na żywo, rozpoczynając od szablonu wygenerowanego na start.spring.io. W pierwszej wykorzystane zostały SpringBoot, Eureka, Hystrix i Zipkin. Druga prezentacja była bardziej o konfiguracji samego SpringBoot-a.

Fajnie i zabawnie poprowadzone, make jar not war i zabawy z ascii logiem springowej aplikacji. Tyle tylko, że druga prezentacja wydawała się klonem pierwszej. Identyczny wstęp, te same dowcipy, w dokładnie tych samych miejscach. Zastanawiałem się czy nie wyjść, ale kiedy przebrnęliśmy przez pierwsze dziesięć minut zrobiło się inaczej i znów ciekawie.

Servless Architecture in the Cloud - AWS Lambda

by Tomasz Stachlewski

Napisany w Javie mikroserwis jako AWS lambda. Przykład konfiguracji na Amazon API Gateway  i mapowania parametrów wejściowych HTTP na JSON. Prezentacja zrealizowana trochę z punktu widzenia sprzedawcy Amazona, więc dużo o tym dlaczego warto w ogóle zapłacić za ich usługi.

Machine Learning for (JVM) developers

by Mateusz Dymczyk

Wyszliśmy od definicji podstawowych pojęć używanych w systemach uczących się, a potem prowadzący przeszedł do istniejących rozwiązań dla JVM. Jako warte uwagi wymienił cztery: Spark, Flink, Storm i H2O - są one nowe i moją dość wygodne API.

W Sparku było przygotowane demo. W pierwszej części, na podstawie archiwalnych danych z Google’a, wykorzystując model Linear Regression, Spark usiłował przewidzieć ceny akcji. Wyszło tak sobie, tzn. różnice w cenie były w okolicach 10 dolarów dla skrajnych wartości.

W drugiej części, posiłkując się przykładami spamu oraz normalnych mejli, Spark miał się nauczyć rozpoznawać spam. Tym razem została wykorzystana metoda Logistic Regression With SGD i Spark odniósł sukces, prawidłowo rozpoznając kolejny spam.

Is HBase still a thing?

by Lars George

Trudno powiedzieć. To znaczy może i jest, ale wykład nie zainteresował mnie. Rozpoczął się od przydługiego wstępu o historii komputerów, zmian sprzętowych, wejścia oprogramowania open source, itd. Potem było o architekturze HBase, używanym przez nie formacie plików i zaletach w porównaniu z komercyjnymi produktami (dobrze się skaluje).

Beyond Lambdas - the aftermath

by Daniel Sawano, Daniel Deogun

Przykłady użycia lambd i klasy Optional z Javy 8 oraz problemy, które mogą wystąpić przy ich stosowaniu.

O tym na przykład, żeby nie łamać zasady pojedynczej odpowiedzialności, by zapisać cały kod funkcjonalny w jednej linii.

O problemach występujących przy równoległym przetwarzaniu strumieni. O tym, że przy takim przetwarzaniu należy zwrócić uwagę na zmienne lokalne dla wątków oraz upewnić się, że zależności które mamy (zewnętrzne biblioteki) są wątkowo-bezpieczne.

Navigating ALL the Knowledge

by James Weaver

Prezentacja o ConceptMap. Automatyczne budowanie grafów zależności, znajdywanie relacji (również najkrótszych ścieżek) pomiędzy pojęciami. Wszystko to na bazie wiedzy zgromadzonej i udostępnionej na Wikipedii.

Beyond NoSQL - Go Events / DROP DATABASE

by Jarosław Ratajski

Kosmiczna prezentacja o dwóch grupach deweloperów z różnych wszechświatów. W jednym z nich nadal używa się Hibernate’a. W drugim deweloperzy zauważyli, mniej więcej w okolicy 2003 roku, że mają do dyspozycji wiele rdzeni procesora oraz więcej pamięci i przestali stosować bazy danych, jeśli nie są niezbędne. W obydwu wszechświatach galaktyczna firma dostarczająca pizzę zamówiła u deweloperów system, który będzie przetwarzał 10 000 zamówień na sekundę.

Tak więc w tym lepszym ze światów, deweloperzy pisali kod w Javie używając PriorityQueue. Mieli pewne problemy ze współbieżnością i zapisem danych na dysk, ale szybko je rozwiązali. W drugim świecie deweloperzy wstawiali do kodu adnotacje JPA i tworzyli zapytania do bazy danych.

Potem przyszedł czas na test. System bez Hibernate’a był w stanie przetworzyć 40 000 zapytań na sekundę. Ten z Hibernate dał radę 600. I nawet po optymalizacji, nie udało się zbliżyć do wymagań.

A był to dopiero początek, bo prawdziwe problemy pojawiły się z nowymi wymaganiami dla systemu (“będziemy komponować własne pizze - nie ma problemu, potrzebujemy dwudziestu tabel, żeby to zamodelować”).

Puentą prezentacji było to, że bazy danych i JEE to tak naprawdę pomysły z lat 90. Z czasów gdy pamięć była droga, a komputery dysponowały już dużą ilością miejsca na dysku. I że tak naprawdę, dla większości zastosowań, możemy obejść się bez baz danych.

Introduction to Designing Voice-Driven Experiences

by Staszek Paśko

To miało być przede wszystkim demo Alexy, głosowej asystentki Amazonu. Niestety Alexa nie dawała rady, podobno przez to, że po sali rozchodził się dźwięk z mikrofonu, w którym siebie słyszała. Demo zostało więc przerwane po drugiej czy trzeciej pomyłce, a zamiast niego było więcej slajdów o tym jak wykorzystać Alexę we własnej, mobilnej aplikacji.

What’s Oracle Doing With JavaScript?!

by Geertjan Wielenga

Prezentacja o OracleJET, w szczególności o utrzymywaniu zależności do bibliotek JS w projekcie przy użyciu RequireJS. W drugiej części prezentacji o Two-way Data Binding przy zastosowaniu KnockoutJS.

REST no more use an actor (and Lego and Raspberry)

by Johan Janssen

System zbudowany z Raspberry Pi, pociagów Lego, czytnika RFID (żeby pociąg wiedział gdzie jest) i kamery, jako alternatywa do pisania Hello World, przy testowaniu możliwości języka w zastosowaniach IoT. Demo na żywo jeżdżących pociągów, reagujących na zajście pewnych zdefiniowanych zdarzeń.

A przy okazji porównanie możliwości technologii zdalnych aktorów Akki z serwisami REST, w którym ci pierwsi wypadają znacznie bardziej korzystnie (lepszy czas odpowiedzi - 3300 użytkowników obsłużonych w tym samym czasie, co 600 przez REST).


Java 9 Modularity in Action

by Paul Bakker, Sander Mak

O modularyzacji JDK, która zostanie wprowadzona w Javie 9. Definicje modułów, udostępnionych interfejsów oraz zależności w plikach module-info.java. Nowe parametry poleceń java i javac. Linkowanie z jlink.

Demo z wykorzystaniem modułów, a potem przykład adaptacji istniejącego projektu do Javy 9. W przypadku bibliotek nad którymi nie mamy kontroli, będziemy korzystać z modułów automatycznych, generowanych na podstawie nazwy JAR-a i z wszystkimi interfejsami udostępnionymi publicznie. Jeśli mamy kontrolę nad kodem, generujemy nowy module-info komendą jdeps.

Top 10 Performance Mistakes

by Martin Thompson

To według Martina Thompsona:
10. Not upgrading

9. Duplicated work - tu został podany ekstremalny przykład kodu, który 7000 razy odpytywał bazę danych po jednym request’ie, ponieważ wykonywał jedno i to samo zapytanie w pętli.

8. Data Dependent Loads aka Pointer Chasing - sekwencyjny dostęp do pamięci jest szybszy od losowego, ale nawet ten jest wielokrotnie szybszy od dostępu w którym kolejny adres zależy od poprzednich wyliczeń. To w związku z przewidywaniem przez współczesne procesory kolejnych instrukcji. Było o tym, żeby wybierać właściwe kolekcje i potrzebie porządnej implementacji hashCode (bo inaczej HashSet/Map zmieniają się coś w rodzaju LinkedList).

7. Too Much Allocation - alokacja jest prawie darmowa, ale odzyskiwanie pamięci już nie, ze względu na działanie GC. Ponadto zbyt wiele alokacji lub kopiowania danych czyści cache procesora.

6. Going Parallel - z każdym kolejnym wątkiem dodajemy złożoności i powinniśmy zastanowić się czy tego naprawdę potrzebujemy, porównując szybkość przetwarzania wielowątkowego z szybkością działania pojedynczego wątku.

5. Synchronous Communication - marnujemy czas oczekując na odpowiedzi serwera.

4. Not understanding TCP - to rozwinięcie poprzedniego punktu. W szczególności jednak, ze względu na Algorytm Nagle'a, komunikat klienta może w ogóle nie zostać wysłany do serwera, przez co będzie wielokrotnie ponawiany.

3. Text Encoding - przesyłamy dane w tekstowych formatach (JSON, XML, Base64), bo tak jest nam go łatwiej przeczytać w trakcie debuggowania. Marnujemy czas procesora potrzebny na kodowanie/dekodowanie informacji. Lepiej używać Wiresharka.

2. API Design - przykład poniżej
Źle:
public String[] split(String regex)
Lepiej:
public Iterable<String> split(String regex)
ponieważ w tym drugim przypadku nie ma alokacji tablicy o nieznanym rozmiarze.

1. Logging - ponieważ popularne loggery używając locków, zmieniają nawet współbieżne aplikacje w coś co wykonuje się jak w jednym wątku. Czasem wszystko co robią to sprawdzenie, czy debugowanie jest w ogóle włączone. Powodują też, że kompilator ma problemy z wstawianiem metod inline.
Lepiej zapisywać zdarzenia, ale tak żeby wiedzieć kiedy i jak wiele razy jakiś wyjątek wystąpił, nie zapisywać w logach całego stosu, ponieważ jest to informacja która się powtarza. Raporty o błędach mogłyby być zapisywane do plików i odczytywane przez inne procesy.
Do debuggowania lepiej też wykorzystywać narzędzia, które wstawiają instrukcje do kodu w trakcie wykonania aplikacji - jak Byte Buddy.

Stoiska


IG postawiło na odstresowujące kaczki, ale zainteresowanie utrzymywało się tylko przez pierwszy dzień. Były rozdawane pendrive’y, notesy, piwo i inne gadżety. Lepsze nagrody można było wygrać w konkursach z kodem, prostą matematyką czy krzyżówkami. Zawiodłem się na Sii, które zebrało dane osobowe kilkuset osób, a potem losowało nagrody w czasie gdy trwały jeszcze niektóre wykłady. Zamiast kontaktować się telefonicznie z wygranymi, jak robiły to inne firmy, losowano kolejnych. Rósł stos odłożonych na bok “zwycięzców”, a oni dalej losowali. Kto wie może też tam wygrałem, znalazłem się na miejscu pod koniec losowania.

Kolejki ustawiały się do koła fortuny jednej z firm, gdzie można było wygrać power banki, pendrive’y, koszulki i skarpetki. Wszyscy próbowali wielokrotnie, a w pierwszych dniach naprawdę coś tam ciekawszego zdobyłem. Ostatniego dnia wygrałem “prezent”, czyli dowolny przedmiot do wyboru. Na stoisku były w tym czasie już tylko damskie koszulki, skarpetki i długopisy. Nie były to moje pierwsze skarpetki, więc jeszcze kilka dni i nie musiałbym ich już nigdy więcej kupować.


niedziela, 14 lutego 2016

Kawerny na Górce Pychowickiej

Górka Pychowicka jest niewielkim (247 m n.p.m.) wzniesieniem w paśmie Wzgórz Tynieckich i jednym z kilku zielonych miejsc do których można, w sensownym czasie, dotrzeć piechotą z krakowskiego Ruczaju.

Tydzień temu wybrałem się tam na spacer. Mam już kilka stałych tras na Górce, ale tym razem wybrałem zupełnie nową - wypatrzyłem ścieżkę, na którą wcześniej zupełnie nie zwracałem uwagi. I znalazłem wąski wąwóz, który rozgałęział się, a obydwa rozgałęzienia kończyły się czymś co w tamtym momencie uznałem za jaskinie.

Wejście do "długiej" kawerny
"Długa" kawerna
Wejście do jednej z nich niestety, zostało zniszczone przez kogoś kto wybrał to akurat miejsce na palenie śmieci - jest kompletnie osmalone. Nielegalne wysypiska śmieci to spory problem na Łąkach Pychowickich, ale tak bezczelnej i ohydnej destrukcji nie oglądałem od dawna.

Po powrocie poszukałem na sieci tych "jaskiń", no i się rozczarowałem, bo okazały się kawernami - elementami fortyfikacji Twierdzy Kraków. Tym niemniej zdecydowałem wybrać się na miejsce jeszcze raz, tym razem z latarką, i dokładniej je obejrzeć.

Zrobiłem to dzisiaj. Muszę przyznać, że po oględzinach, nie pomyliłbym ich z jaskiniami. Wyraźnie widać, że zostały wykute w skałach. Jedna z nich, poza wejściem, ma formę długiego korytarza. Druga, ta zniszczona, szerszej i znacznie krótszej komory. Jej stan jest nawet gorszy niż to wyglądało z zewnątrz. Wewnętrzne ściany także pokryte są sadzą. Powietrze przesycone jest zapachem spalonego plastiku.

Wejście spalonej kawerny
Spalona kawerna
Zdrowiej i lepiej prezentuje się wąwóz, który łączy obydwie kawerny. Jest dość wąski, ze ścianami porośniętymi mchem i paprociami.

Ściany wąwozu
Tutaj zamieściłem więcej zdjęć z kawern i wąwozu.

poniedziałek, 18 sierpnia 2014

Rzym 2014

W Rzymie spędziłem siedem dni - nie licząc tych potrzebnych by tam dolecieć i wrócić do Polski. Poleciałem bezpośrednio z Krakowa, Ryanairem. Początkowo w planach była także jednodniowa wyprawa do miasteczek Castelli Romani, ale na miejscu zdecydowałem się zamienić ją na zwiedzanie Ostia Antica na rzymskim wybrzeżu.

Forum Romanum

Tanie linie i lotnisko Ciampino

Pierwszy raz leciałem tanimi liniami. Zwykle jeśli latam samolotem to latam z pracy i zwykłymi liniami. Na poprzednie wakacje też raczej wybierałem promocje zwykłych linii - jak do Japonii - Aeroflotem. Dla kogoś kto często lata Rynairem to pewnie normalka, ale mnie pewne rzeczy zaskoczyły.

Przede wszystkim kwestia bagażu głównego. Kiedy kupowałem bilety wybrałem linie ze względu na brak przesiadek oraz cenę - o połowę niższą niż u konkurencji. Dopiero po zakupie odkryłem, że w cenie biletu nie ma bagażu głównego - po dokupieniu tej opcji - różnica w cenie znacząco zmalała. Wiele opcji mogłem jeszcze dokupić - wybór miejsca 25 PLN w jedną stronę - wybrałem. Kolejka priorytetowa do samolotu - za chyba 50 PLN - tu się nie zdecydowałem, ale inni tak - później zrozumiałem dlaczego. 

Kilkanaście osób zdecydowało się na tą szybką kolejkę i ci mieli swobodę wyboru miejsca na bagaż podręczny - o co później było trudniej. Samolot - Boeing 737-800 - miał jedno dodatkowe siedzenie w każdym rzędzie czyli konfigurację 3x3, ale przy tym standardową ilość miejsca na bagaże. Poza szybką kolejką, była jeszcze normalna - ludzie ustawili się w niej na 40 minut przed wpuszczeniem pierwszej osoby na pokład.

Lotnisko Ciampino jest mniejsze od krakowskich Balic. Jest ciasne, nie ma żadnych wygód, kolejki do samolotów wiją się między siedzeniami, ponieważ brakuje miejsca. Po przejściu przez bramki dostępna jest jedna mała toaleta. W hali przylotów właściwie niczego nie ma: kantor, dwa stoiska z biletami na autobus i bar dla pracowników lotniska.

Do Rzymu, w okolice dworca Roma Termini, pojechałem autobusem Terravision za 4 EUR.

Rzym ze wzgórza Janikulum

Hostel

Mieszkałem w małym hostelu w okolicach Placu Berberini. Super lokalizacja, kilka minut do stacji metra i 5 minut do Fontanny Di Trevi. Lub, w inną stronę, 10 minut do Hiszpańskich Schodów. Śniadanie w kafejce za rogiem. Na ulicy przed wejściem rewelacyjna pizzeria, gdzie dostawałem zniżki odkąd właściciel się domyślił, że jestem z tego hostelu.

Właścicielka - Monica - przygotowała mi mapę miejsc, które powinienem odwiedzić - atrakcje, bary, najlepsze lody. A potem jakby tego było mało, narysowała przy mnie drugą mapę z kolejnymi atrakcjami, trasami autobusów i wszystkiego czego powinienem się dowiedzieć. Dostałem tyle porad, że starczyłoby na jeszcze jeden tydzień. A w kolejnych dniach Monica - jeśli ją spotkałem - dodawała mi do mapy kolejne punkty.

Pierwsza mapa atrakcji

Roma Pass

W czasie wizyty korzystałem z kart Roma Pass. Karta na trzy dni kosztuje 36 EUR - sporo, ale z kartą dwa pierwsze zabytki czy muzea zwiedza się za darmo. Przy odpowiednim wyborze (np. Koloseum i Forum Romanum kosztują razem 11 EUR) koszt karty szybko się zwraca. Po dwóch zabytkach w kolejnych ma się zniżki. Poza tym istnieje grupa muzeów, do których wstęp jest zawsze darmowy z Roma Pass. Zniżki obejmują większość państwowych i miejskich muzeów, ale nie Watykan i muzea kościelne. Kartę można kupić w jednym z punktów informacji turystycznej. 

Z Roma Pass można korzystać z komunikacji miejskiej - metra, autobusów, kolejek podmiejskich (w tym kolejki nad morze, z której korzystałem) oraz włoskich kolei (na odcinkach w granicach Rzymu). Przetestowałem kartę właściwie we wszystkich tych środkach komunikacji. W metrze bramki czytają ją jak bilet czasowy. W autobusach nie ma żadnych czytników przy wejściach - kartę należy tylko okazać w przypadku kontroli.

Koloseum

Bezpieczeństwo

Przed wyjazdem do Rzymu na jednym z polskich portali przeczytałem artykuł o gangach żebraków, którzy wymuszają haracze na turystach przy automatach biletowych stacji Roma Termini. Poza gangami żebraków, turystom zagrażać mieli wszechobecni kieszonkowcy. Było też o bezradności policji i wbijaniu długopisów w oczy ochroniarzy metra, którzy odważyliby się bronić turystów. Ogólna wymowa artykułu była taka, jakby w Rzymie urządzano zbiorowe polowania z nagonką na turystów. Artykuł spotkał się aprobatą komentujących, którzy wprawdzie rzadko mogli podzielić się własnymi doświadczeniami, ale chętnie odgrażali się, że do Rzymu nigdy nie pojadą.

Jak było naprawdę? Spokojnie, choć widziałem kilka incydentów, które sugerują, że faktycznie należy uważać na kieszonkowców. Widziałem panią krzyczącą na ulicy po tym jak ukradziono jej telefon. I złodziejkę osaczoną i zatrzymaną na stacji metra przez współpasażerów. To jednak jednostkowe przypadki w wielkim i bardzo żywym mieście.

Z natrętnym żebraniem osobiście miałem do czynienia raz, gdy coś kupowałem i podszedł do mnie romski chłopiec. Nie odczepił się dopóki się stamtąd nie oddaliłem. Żebrzących Romów faktycznie było więcej niż gdzie indziej pod dworcem Roma Termini. Sam dworzec jest ogromny i nie jest trudno znaleźć w nim spokojniejsze miejsce. Biletowego “pomagacza” widziałem tylko przy automacie blisko wejścia. Nie wiem jak jest z automatami w metrze, ponieważ posługiwałem się kartami Roma Pass i nie musiałem kupować biletów na metro.

Trochę żebraków kręci się też w okolicach miejsc pielgrzymkowych - ważniejszych kościołów katolickich - nie spotkałem się jednak z ich strony ze zbytnią natrętnością.

Bazylika Św. Piotra z Zamku Św. Anioła

Jedzenie

Mało oryginalnie, żywiłem się głównie pizzą. W Rzymie bardzo popularne są bary, w których można dostać porcję pizzy o wybranym rozmiarze - wszystko na ogół świeże i dobre. Kawałek można zjeść na miejscu, albo zabrać ze sobą i wtedy dostaje się go złożonego razem w prostokąt jak kanapkę. 

Próbowałem lodów w obydwu miejscach poleconych mi przez Monicę i były rewelacyjne. Pierwszym było Giolitti na Via Uffici del Vicario. Drugim Fassi na Via Principe Eugenio. W tym pierwszym musiałem odstać masakryczną kolejkę, bo był to akurat dzień gdy pojawili się niemieccy ministranci i też mieli ochotę na te lody.

Przekonałem się natomiast, że nie zawsze warto próbować lodów w okolicach miejsc obleganych przez turystów. Raz dostałem naprawdę niedobre. Podobnie było z barami z pizzą. W miejscach przed którymi przechodziły tłumy turystów obsługa mniej się starała.

Najgorszy obiad - makaron z niezidentyfikowanym mięsem - zjadłem w kafeterii parku archeologicznego w Ostia Antica. Był to też jeden z najdroższych posiłków tego wyjazdu. Wykorzystali tam po prostu fakt, że wychodząc na zewnątrz traci się bilet.

Kolejka po lody w Giolitti

Niemcy

Mój pobyt w Rzymie przypadł na czas kiedy swój zjazd mieli w mieście niemieccy ministranci. Było ich kilka tysięcy. Biegali po mieście w słomkowych kapeluszach, a czasem w bawarskich zielonych spodenkach i krzyczeli. Wrzeszczeli hasła lub śpiewali wykrzykiwali religijne i patriotyczne piosenki.

Poniżej mała próbka - Niemcy w metrze:

Przez kilka kolejnych dni, gdziekolwiek szedłem tam byli oni. Ustawiali się w kolejce do Watykanu i Zamku Świętego Anioła. Jednocześnie przychodziła nam ochota na lody w Giolitti. W Ostia Antica godzinę czekałem w kolejce do kasy, aż ich wszystkich wpuszczą. Pewnego wieczora postanowiłem się przejść na Hiszpańskie Schody i byli tam oni... wszyscy. Zajmowali schody od góry do dołu, machali flagami, skakali i wykrzykiwali hasła.

Po pewnym czasie miałem już starych znajomych, których rozpoznawałem przy kolejnych atrakcjach. Ulżyło mi jednak gdy pewnego dnia zniknęli. Tego dnia pojechałem do Bazyliki Świętego Pawła za Murami - i niespodzianka - znów trafiłem na wszystkich - odbywała się tam specjalna msza dla nich z efektami wizualnymi (to jest kościół był podświetlony na różowo-fioletowo). Było to jednak naprawdę nasze ostatnie spotkanie.

Niemieckie Hiszpańskie Schody
Bazylika Świętego Pawła za Murami na różowo i fioletowo

Od Placu Berberini do Placu Navona

To właściwie moja codzienna trasa, bo w ten sposób najszybciej można było dotrzeć pieszo do centrum miasta. Pierwszym przystankiem po drodze była Fontanna Di Trevi, która jest niestety aktualnie w remoncie, obłożona rusztowaniami i nieczynna. W jednej z bocznych ulic odchodzących od Fontanny był mój ulubiony bar z pizzą. Przed fontanną, skręcając w lewo, bocznymi uliczkami, mogłem po kilku minutach trafić na szczyt Kwirynału - przed znajdujący się tam pałac prezydencki.

Idąc dalej mijałem Świątynię Hadriana i przedzierając się przez ulicznych sprzedawców docierałem do Panteonu. To dawna rzymska świątynia wszystkich bogów - a współcześnie kościół katolicki. Na placu przed Panteonem zbierały się zawsze największe tłumy, więc rzadko się tu zatrzymywałem. Idąc dalej mijałem posterunki Carabinieri przed włoskim senatem i docierałem w końcu do Piazza Navona.

Plac Navona zajmuje miejsce jednego ze starożytnych stadionów i zachował jego kształt. Na placu znajdują się trzy fontanny, obowiązkowy obelisk i piękny kościół Świętej Agnieszki. Stamtąd jest już dość blisko do Tybru i Zamku Świętego Anioła.

Fontanna Di Trevi (w remoncie)
Panteon
Piazza Navona

Watykan

Do Watykanu wybierałem się trzykrotnie. Za pierwszym razem poszedłem, zobaczyłem gigantyczną kolejkę złożoną głównie ze wspomnianych Niemców i przeraziłem się. Ponadto zaskoczyła mnie liczba naganiaczy oferujących "szybkie wejście" do Watykanu - to pod tym względem najgorsze miejsce w Rzymie - opędzałem się od nich przez całą długą drogę ze stacji metra do Placu Świętego Piotra.

Postanowiłem, że wybiorę się tam następnego dnia wcześniej. Nie pomogło. Utknąłem w długiej na trzysta metrów kolejce przed wejściem do muzeów watykańskich, pośrodku tłumu przepychających się Chińczyków. Przez pół godziny kolejka nie drgnęła nawet o krok. Chińczycy rozsiedli się wokół. Z prawej strony mijały mnie cały czas osoby, które najwyraźniej miały rezerwacje. Wtedy poszedłem po rozum do głowy i zaczerpnąłem informacji na temat biletów i systemu rezerwacji. Wróciłem do hostelu i kupiłem sobie bilet elektroniczny z rezerwacją na popołudnie tego samego dnia.

Wejście z rezerwacją zajęło około 15 minut - tam też była kolejka, ale znacznie krótsza. Przed wejściem do Watykanu przechodzi się też kontrolę z prześwietlaniem plecaków jak na lotnisku.

Ze środka pamiętam przede wszystkim rzekę ludzi, która porwała mnie i poniosła w stronę Kaplicy Sykstyńskiej. No, obejrzałem wcześniej muzeum etnograficzne, gdzie nie było tłumów. I kiedy ruszyłem w stronę Kaplicy to starałem się zatrzymywać w każdej sal na trochę dłużej, by obejrzeć obrazy, gobeliny czy rzeźby. Ale przez cały czas ktoś przechodził obok, potrącał mnie albo przemawiał koło mojego ucha do prowadzonej przez siebie wycieczki.

W Kaplicy Sykstyńskiej zatrzymałem się na dłużej - cała ogromna sala wypełniona była ludźmi, pomiędzy którymi wiła się rzeka tych, których nie czuli potrzeby żeby się za bardzo rozglądać. W tłumie chodzili ochroniarze i raz za razem krzyczeli do kolejnych turystów z komórkami: "no photo! no photo!".

Kaplica jest piękna, ale przeżycie zwiedzania jej w tej ciżbie było raczej traumatyczne. Chętnie pojechałbym tam jeszcze raz, poza sezonem turystycznym i wtedy wybrałbym się tą trasą wcześnie rano - najwcześniej kiedy można zdobyć rezerwację.

W ogromnej Bazylice Świętego Piotra tłum się rozproszył, było więc znacznie lepiej.

Bazylika Świętego Piotra
Watykan
Watykan
Bazylika Świętego Piotra

Via Appia Antica
Via Appia Antica to zachowany odcinek starej rzymskiej drogi Via Appia. Zaczyna się w okolicach bramy San Sebastiano i ciągnie daleko za miasto. Niektóre odcinki mają zachowaną nawierzchnię z kamiennych płyt. Postanowiłem przejść tą drogą tak daleko jak dam radę i zwiedzać ciągnące się wzdłuż niej zabytki - w tym najważniejsze - chrześcijańskie katakumby.

Pomysł okazał się taki sobie - przede wszystkim dlatego, że pierwszy odcinek Via Appia Antica to normalna ulica z ruchem samochodowym. Normalna, ale też bardzo wąska, ze śladowym poboczem i w wielu miejscach wysokimi murami po obydwu stronach. Bardzo szybko miałem jej dość.

Sytuacja stała się lepsza po Katakumbach Świętego Kaliksta, bo mniej więcej w tych okolicach znajduje się skrzyżowanie po którym Appia Antica staje się lokalną drogą z niewielkim ruchem. Żałowałem jednak, że nie skorzystałem z wypożyczalni rowerów, która znajdowała się przy punkcie turystycznym na początku drogi. To byłby optymalny sposób jej zwiedzania.

Zwiedziłem Katakumby Świętego Kaliksta. Poza kilkoma komorami, w których spoczywali święci, wygląda to tak, że idzie się głębokimi, podziemnymi korytarzami, wzdłuż niezliczonych półek w których układani byli zmarli. Teraz jest tam elektryczne światło, oryginalnie dostarczały go (wraz z wentylacją) nieliczne głębokie szyby. Ogólnie jest to takie miejsce, w którym bardzo nie chciałbym zabłądzić, przed czym zresztą ostrzegali nas przewodnicy.

Od tego momentu marsz Via Appia Antica stał się naprawdę przyjemny. Szedłem zachowanymi fragmentami rzymskiej drogi między ruinami i sosnami piniowymi. Zwiedziłem Grobowiec Cecylii Metelli oraz stanowisko archeologiczne Capo di Bove z odkrytymi fragmentami łaźni. Obejrzałem, niestety z daleka - bo było już późne popołudnie i stanowisko zostało zamknięte - ruiny akweduktów.

Niestety zbliżał się wieczór i musiałem postanowić co robić dalej. Mogłem zawrócić, skręcić w jedną z bocznych dróg i dojść do osiedla z którego odjeżdżają autobusy, albo pójść dalej i wrócić pociągiem. Wybrałem ostatnią opcję ze stacją kolejową Torricola - na mapie wyglądało to bardzo zachęcająco - czekał mnie dalszy marsz Via Appia Antica, która tymczasem zmieniła się w przyjemną wiejską drogę otoczoną ruinami, a potem niecały kilometr marszu zwykłymi ulicami.

Pierwsza z tych zwykłych ulic to był mój najgorszy moment tych wakacji. Droga wąska, kręta, bez pobocza - z kolczastymi krzakami wystającymi na jezdnię i sporym ruchem w obie strony. Za krzakami były jeszcze zasieki i ostrzeżenia, bo teren wokół był wojskowy. Było to bardzo długie kilkaset metrów - pokonując je doszedłem do wniosku, że poza miastem po Włoszech warto poruszać się tylko samochodem.

Via Appia Antica
Akwedukty w pobliżu Via Appia Antica

Ostia Antica i wybrzeże

Ostia Antica to ruiny starego rzymskiego miasta i portu. Znajdowało się kiedyś u ujścia Tybru do morza. Potem brzeg morza przesunął się o trzy kilometry. Dzisiaj to ogromny kompleks rzymskich ruin - jeden z największych we Włoszech. Spędziłem tam większą część dnia, chodząc pośród ruin, oglądając mozaiki i zachowane malowidła i nadal mam wrażenie, że wiele rzeczy opuściłem. Na miejscu jest też muzeum z kolekcją antycznych rzeźb.

Do ruin dojechałem kolejką podmiejską, która jest tu przedłużeniem metra. Po zwiedzaniu Ostii pojechałem kolejką dalej - do końca linii - na stację Cristoforo Colombo. Były tam jednak tylko płatne plaże, na które nie zdecydowałem się przed wieczorem. Potem ma mapie odkryłem inne miejsce, z molem, w okolicach stacji Lido di Ostia Centro i pojechałem tam jeszcze raz ostatniego wieczora.

Ostia Antica
Ostia Antica
Ostia Antica
Wybrzeże Lido di Ostia

Koty

Rzymskie ruiny pełne są bezdomnych kotów. Całe stadko żyje w ruinach Nimfeum Aleksandra Sewera. Spotykałem je pośród ruin Ostia Antica. Jest jednak pewne szczególne miejsce - rejon Area Sacra z ruinami czterech świątyń i teatru - gdzie urządzono dla nich schronisko. Koty są wysterylizowane, wyleczone i oswojone - można wybrać sobie kota i adoptować. Dziesiątki kotów wyleguje się w ruinach, popołudniami można do nich zejść - pomieszczenie schroniska znajduje się pod ulicą, w jednym z narożników Area Sacra.

Kot z Area Sacra
Area Sacra

Co więcej

W ciągu tego tygodnia odwiedziłem jeszcze kilkanaście kościołów, kilka muzeów, park, zamek, wyspę na Tybrze, kilka spośród rzymskich wzgórz, place, fontanny i ruiny. Oto kilka jeszcze miejsc, które chciałbym szczególnie polecić:
  • Oczywiście Koloseum, ale też Forum Romanum i ruiny na Palatynie - bilet na cały ten obszar jest jeden.
  • Widok na Forum Romanum z Kapitolu. Warto też wejść na taras Ołtarza Ojczyzny - wejście jest za darmo - i popatrzeć w stronę Koloseum i Forum Trajana.
  • Najlepszy widok na cały Rzym (bez Watykanu) jest ze wzgórza Janikulum na zachód od Tybru.
  • Zamek Świętego Anioła z muzeum i widokiem na Watykan.
  • Muzeum Narodowe w Palazzo Massimo alle Terme z zabytkami antycznymi - pięknymi rzeźbami, malowidłami i mozaikami.
  • Bazylika Matki Bożej Większej
  • Piazza del Popolo z obeliskiem i bliźniaczymi kościołami
Co się nie udało:
  • zrobić zdjęcia Ust Prawdy od frontu - nie starczyło mi cierpliwości, żeby stać w kolejnej stumetrowej kolejce.
I jeszcze kilka spostrzeżeń:
  • Z podbitego Egiptu Rzymianie wywieźli chyba wszystkie obeliski jakie mogli znaleźć. Stanowią podstawowy element wystroju rzymskich placów. Nie ma porządnego placu bez dwóch z trzech rzeczy: fontanny, pomnika lub obelisku. Przy czym te ostatnie wydają się znacznie częstsze od pomników.
  • Typowy samochód rzymski ma podłużną, ciągnącą się przez cały bok rysę, rzadziej boczne wgniecenie. Samochód nieuszkodzony jest prawdopodobnie nowy albo nieużywany.
  • Pojęcie ścieżki rowerowej nie jest w Rzymie znane - podobnie pobocza przy drodze za miastem. Rowery widziałem tylko w okolicach wypożyczalni na Via Appia Antica. Popularne wśród miejscowych są skutery.
  • Miasto ma rewelacyjną wodę, lepszą niż wiele mineralnych dostępnych w butelkach. Na mieście jest też pełno kranów, z których można zaczerpnąć bieżącej wody do picia. Kupowanie butelkowanej wody w Rzymie, zwłaszcza od ulicznych sprzedawców, którzy oferują ją po kilkukrotnie zawyżonej cenie jest po prostu marnowaniem pieniędzy.
Zamek Świętego Anioła
Widok z Ołtarza Ojczyzny
Antyczny fresk w Palazzo Massimo alle Terme

Linki

poniedziałek, 18 listopada 2013

J-Day 2013, Kraków

How To Jave EE
(prowadzący: Adam Bien)

Pokaz na żywo tworzenia prostego webservice'u w Java EE z przykładem budowania obiektów JSON. Ciekawie i zabawnie poprowadzone. Przykład, w nawiązaniu do Krakowa, był zrobiony na smokach, które to posiadają takie właściwości jak name, fireClassification czy virginCapacity.

Była to najbardziej interaktywna z prezentacji, właściwie bez slajdów. Aplikacja była stopniowo rozbudowywana w nawiązaniu do kolejnych pytań z publiczności. W przykładzie zastosowano wzorce: Entity-Control-Boundary i Observer.


Building modern Web Applications
(prowadzący: Bartosz Pampuch)

Omówienie zagadnień związanych z implementacją aplikacji webowych, takich jak User Experience, czy problemy, które mogą wystąpić podczas tworzenia tego rodzaju aplikacji. Jako przykład posłużyła aplikacja do zarządzania danymi medycznymi, czy też po prostu kartami pacjentów. Została ona stworzona z wykorzystaniem JavaScript i Sass - rozszerzenia CSS.

Prowadzący zachwalał model single page application, w którym cały niezbędny do obsługi użytkownika kod pobierany jest jednorazowo w czasie ładowania strony, a liczba kolejnych żądań wysyłanych przez przeglądarkę do serwera jest minimalna. W modelu tym ciężar obsługi użytkownika spoczywa na lokalnej przeglądarce. Jest on jednak trudniejszy w implementacji.

W części poświęconej User Experience było trochę o zasadach animacji i ich zastosowaniu w tworzeniu webservice'ów. Przykładowo, aby ruch wydawał się bardziej naturalny warto zwolnić jego początek i koniec. Jeśli animowanych elementów jest na stronie więcej, ich ruch powinien zaczynać się w w różnym czasie.

Omówione zostały problemy występujące w aplikacjach webowych:
  • wycieki pamięci, związane z błędami w pluginach jQuery
  • problemy z płynną animacją spowodowane przez zbyt częsty odczyt przez JavaScript właściwości takich jak offsetTop - wymusza on wykonanie ponownej rekalkulacji przez przeglądarkę i należy go ograniczać.

What's new in Java EE 7?
(prowadzący: Dirk Weil)

Moje największe rozczarowanie na tej konferencji. Omówienie kolejnych JSR-ów zaimplementowanych w Java EE 7. Slajdy przeładowane tekstem, do tego trochę przygotowanych wcześniej przykładów w kodzie - dla mnie było ich za mało. Nudne. Ta prezentacja była zaprzeczeniem pierwszej. Równie dobrze, można było zadać tytułowe pytanie google i poczytać dokumentację na sieci.


Advanced techniques for building and monitoring applications based on the JVM
(prowadzący: Piotr Łaskawiec)

Ciekawa prezentacja o tym jak zostać Well-Grounded Java Developerem - osobą, która potrafi naprawić aplikację przez zmianę wyłącznie parametrów JVM.

Punktem wyjścia do prezentacji był przykład, podobno wzięty z życia, problemów z wydajnością pewnej aplikacji. Prześledziliśmy kolejno:
  • zdobycie informacji o numerze procesu, komendą jps,
  • jinfo,
  • zawartość stosu jstack,
  • wykorzystanie pamięci z jmap - kilkukrotnie, żeby sprawdzić jak się zmienia i dojść do wniosku, że nie tu leży nasz problem,
  • informacja o garbage collection: jstat -gcutil, pozwoliła stwierdzić, że GC jest uruchamiany zbyt często
  • w ostatnich kroku sprawdziliśmy jaki jest tego powód: jstat -gcccause
Przyczyną problemu było inicjowanie GC, przez wywoływanie metody System.gc().

W dalszej części prezentacji dowiedzieliśmy się więcej o parametrach JVM związanych z trybami pracy Garbage Collectora oraz zarządzaniem pamięcią sterty. Pełna lista opcji JVM zawiera 900 pozycji.

Rozwiązanie problemu - wyłączenie garbage collection wywoływanych przez programistę - wymagało restartu JVM z opcją -XX:+DisableExplicitGC

Na prezentacji zostały także omówione metody implementacji własnych narzędzi do monitorowania JVM, w Javie oraz w C++ przez JVM TI.


Listen to the sounds of your application
(prowadzący: Maciej Biłas i Krzysztof Ciesielski)

Krótkie wprowadzenie do pomiarów oraz narzędzi Graphite i Logstash. W pierwszej części trudno było dotrzymać kroku prowadzącemu, który powinien popracować nad dykcją. Druga, dotycząca Logstash była znacznie lepsza.


Google Web Toolkit Framework
(prowadzący: Łukasz Wątor)

Na tej prezentacji prowadzący zachęcał nas do porzucenia JavaScriptu i zastąpienia go przez GWT. W tej technologii, projekty aplikacji webowych pisane są w całości w Javie. Z tym, że aplikacja klienta maksymalnie w wersji 1.4 Javy.  Następnie,  dla klienta, generowany jest kod HTML+JavaScript.

Zobaczyliśmy podstawową strukturę aplikacji i implementację RPC między klientem i serwerem. Możliwości GWT zostały przetestowane na webowym demie Diablo. Na koniec jeszcze automatyczna generacja bazowych plików projektu GWT przy użyciu Spring Roo.

czwartek, 25 lipca 2013

Sztokholmskie stacje metra

Większość sztokholmskich stacji metra ma swój unikalny styl. W ich projektowaniu uczestniczyli artyści. Nie wiedziałem o tym jeszcze, kiedy przyjechałem tu po raz pierwszy. Dlatego przyjemnie zaskoczył mnie widok stacji Hallonbergen, która wygląda jakby przygotowały ją dzieci:


Za drugim razem, mając już więcej czasu, zatrzymywałem się na ciekawszych stacjach, żeby je dokładniej obejrzeć. Na niebieskiej 11, tej samej linii na której na której znajduje się Hallonbergen, położona jest stacja Solna centrum. Wykuta głęboko w skałach, jest pomalowana w czerwono-zielone barwy (las i czerwone niebo). Jej dominującym motywem jest ekologia, stąd malowidła o takiej tematyce:



Pozostałe stacje na tej linii nie prezentowały się aż tak imponująco, ale właściwie na każdej, z wyjątkiem brzydkiej naziemnej Kisty, można było znaleźć coś ciekawego. Jak chociażby ten ogromny but, na sklepieniu Rådhuset:

Linią 11 pojechałem specjalnie po to by obejrzeć stacje, ale kilka ciekawych miejsc odkryłem zupełnie przypadkowo. Np stację Stadion, z kolorową tęczą wymalowaną na sklepieniu, kiedy wybraliśmy się na start maratonu:

Podobnie przypadkowo odkryłem stację Thorildsplan na zielonej linii. Jej dekoracje nawiązują do klasycznych gier komputerowych, Pacmana i innych:

Na stacji Universitetet znaleźliśmy mozaiki przedstawiające różne procesy zachodzące w przyrodzie:



wtorek, 23 lipca 2013

Migawki ze Szwecji

Widok na Stare Miasto (Gamla Stan) z wieży sztokholmskiego ratusza:

Sala posiedzeń rady miejskiej:

Zmiana warty przed pałacem królewskim:


Plenerowa impreza w lesie pod wieżą telewizyjną:


Widok na Stare Miasto z Katarinahissen:



Muzeum Vasy:

Zachód słońca nad jeziorem Melar:


Wyspa Djurgården:



Nastolatki wracają z misiem z Gröna Lund:

Samochód na ulicy w Älvsjö:

Wędkarze na moście pod Parlamentem:

Flash mob na Placu Sergala:

Wypoczynek w parku:

Maraton w Sztokholmie...




...i sprzątanie po maratonie

Pałac Drottningholm w Ekerö na zachód od Sztokholmu:


Nabrzeże w okolicach Zamku Królewskiego:


Pamiątkowy łoś: