wtorek, 13 grudnia 2011

Processor Warszawa

Wikipedia wyjaśnia pojęcie Java Processor jako sprzętową implementację maszyny wirtualnej Java (JVM). Innymi słowy kod binarny stanowiący instrukcje maszyny wirtualnej staje się kodem instrukcji procesora.

Nowością na tym polu jest wynalazek jednej z polskich firm - http://www.gryftechnologia.com.
Zbudowała ona procesor zwany Warszawa, używany w rozwiązaniach komercyjnych.

Warszawa Processor

Artykuły opisujące nowy procesor można znaleźć poniżej:

http://24pr.pl/2011/12/firma-gryftechnologia-stworzyla-pierwszy-polski-procesor/
http://pisz.wm.pl/81076,Chlopak-z-Pisza-zbudowal-pierwszy-polski-procesor.html
http://wyborcza.biz/Firma/1,101618,10773137.html
http://www.pcworld.pl/news/378171/Na.Mazurach.powstal.pierwszy.polski.procesor.html

poniedziałek, 12 grudnia 2011

Agile Development Day

Wczoraj miał miejsce w Warszawie Agile Development Day. Wydarzenie organizowane przez 2 firmy: Pragmatists wspólnie z Sages.

Od godziny 8:00 do 18:00 jako jeden z 20 wybrańców miałem możliwość uczestniczyć w tworzeniu aplikacji metodyką agile. Pracowaliśmy w parach. Do każdej pary dołączyła też jedna osoba z organizatorów doświadczona w pracy agile. Tworzyliśmy aplikację społecznościową, w której każdy zalogowany użytkownik może chwalić się nabytymi zdolnościami lub takimi których aktualnie się uczy. Za czas spędzony na nauce i trudność zadania otrzymuje punkty. W ten sposób inne osoby śledzące danego użytkownika mogą zobaczyć w czym się doskonali i czuć się zmobilizowane do poszerzania własnych kompetencji. Dostępny jest też ranking najbardziej aktywnych użytkowników. Ciekawy moim zdaniem pomysł na system.
Kody źródłowe dostępne na licencji WTFPL leżą na githubie:

https://github.com/has-learnt-it/haslearntit

Plan imprezy przedstawiał sie następująco:

8:00 - 8:20: start, śniadanie, w tym czasie opis projektu i sposobu pracy
8:20 - 9:00: Szkolenie Cassandra
9:00 - 9:30: Szkolenie Spring MVC
9:30 - 10:55: I iteracja
10:55 - 11:00: przegląd iteracji, rotacja par
11:00 - 12:30: II iteracja
12:30 - 12:45: przegląd iteracji i retrospekcja, rotacja par
12:45 - 13:30: obiad
13:30 - 14:55: III iteracja
14:55 - 15:00: przegląd iteracji i retrospekcja, rotacja par
15:00 - 16:25: IV iteracja
16:25 - 16:30: przegląd iteracji
16:30 - 17:30: V iteracja (kończenie rozpoczętych historyjek, ostatni
szlif aplikacji)
17:30 - 18:00: retrospekcja i zamknięcie imprezy

Po pierwszej iteracji, która przebiegała najbardziej chaotycznie ze wszystkich zauważalne były problemy podziału odpowiedzialności za zadania. Nikt nie wiedział która drużyna zajmuje się jakim kawałkiem aplikacji, mimo że było wiadome które 'user story' są aktualnie realizowane. Pojawiły się problemy z równoległą pracą na tym samym fragmencie kodu widoczne przy komitach na githuba (mergowanie zmian, kolejny update i konflikty bo w miedzyczasie inna grupa zmieniła kod, znów mergowanie, update i znów konflikty itd. )

Dlatego po pierwszej retrospekcji, w czasie której każdy na ścianie na kartce mógl zamieścić komentarz co go boli a co cieszy, pojawił się pomysł na stand-up'y, czyli krótkie spotkania organizowane 2 razy w czasie każdej iteracji, w których brała jedna osoba z każdego teamu i mówiła czym para aktualnie się zajmuje i jakie problemy natrafia. Dzięki temu każda grupa wiedziała kto czym się zajmuje i mogła podsunąć pomysł na rozwiązanie problemu.

Kolejne iteracje przebiegały już coraz płynniej, ale zauważalne były braki wiedzy na temat gita i cassandry. To wydłużało czas spędzany na naukę tych rzeczy. Na pewno nauka nie poszła w las.

Sam jestem bardzo zadowolony, że mogłem się tam zjawić. Poznałem wiele ciekawych osób, zobaczyłem jak świetnie integruje się github z Jenkinsem. Po każdym komicie na centralne repozytorium mogliśmy obserwować jak zmiany są deployowane na serwerze produkcyjnym i od razu można używać nowych funkcjonalności na produkcji. To jeszcze bardziej podsycało nasz zapał do pracy - działająca aplikacja rosnąca w oczach (UI widoczny na rzutniku przez cały czas). Każdy nasz nowy kawałek funkcjonalności mogł już za chwilę w mgnieniu oka znaleść się na produkcji.

Wymagania w postaci user-story były dostępne online na portalu https://hosted.tinypm.com/agiledevday/

Z pewnością dynamika pracy i bardzo wiele nowych technologii jakie napotkałem nie pozwoliły ogarnąć tego, co powstało w ciągu jednego dnia, dlatego planuję na spokojnie usiąść nad systemem i zobaczyć jak niektóre rzeczy zostały rozwiązane.

Był to cenny i miło spędzony czas. Podziękowania dla organizatorów za zaangażowanie i obiad oraz cattering w ciągu całego dnia (przegryzaki i napoje).

Informacje o wydarzeniu można również śledzic na Twitterze

niedziela, 4 grudnia 2011

Globalny Dzień Code Retreat 2011

W łódzkim oddziale Java User Group odbył się 3go grudnia pierwszy w Łodzi Code Retreat.
Pod czujnym okiem Piotra Przybylaka 12 programistów doskonaliło swój warsztat w zakresie Test Driven Development.
Od godz. 10.00 do 16.00 (z kawałkiem) w siedzibie firmy Mobica przeszliśmy przez kilka 45-minutowych sesji, w których w parach (w każdej sesji inna) próbowaliśmy zakodować Game of Life. Niestety nikomu nie udało się doprowadzić do w pełni działającej aplikacji, ale nie w tym rzecz. Chodziło o dopieszczenie każdej linijki kodu mając na uwadze postawione założenia.

Jak wygląda praca w parze? O co chodzi w TDD? Dobrze odzwierciedla to ten oto dialog.

Każdy wyniósł z tego coś dla siebie. Ja nauczyłem się kilku skrótów klawiszowych w Eclipse, tworzenia templatów kodu, różnego podejścia do tego samego problemu (bardziej obiektowego i bardziej strukturalnego), paru fajnych bibliotek (Mockito, Hamcrest) i testowania w Androdzie (Dzięki Mariusz :)) Przy okazji pojawiły się namiary na pare fajnych książek:
Wzorce projektowe. Analiza kodu sposobem na ich poznanie.
Release It!: Design and Deploy Production-Ready Software (inne książki Michaela tównie godne polecenia)
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
Working Effectively with Legacy Code
Holub on Patterns: Learning Design Patterns by Looking at Code

Liste powyższą updatne przy okazji, gdy pojawią sie nowe namiary.

W międzyczasie połączyliśmy się z uczestnikami tego samego wydarzenia w Barcelonie i Krakowie.
Całość wspominam bardzo pozytywnie. Chętnie wezmę udział częściej w podobnych warsztatach. Nauka w praktyce - bezcenne. Za resztę zapłacisz kartą Master Card ;)

[youtube http://www.youtube.com/watch?v=FdMzngWchDk&w=420&h=315]

[youtube http://www.youtube.com/watch?v=0d6yIquOKQ0&w=420&h=315]


"...it's cats that are complicated"


Zdjęcia z wydarzenia dostępne na Picasa Gallery

poniedziałek, 28 listopada 2011

Grand Prix Łodzi 2012

Zimowy sezon biegowy zaczęty pierwszym z serii biegów Grand Prix Łodzi w Parku 3-go Maja.

Bieg odbywa się na trasie 5km wokół stadionu "Łodzianki".
Uczestnicy, którzy wezmą udział w 4-ch z 6-ciu biegów otrzymają pamiątkowe medale.

Terminy biegów:

27 listopada 2011
Dziś zakończyłem z wynikiem średnim, mogło być lepiej, czas 25 min.

Więcej można poczytać na portalu Moje Miasto Łódź oraz Biegam po Łodzi

Pare fotek tu.

15 stycznia 2012
W niedziele odbyl sie kolejny bieg, niestety z powodu wyjazdu w delegacje nie moglem uczestniczyc, szkoda, ale za to pobiegalem tam gdzie bylem :)

Fotki z lodzkiego biegu dostepne sa tutaj.



29 stycznia 2012

Hmm... troche zaspałem, zapomnialem dać przypominacz w kalendarzu. Teraz wzięcie udziału w każdym z następnych biegów to już jedyna szansa na pamiątkowy medal :(


19 lutego 2012


W zimową pluchę odbył się kolejny bieg połączony z konkursem karnawałowym na najlepsze przebranie. Niektórzy uczestnicy wykazali sie niesamowitą inwencją twórcza i poczuciem humoru. Można dziś było obejrzeć czarownice, księżniczki, również zaklęte w żabę, hirurgów, pływaków zaraz po wyjściu z basenu z ręcznikiem u pasa i okularami pływackimi na głowie, panów przebranych za kobitki z wałkami na głowie i suszarką w ręku, koty i inne zwierzaki. Sam wystąpiłem w tonacji hawajskiej z koszulą i spodniami w kwiaty, wiankiem z kwiatów na szyi i czapą rasta.
Z niecierpliwością oczekuję na zdjęcia z imprezy bo telefonem niewiele zrobiłem, ale można zobaczyć je tutaj.

Trasa biegu oblodzona, łatwo było się poślizgnąć, potłuc i wypaść z biegu. Widziałem, że niektórym się to przytrafiło. Cały czas padał deszcz. Poza tym niesamowita atmosfera. Można było napakować sie endorfinami po uszy. Dało mi to niezłego kopa na cały dzień, a tak nie chciało mi się zwlec rano z łózka.
Czasowo nienajgorzej, szczególnie że mało biegam w sezonie zimowym. Ostatni raz biegałem z 2 tyg. temu jakies 10km. Nieoficjalne wyniki pojawiły się tutaj, czyli u mnie czas 24min 41s.


Artukuły i zdjęcia z imprezy poniżej:
http://biegampolodzi.pl/
http://www.mmlodz.pl/
http://runningsucks.pl/
http://www.eldezet.pl/
http://biegampolodzi.pl/galeria/gp-lodzi-2012-iv-biegmarsz-cz-1-ines
http://biegampolodzi.pl/galeria/gp-lodzi-2012-iv-biegmarsz-cz-2-ines
http://biegampolodzi.pl/galeria/gp-lodzi-2012-iv-biegmarsz-cz-3-ines
http://biegampolodzi.pl/galeria/gp-lodzi-2012-iv-biegmarsz-cz-4-ines
http://biegampolodzi.pl/galeria/gp-lodzi-2012-iv-biegmarsz-cz-5-ines

11 marca 2012 



Kolejny, juz przedostatni bieg za nami. Pogoda sloneczna, troche wietrzna, ale za to trasa jedno wielkie bloto. Sam raz o maly wlos nie stracilem buta w soczystym bagnie. Kondycja niestety tym razem slabiutko, juz po 5km czulem wyrazne zmeczenie. Czas:  0:25:4. Wyniki tutaj.
To znak ze stosunek czasu spedzonego przed komputerem do czasu spedzonego aktywnie jest zbyt duzy. Pora wiziasc sie za siebie i wprowadzic troche rownowagi.



Artykuli i zdjecia ponizej:
http://biegampolodzi.pl/gp-lodzi/tomek-osmulski-z-nowym-rekordem-trasy


1 kwietnia 2012 (finał)


Ostatni bieg z cyklu juz za nami. To czwarty bieg, który brakował mi do zdobycia pamiątkowego medalu, więc szkoda byłoby zmarnować okazje. Na starcie pojawiłem się przeziębiony, co skutkowało słabszym niż zwykle wynikiem 0:27:26. Pozstałe wyniki można poczytać tutaj.


Pogoda zastała nas słoneczna, o dziwo, biorac pod uwagę, że pare minut wcześniej padał śnieg z deszczem. Niestety było dosyć chłodno i wietrznie, ale nie spodziewałem się niczego nadzwyczajnego po marcowo-kwietniowej aurze. Tym razem wystartowało stosunkowo mało osób, może dlatego że w Pabianicach odbywał się konkurenyjny bieg.

Finał biegu i rozdanie nagród  odbędzie się 13 maja w Wiączyniu Dolnym podczas „II Majowego Pikniku Sportowego”.

A oto i zdjęcia z tej edycji:
http://biegampolodzi.pl/galeria/gp-lodzi-2012-vi-biegmarsz-start-ines

13 maja 2012 (rozdanie nagród)


Rozdanie nagród już za nami. Piknikowi majowemu towarzyszyła chłodna pogoda z przelotną mżawką. na pikniku pojawiłem się tylko na rozdanie nagród, chociaż czasu wystarczyło by przejść się po miejscowej stajni (raczej stajniach, bo ośrodek w Wiączyniu Dolnym jest całkiem pokaźny).
W generalnej klasyfikacji zająłem miejsce 160 na 189 miejsc, ale każdy kto wystartował w 4  z 6 biegów otrzymał pamiątkowy medaj, również ja :) mała rzecz a cieszy. Jakby nie było to mój pierwszy medal za osiągnięcia sportowe.

Oto i mina zadowolonego sportowca:



Relacja i więcej zdjęć na stronie http://biegampolodzi.pl/gp-lodzi/gp-lodzi-2012-zdjecia-kalsyfikacja-koncowa

Klasyfikacja końcowa tutaj




wtorek, 22 listopada 2011

Maven na szybko

Szybki zbiór informacji pomocnych by szybko zacząć pracę z Mavenem.

Instalacja

1) Binarka dostępna na stronie Apache.
2) Jeśli korzystasz z Spring STS masz już Mavena w katalogu instalacyjnym Eclipse'a.

Konfiguracja

1) Dodaj 'bin' Maven'a do PATH w systemie operacyjnym i dojdaj zmienna systemowa MAVEN_HOME

n.p.:
Ubuntu: wpisz w linii komend
sudo vi ~/.bashrc
dodaj na końcu pliku wpis:
export MAVEN_HOME=/home/jlong/bin/springsource/maven-2.2.1.RELEASE
export PATH=$PATH:$MAVEN_HOME/bin


Zatwierdź zmiany: ESC i wpisz: !wq wciśnij ENTER

Windows 7: w Menu start wpisz 'edit system environment variables'


Następnie przycisk Environment Variables i dopisz w zmiennej Path jak na obrazie poniżej



W ten sam sposób musisz mieć ustawioną zmienna JAVA_HOME wskazująca na katalog instalacji JDK, n.p.: W:\tools\java\jdk1.7.0_01
Potem dodaj nowa zmienną systemową MAVEN_HOME przyciskiem 'New...' w sekcji 'System variables'


Sprawdź instalację wpisując w linii komend:
mvn -version

To powinno zwrócić cos w podobie:
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
Maven home: W:\tools\apache-maven-3.0.3\bin\..
Java version: 1.7.0_01, vendor: Oracle Corporation
Java home: W:\tools\java\jdk1.7.0_01\jre
Default locale: en_US, platform encoding: Cp1250
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"


Maven tworzy lokalnie na dysku repozytorium bibliotek potrzebnych do pracy.
Domyślnie jest ono składowane w folderze:
/.m2/repository.

Np. pod Windows C:\Documents and Settings\{user}\.m2\repository

repozytorium może zajmować dużo przestrzeni dyskowej i czasem porządana jest zmiana jego lokalizacji. Można to zrobić w pliku konfiguracyjny Mavena w jego katalogu domowym:
MAVEN_HOME/conf/settings.xml

Należy wpisać:

<localRepository>W:/dev/maven_repo</localRepository>

gdzie podajemy nową lokalizację.

Użycie

Standardowa struktura projektu mvn wygląda tak:
./pom.xml
./src
./src/main
./src/main/java
./src/main/resources
./src/test
./src/test/java
./src/test/resources


POM - Project Object Model, opisuje projekt, zależności, biblioteki używane.























FolderWyjaśnienie
src/main/javakod Java projektu
src/main/resourcespliki konfiguracyjne dla klas Java, np. Spring context .xml
src/test/javakod Java dla testów (np.: JUnit), ten folder nie będzie dołączony w buildzie projektu, jeśli testy nie przejdą build nie będzie zakończony
src/test/resourcespliki konfiguracyjne dla klas testowych

Użycie z linii komend:

Stwórz prosty projekt, z linii komend Linux:

mkdir spring-example1;
cd spring-example1;
mkdir -p src/{test,main}/{java,resources}


Stwórz plik pom.xml






<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.maven</groupId>
<artifactId>spring-example1</artifactId>
<version>1.0-SNAPSHOT</version><name>Simple Project</name></project>

Simple Project

Wejdź z linii komend do folderu głównego projektu, gdize umieściłeś plik pom.xml i wpisz polecenie:

mvn install

Fazy Maven'a:







































FazaWyjaśnienie
validatevaliduje strukture projektu
compilekompiluje kod źródłowy
testuruchamia testy
packagetworzy artifact w katalogu określonym jako 'target'
integration-testdeploy artifaktu w środowisku integracyjnym
integration-testuruchamia walidacje paczki
installinstaluje paczke w lokalnym repozytorium
deploykopiuje artifact na serwer

Build Mavena działa wg. w/w faz. Jego wynikiem jest powstanie paczki/artifactu.
Typ artifactu można zmienić przez tag <packaging> (jar, war, ear).

Aby poinstruować Mavena, żeby wyczyścił wszystko co zainstalował w lokalnym repozytorium i jeszcze raz zbudował artifact w folderze 'target' używamy komendy:

mvn clean install

Identyfikacja artifaktów:



















TagWyjaśnienie
groupIdmoże być to cokolwiek, zwykle jest to nazwa pakietu
artifactIdnazwa artifaktu w ramach tego samego goupId (groupId może być takie samo dla kilku artifaktów które razem tworza jeden system)
Versionversja artifaktu: numer lub SNAPSHOT, np 1.0-SNAPSHOT, rozumiany jest jako "ostatni build wersji 1.0"

Zależności w projekcie dodaje się w tagu <dependencies>








<?xml version="1.0" encoding="UTF-8"?>


  <modelVersion>4.0.0</modelVersion>

  <groupId>org.springsource.greenbeans.maven</groupId>

  <artifactId>example2</artifactId>

  <version>1.0-SNAPSHOT</version>

  <name>Our Simple Project</name>

  <dependencies>

       <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

            <version>3.0.5.RELEASE</version>

       </dependency>

  </dependencies>

</project>


Defaultowe ustawienia Mavena modyfikuje sie w tagu <plugins>:

np. aby zmienić wersje kompilatora Java








<?xml version="1.0" encoding="UTF-8"?>


  <modelVersion>4.0.0</modelVersion>

  <groupId>org.springsource.greenbeans.maven</groupId>

  <artifactId>example2</artifactId>

  <version>1.0-SNAPSHOT</version>

  <name>Our Simple Project</name>

  <dependencies>

       <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

            <version>3.0.5.RELEASE</version>

       </dependency>

  </dependencies>

  <build>

    <plugins>

      <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>2.3.2</version>

        <configuration>

          <source>1.5</source>

          <target>1.5</target>

        </configuration>

      </plugin>

    </plugins>

  </build>

</project>


Pluginy same w sobie często zawieraja zestaw komend które moga być używane niezależnie od projektu i bez budowania projektu. Składnia jest nastepująca:

Plugins usually provide several specific commands that they provide. To invoke a plugin, you use the following form:
mvn [plugin-name]:[command-name]
np. dependency plugin może wypisać drzewo pokazujące zależności w prjekcie. Uzyj komendy:
mvn dependency:tree
Aby skopiować wszystkie zależności potrzebne w projekcie do jednego folderu w target/dependencies użyj komendy:
mvn dependency:copy-dependencies

Użycie z Spring STS:

Zaimportuj stworzony wyżej projekt w Spring STS:

File > Import..



Naspępnie znajdź folder domowy z plikiem pom.xml i Finish


* Jeśli używasz Javy 7 do uruchamienia Spring STS możliwe, że otrzymasz błąd opisany tutaj. Opisany sposób naprawy pomógł. Dodaj wspomniany parametr ("-Djava.util.Arrays.useLegacyMergeSort=true") w pliku STS.ini w folderze sts-x.x.x.RELEASE w zależności od swojej wersji Spring STS (np. sts-2.7.2.RELEASE)

Project Javowy

1. maven-compiler-plugin - kompilowanie Javy

konfiguracja:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable>${JAVA_1_4_HOME}/bin/javac</executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
</build>
...
</project>

użycie:

mvn compile

lub żeby skombilować testy:

mvn test-compile

2. exec-maven-plugin - uruchamianie klas Javy

konfiguracja:


<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.example.App</mainClass>
<arguments>
<argument>arg0</argument>
<argument>arg1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

użycie:

dla fazy nazwanej jak wyżej 'test' uruchamiamy klasę  com.example.App poleceniem:

mvn test

Tutaj inne zaawansowane przykłady

Zależności w projektach Maven

Jak stworzyć moduł Maven o groupId=example.group zawierający 2 podrzędne moduły o nazwach example.module1 i example.module2 należące do grupy example.group ?
Oto kroki:

1. mvn archetype:create -DgroupId=example.group -DartifactId=example.group.core

2. cd example.group.core

w stworzonym pliku pom.xml zmieniamy typ paczki na


<packaging>pom</packaging>


usuwamy folder src

3. cd example.group.core
4.
mvn archetype:create -DgroupId=example.group -DartifactId=example.module1
mvn archetype:create -DgroupId=example.group -DartifactId=example.module2

5.

Nowe moduły dodajemy do głównego pom.xml w folderze 'example.group.core'


<modules>
<module>example.module1</module>
<module>example.module2</module>
</modules>


W plikach pom.xml w podmodułach example.module1 i example.module2 dodajemy odniesienie do głównego modułu:


<parent>
<groupId>example.group</groupId>
<artifactId>example.group.core</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>


Tak stworzoną strukturę możemy zaimportować jako projekt Maven w Eclipse (jeśli zainstalowaliśmy plugin Mavena)
Możemy też z lini komend zbudować projekt i wygenerować pliki konfiguracyjne Eclipse:

mvn install
mvn eclipse:eclipse

niedziela, 20 listopada 2011

Nepal – Manaslu trecking 2011 cd. - droga do Katmandu

Londyn 15:00 07.10.2011
Przejażdzka autobusem z jednego terminala na drugi zajęła jakies 10-15 min. Pierwsza myśl jaka uderzyła mi do głowy to "dlaczego jedziemy lewą strona drogi". Po chwili: "no tak.. przecież to Anglia".
Za jakiś czas kierowca przez radio zaczyna rozmowę z drugim kierowcą. Ku mojemu zaskoczeniu rozmawiają w dobrze mi znajomym języku - po polsku. Przychodzi mi na myśl, czy to jeszcze Anglia czy już Polska. Jakie jest prawdopodobieństwo spotkania rodaka będąc 10 min. w obcym kraju? Okazuje się, że w Anglii jest duże.
Poczułem się na prawdę jak w domu.
Jeszcze tylko 7 godzin i zapakuję się do samolotu do Delhi.
Nadal niemiłosiernie męczy mnie kaszel - resztki a może dopiero rozwój wirusa jaki złapałem 3 tyg. przed wylotem.
Mam nadzieję, że nepalskie powietrze mnie uleczy. Inaczej słabo to widzę.

Delhi 11:00 08.10.2011
Wylądowaliśmy ok. 10:45 lokalnego czasu (czyli GMT +5:30 godz.). Potem prawie godzina czekania w kolejce do odprawy paszportowej w czasie której każdy zostaje wnikliwie prześwietlony i wymacany i wreszczie troche spokoju. Co ciekawe nie stanowiło problemu żebym przemycił przez bramkę butelkę wody mineralnej. Postawiłem ją grzecznie na stoliku obok pana, który mnie wymacał a potem kazał tylko napić się wody z butelki co miało zagwarantować że nie jest to żadna niebezpieczna sybstancja, co tez uczynnie zrobiłem. [1]
Boarding do Katmandu zaczyna się o 12:25, start 13:25.
W samolocie linii KingFisher z Londynu do Delhi siedział obok mnie młody człowiek z Indii. Myślę, że w moim wieku albo troche starszy. Aktualnie pracuje i mieszka w Londynie. Leciał odwiedzic rodzine w Indiach.
Nawiązała się nam miła rozmowa o systemie kastowym. 80% społeczeństwa w Indiach to biedota. Pary sa w tym środowisku kojarzone przez rodziców. W pozostałych 20% panuje większe rozluźnienie i partnerzy mogą dobierać sie sami (za aprobatą rodziców rzecz jasna). Widziałem w gazecie lokalnej dział matrymonialny, gdzie w sekcjach podzielonych względem kast, osoby w detalach opisują wymagania co do drugiej połówki. Ogloszenia brzmią zabawnie, ale takie panują tu realia.[2]



Mój sąsiad z fotela obog śmiał sie ze mnie, że wczuwam się w lokalne klimaty. Pierwszy raz, gdy zapuściłem sobie jakąś pasjonującą produkcję Bollywood - 7 Khoon Maaf (swoją drogą nawet nie była taka zła, dość zabawna i bez nadmiaru melodramatyczno-musicalowych wstawek), drugi raz, gdy mając do wyboru na obiad europejski albo indyjski zestaw wybrałem ten drugi (pikantne jak cholera ale smaczne).

Pierwsza rzecz jaka uderzyła mnie po lądowaniu w Delhi to wielka wilgotność i gorąc jaki tu panuje. Myślę, że w takich warunkach mój suchy kaszel powinien szybko minąć.
Kolejna rzecz to dywany. Cała podłoga na lotnisku jest nimi usłana. Nie mam pojęcia jak udaje im sie tutaj utrzymać je w czystości, ale wygląda to nad wyraz przytulnie - nie to co kamienne posadzki na innych lotniskach.








Ciekawie też wyglądaja wejścia do toalet. Zastanawiałem się czy wizerunek kobiety ma mnie zachęcać do wejscia po lewej stronie czy jednak toaletę dla panów zdobi fototapeta mężczyzny?







Trzeba tez przyznać, że stewardessy linii indyjskich są bardzo urodziwe.








Kathmandu 15:25 08.10.2011

Do tej pory oglądałem w internecie filmy z lądowania na tamtejszym lotnisku. Teraz mogłem zobaczyc na własne oczy jak niewielkie jest w rzeczywistości. Po wyjśćiu z samolotu by przejść do autobusu, który miał nas zabrać na terminal zobaczyłem otaczające nas wysokie ośnieżone szczyty z każdej strony. Niesamowite uczucie, budzące respekt przed siłą natury wobec małości człowieka, nawet bogatego w zdobycze najnowszych technologii.

Na terminalu dla przylatujących należało ustawić sie w długiej kolejce do odprawy paszportowej. Przed odprawą należało wypełnić wniosek o wizę.



Formularz miałem już wcześniej więc wypełniłem go sobie na spokojnie w domu. Pozostało tylko czekać ok 30 min w wolno posuwającej się kolejce (jednej z trzech). Wizę wyrabia się na miejscu płacąc w dolarach, euro lub lokalnej walucie (rupiach). Wiza 30 dniowa kosztowała 62 euro.

Po odprawie odnalazłem swój bagaż i zszedłem do wyjścia z lotniska. Wtedy też przeżyłem pierwszy szok. U wyjścia z terminala ustawił się przy barierce ciąg taksiarzy, którzy jeden przez drugiego próbowali mnie zwerbować do swojego przedpotopowego małego samochodziku. Wyjaśniłem zatem, że czekam jeszcze na towarzyszy wyprawy, którzy przylecą lotem z Kataru. Zaskoczyła mnie ich doskonała orientacja w rozkładzie przylotów. Z miejsca wiedzieli kiedy przylecą. Usiadłem na swoim worku podróżnym przy wyjśćiu z lotniska. Za chwilę przyszedł żołnierz zatroskany moją osobą. Kolejny raz musiałem wyjasniać, że wszystko jest OK, tylko czekam na towarzyszy. Na szczescie wszystko można było dogadać w jęz. angielskim. Należy dodać, że wyjścia z lotniska strzegą żołnierze (wtedy było ich 2-ch) uzbrojeni w karabiny maszynowe. Poczułem, że jestem w na prawdę bezpiecznym miejscu. Każdy wchodzący do terminala przylotów musi przejść przez bramkę, jest przeszukiwany i musi wyjaśnić po co sie tam wybiera.[3]

Kathmandu terminal przylotów


Ok. godz. 16:30 przybyli Francuzi - moi towarzysze i przyjechał po nas człowiek z Base Camp Trek, firmy, ktora organizowała nasz wyjazd. Zabrał nas wanem do Hotelu Manaslu - całkiem przyjemnego miejsca z ogrodem i basenem. Standard pokoi przerósł moje oczekiwania: cieply prysznic, biała pościel, eleganckie wnętrza - miłe zaskoczenie :) [4]

Po drodze z lotniska do hotelu przeżyłem drugi szok. Ruch na ulicach niemożliwy do zrozumienia dla Europejczyka. Jedna sprawa że jest lewostronny, inna że każdy jeździ jak chce. Nie ma wyznaczonych pasów ruchu więc jest ich nieskończona liczba - każdy jedzie swoim pasem. Klakson używany zamiast świateł mijania obwieszcza wszem i wobec "to jade ja, zejdź mi z drogi", wygrywa silniejszy i z lepszą trombką.
Wśród rozklekotanych aut z poprzedniego wieku kręci sie mnóstwo motorów i skuterków (brak obowiązku noszenia kasków), rikszy, dziwnych dwukołowych wózków z owocami, rowerów z koszami z owocami, bezpańskich psów, krów, czasem kóz oraz pieszych. W większości brak chodników więc wszyscy maszerują poboczem. Czasem spotyka sie wydzieloną ścieżkę dla pieszych, którą od jezdni oddziela głęboki rynsztok (wpadnięcie kołem auta w taki rynsztok groziloby wymianą ośki). Ponadto chmury kurzu sprawiające, że oddycha się ciężko, przez co też mój kaszel chce mnie wykończyć.
Ulice Kathmandu


Wieczorem wybieramy się do turystycznej dzielnicy Kathmandu - tzw. Tamel nieopodal hotelu, żey coś zjeść. Znajdujemy bardzo fajną księgarnio-czytelnio-restaurację Pilgrims Feed 'N' Read .

Pilgrims Feed 'N' Read Menu


do lokalu można przyjść, zamówić coś do jedzenia na tyłach księgarni, wziąć jakąś książkę, usiąść i poczytać. Fajny pomysł. Nie spotkałem sie w Polsce z czyms takim (chociaż Pub Biblioteka w Łodzi, gdyby dolożyć szerszy wybór jedzenia i księgarnię...).

Moje pierwsze danie nepalskie - Nepali Delicous Thali
Nepali Delicious Thali


Dla koneserów pizzy też coś było ;)
Pizza Menu


i wreszcie driny, ceny takie sobie jak na polską kieszeń, gdy przelicznik 1euro = 100rupi

Drinks Menu


[1] Blog ten piszę już po powrocie z wyprawy, dlatego mogę sobie pozwolić o dodatkowe wyjaśnienia do opisu. Jak się potem okazało podobnie działają bramki w Kathmandu, można na pokład wnieść swoją wodę, jeśli się uprzednio napije z butelki przy strażniku.

[2] Przykładowe ogłoszenie matrymonialne znalazlem na stronie. Żeby było jeszcze ciekawiej zostało zamieszczone przez rodziców panny na wydaniu.

[3] Z terminalem odlotów jest nieco inaczej, o czym przekonałem się ostatniego dnia swojego pobytu. Panuje tam niesamowity chaos, przed wejściem kręci się dużo chętnych do pomocy np. przy dźwiganiu toreb, żeby wyłudzić pare groszy. Jednak, żeby wejść do terminala odlotów trzeba prześwietlić wszystkie swoje bagaże. Co prawda nie jest to zbyt wnikliwe i nikt nie musi otwierać toreb by pokazać ich zawartość, wiec nie wiem po co ten cały zachód. Pewnie, żeby stworzyć dodatkowe miejsca pracy.

[4] Śniadanie było wliczone w zakwaterowanie, szwedzki stół więc szamałem do oporu (ku zaskoczeniu Francuzów, którzy jedli jak pchełki i wielokronie potem w czasie treckingu wypominali mi że ponadprzeciętnie dużo jem, nie wiem czy powinienem poczuć się z tego tytułu wyróżniony czy opłakiwać przemianę materii jaką obdarzyła mnie Matka Natura).

sobota, 12 listopada 2011

Nepal – Manaslu trecking 2011 cd. - rzeczy na wyjazd

W czwartek 3-go listopada wróciłem z największej podróży swojego życia (mam nadzieje nie ostatniej takiej). Droga powrotna niestety się wydłużyła - po pierwsze z powodu wypadku na lotnisku w Warszawie, na którym 2 dni wcześniej lądował Boeing bez podwozia, po drugie dlatego, że nad większościa lotnisk w kraju zapadła mgła.
W rezultacie planowana podróż: Katmandu -> Delhi -> Bruksela -> Warszawa zmieniła się w:
Katmandu -> Delhi -> Frankfurt -> Katowice -> Kraków
Początkowo samolot miał lądować w Krakowie, niestety skierował sie do Katowic z powodu mgly. Z Katowic autobus zawiózł nas na lotnisko w Krakowie (trasa 1.5h) a potem we własnym sakresie musielismy znaleść sobie transport do centrum ( na szczęście działała komunikacja miejska, ale droga zajęła kolejne 40 min.).

Przed wylotem do Katmandu za bardzo nie miałem czasy, żeby napisać o przygotowaniach i rzeczach, które tam zabrałem a które w moim mniemaniu mogły uratowac mi życie.
Oto i lista:
1. Buty wysokie Chiruca
2. Buty lekkie Berghaus


Głównie szedłem w niskich butach, ponieważ przez większą część drogi było ciepło. Wysokie buty założyłem dopiero, gdy pojawił sie śnieg i zdjąłem gdy zniknął. Buty Berghaus sa bardzo fajne i dobrze trzymają sie powierzchni suchych i błotnistych ale na mokrych kamieniach są bez szans. Ślizgałem się w nich jak na lodzie, jednak mają tą główną zaletę, że bardzo szybko schną i są lekkie. Polecam. Byłem z nich zadowolony.

3. Bukłak na wode 3 litry Deuter

Używałem non-stop. Bardzo przydatna rzecz.

4. Scyzoryk Walther

Pare razy przydał się do cięcia a i ukryte w nim szczypce były użyteczne do ściskania zamka błyskawicznego, który jednej osobie odmówił posłuszeństwa.

5. Worek na rzeczy

Wytrzymałościowo zdał egzamin, niestety zamykanie nie do końca zostało przemyślane. Po zwinięciu i zapięciu na klips niejednokrotnie wlot do worka się otwierał co groziło pogubieniem zawartości. Musiałem dodatkowo go zakleić power tapem. Jest on przydatny zwłaszcza gdy na miejscu w Nepalu będą targać nasze rzeczy porterzy. W przeciwnym wypadku, gdybyśmy mieli go targać sami, a na plecach mieć plecak, życzę powodzenia.

6. Power tape

Nad wyraz przydatny do zaklejania różnych rzeczy: toreb foliowych, worka itp. Niestety w drodze powrotnej straciłem taśmę na lotnisku. Okazuje się że takich rzeczy nie wolno przewozic w bagażu podręcznym (jakoś w tamtą stronę nikt na to nie zwrócił uwagi).

7. Kosmetyki: balsam do opalania faktor 60, krem, zasypka Alantan, Sudocrem, chusteczki dla niemowląt nawilżone


Z tego wszystkiego najbardziej przydały się chusteczki do mycia, gdy nie było dostępu do wody lub była zbyt zimna by ja dotknąć :) oraz krem i balsam do opalania. Słońce w górach potrafi być na prawdę mocne o czym przekonałem się gdy spaliło mi twarz i usta przy przechodzeniu przez Larkya Pass. Sudocremu i zayspki Alantan w ogole nie używałem. Nie miałem żadnych otarć.

8. Spray na insekty

Nie używałem ani razu. Ani komarów ani innych owadów nie było tyle by się nimi zacząć przejmować.

9. Środek uzdatniający wodę Micropur

Nieodzowny. Na szlaku stosowany codziennie. Z resztą nawet ulotki informacyjne dla turystów zalecają by w myśl idei poszanowania naturalnego środowiska nie kupować butelek z wodą mineralną tylko korzystać z wody z górskich potoków, co też czyniłem z dodatkiem Micropur. Smak wody pozostawiał dużo do życzenia. Nie sprawdziłem, czy to kwestia Micropur, bidonu Deuter czy samej wody. Podejrzewam, że wszystkiego po trosze.

10. Żel do mycia rąk gdy nie ma wody

Nie stosowałem bo zawsze była sposobność umycia rąk wodą i mydłem. Zbędne dodatkowe gramy do dzwigania, ale być może w innych okolicznościach zdałby egzamin. My natomiast szliśmy ciągle wzdłuż rzeki i z wodą nie było problemu.

11. Plecak 40l Alpinus Samum

Bardzo fajny i wygodny plecaczek. To niego niosłem codziennie. Dostosowany do bukłaków (system H2O). Posiada przydatne paski do przywiązywania mokrych ubrań. Teraz już nie jest tak czysty jak na zdjęciu :)

12. Śpiwór Husky Annapurna

Czeska produkcja. Ani razu nie było mi w nim zimno. Ba, pare razy nawet się spociłem. Temperatury maksymalne myślę, że mogły sięgnąć jakichś -5 stopni co przy komforcie śpiwora do -19 jest niczym.

13. Rękawice, czapka letnia Mammut, czapka zimowa, szalik

Wszystkie rzeczy bardzo przydatne.

14. Latarka czołówka

Mam firmy Petzl i naprawde dobrze sie spisuje, nie wymienialem jeszcze baterii a sporo z niej korzystałęm, bardzo ekonomiczna i posiada różne tryby oświetlenia: bardzo jasne, jasne, mrygające, czerwone - przydatne gdy nie chcemy zbudzić w nocy kolegi z namiotu :)

15. Ładowarka słoneczna do baterii i telefonu



Niestety nie sprawiła się. Nie udało jej się naładować baterii. Dałem za wygraną. Na szczęście miałem tyle dodatkowych akumulatorków, że wystarczyło bez problemu do końca wyjazdu (jednego nawet nei ruszyłem wcale).

16. Ręcznik
Najlepiej taki szybkoschnący z Mikrofibry - zajmuje mało miejsca a b. dobrze wchłania wilgoć.

17. Ubrania:
Kurtki:
Cienka nieprzemakalna kurtka - windstoper
Cieplejsza nieprzemakalna kurtka wysoko w gorach
Pod kurtke:
Polar, bluzy termiczne
Spodnie 2 pary:
Lekkie, szybkoschnące (Quechua robi fajne z odsuwanymi nogawkami - 2 w jednym długie i krótke spodenki)
Nieprzemakalne
Skarpety

Nie wspomnę o rzeczach oczywistych, które należy zabrać jak koszulki termiczne (ja miałem 3 z krótkim i 1 z długim rękawem), getry (miałem jedną parę, porem żałowałem że tylko jedną, bo powyżej 3000m n.p.m nieźle ciągnęło po łydach ), bielizna termiczna (wedle uznania i miejsca w plecaku, na miejscu i tak prawie codziennie się pierze a w południowych promieniach słonecznych wszystko schnie aż syczy)

18. 3m linki do rozwieszania prania

19. Mydło, szczotka i pasta do zębów

20. Papier toaletowy, zapalniczka

21. Klapki, japonki, sandały np. takie stylowe ;)

Przydają się wieczorem w obozie żeby dac odetchnąć stopom (co nierzadko oznacza wstrzymanie oddechu przez współtowarzyszy) i pod prysznicem (tudzież w rzece).

22. Apteczka
a w niej coś na zatrucia/biegunki (Nifuroksazyd), na przeziębienie (Fervex, Polpiryna, Strepsils, jakis antybiotyk w razie czego), woda utleniona i środek z antybiotykiem w sprayu (np.Detromycyna), kompresy i plastry, bandaż elastyczny, wata, nożyczki (małe do paznokci)

Poniżej zdjęcie z jeszcze innymi drobiazgami, które okazały się bardzo użyteczne ;)



Warto też zabrąć ze sobą aparat fotograficzny z ładowarką i kilka dodatkowych akumulatorków ( w sumie miałem 3) oraz karty pamięci (niestety miałem jedną a 3 pozostałe po 4G zostały zapomniane w domu)

Sporo ciekawych rzeczy na wyjazd można kupić w internetowym sklepie http://sherpa.pl/

Hello Spring na Micro Cloud Foundry

Oryginalny post który zainspirował mnie do spróbowania tego samemu można znaleść tutaj.

W poprzednim poście pokazałem jak skonfigurować Micro Cloud Foundry na systemie Ubuntu 11.10

Teraz uruchomimy na nim prostą aplikację Spring.

Najpierw ściągniemy ja z github.com
Do tego celu potrzebujemy zainstalowac Git:
sudo apt-get install git

Możemy też skorzystać z pluginu EGit w Eclipse. Ten defaultowo zainstalowany z Spring STS niestety wywalał u mnie błąd opisany tu. Dopiero zaciągnięcie EGita z http://download.eclipse.org/egit/updates-nightly dało efekt poprawnej pracy.

Ściągamy projekt w Eclipse:
File > Import i wybieramy Git > Projects from Git, następnie podajemy adres repozytorium: https://github.com/SpringSource/cloudfoundry-samples.git i wciskamy przycisk Clone.


Dalej Next aź do końca. Gdy repozytorium zostanie ściągnięte wychodzimy z wizarda, następnie wybieramy w menu File > Import
Maven > Existing Maven Projects
i nawigujemy do folderu hello-spring w ściągniętym z github repozytorium.


Wyczerpujący opis tego jak projekt został zbudowany znajduje się na oryginalnym blogu. Ograniczę sie tu do skompilowania i zdeployowania aplikacji na Micro Cloud Foundry.

1. Przeciągamy w Eclipse projekt z okna Package Explorer na znajdujący sie w oknie Servers server "VMWare Cloud Foundry". Nie musimy nawet go wcześniej budować Mavenem.



W tym momencie aplikacja zostanie zdeployowana ale na konsoli pojawią sie błędy wynikające z braku skonfigurowanych dla niej serwisów, np bazy danych.

2. Klikamy prawym na serwerze i wybieramy Open. Otworzy sie panel sterowania:


Na zakładce Applications dodamy serwisy dla naszej aplikacji.

3. W sekcji Services klikamy w prawym górnym rogu na ikonę 'Add Service' i w nowym oknie wybieramy 'MySQL database service' i nazywamy go "hello-mysq". Klikamy 'Finish'.


Analogicznie dodajemy servisy
'hello-mongo' typu 'MongoDB NoSQL Store'
'hello-rabbit' typu 'RabbitMQ messaging service' i
'hello-redis' typu 'Redis key-value store service'.

4. Teraz możemy kliknąć na naszą aplikację w sekcji 'List of currently deployed applications.' następnie z sekcji 'Services' przeciągnąć 'hello-mysql' do sekcji 'Application Services' po prawo.



Uruchamiamy aplikację, obserwujemy że na konsoli nie ma już żadnych błędów. Wynik działania aplikacji można zobaczyć na lokalnie na stronie:
http://hello-spring.piczkowski.cloudfoundry.me/



Prosto i przyjemnie.

Cloud Foundry lokalnie

Jakiś czas temu zacząłem serie blogów o Grails i CloudFoundry.
Wracając do tematu postanowiłem spróbować dostępnego VMWare obrazu z CloudFoundry.
Natrafiłem na blog i postanowiłem sprawdzić opisane tam kroki.
W poprzednich postach opisałem jak skonfigurować środowisko Eclipse z STS i jak dodać konfigurację CloudFoundry na zewnętrznym serwerze (w chmurze).
Tutaj zrobimy z grubsza to samo, tyle że połączymy się z VMWarem.

Najpierw należy ściągnąć VMware (tzw. Micro CloudFoundry) ze strony http://blog.cloudfoundry.com/micro
Przed rozpoczęciem pobierania musimy wybrać nazwę domeny dla naszej instancji na podstawie której zostanie wygenerowany token. Na jego bazie skonfigurujemy ściągniety VMWare.

W momencie pisania tego posta VMWare jest dostępny w wersji 1.1.

Po ściągnięciu i rozpakowaniu obrazu odpaliłem go w VMWare Playerze i postępowałem zgodnie z instrukcją, niestety po podaniu tokena otrzymałem niemiły komunikat:

Unable to contact Cloudfoundry.com to redeem configuration token

Okazuje się że do autentykacji obraz potrzebuje nie tylko dostępu do internetu ale musi też być widoczny w sieci. Zabiegi takie jak przestawienie w VMWare Playerze konfigutacji sieciowej z BRIDGE na NAT, jak to podano tutaj, nie przyniosło rezultatu.

Potem wpadłem na pomysł, że mój komputer stoi za routerem więc wystarczy w nim przekierować port 80 na IP mojego komputera, czyli kolejno:
1. W konsoli Ubuntu: sudo ifconfig
Otrzymujemy IP 192.168.1.103

2. W konfiguracji routera linksys rejestrujemy się do konsoli admina na adresie https://192.168.1.1 i tam ustawiamy:


Jeśli mamy postawiony lokalnie działającego Apache to możemy sprawdzić czy nasz komputer jest widoczny w sieci wpisując w przeglądarce IP z konfiguracji:


czyli: http://83.27.89.77/

Jeśli nie mamy Apache to możemy go szybko zainstalować:
sudo apt-get install apache2

Warto przeedytować stronę główną by mieć pewność że to nasz serwer:
sudo vi /var/www/index.html

a następnie uruchomić:
sudo /etc/init.d/apache2 start

Gdy nasz koputer jest widoczny w sieci restartujemy VMWare Player i zaczynamy od nowa procedure konfiguracji. Tym razem kończy sie pomyślnie:



Z końcowego okna ważny jest nasz adres podany w "Identity". W tym przypadku piczkowski.cloudfoundry.me

Zgodnie z opisem dostajemy się do instancji Micro Cloud Foundry używając narzędzie vmc. Najpier należy je zainstalować na Ubuntu poleceniem:
sudo apt-get install ruby-vmc

Teraz już możemy wykonać rejestrację w Micro Cloud Foundry z konsoli Ubuntu:



Jako hasło podajemy cokolwiek (np. testtest). Potem wykorzystamy je konfigurując Eclipse Cloud Foundry plugin, tak samo jak robiliśmy to by dostać się do Cloud Foundry w chmurze w poprzednim poście.

To by było na tyle, teraz można już napisać prostą aplikację i zdeployować na lokalnym Cloud Foundry. Jest to o tyle fajne że mamy tam szereg rzeczy, których nie musimy instalować od zera, m.in.:MongoDB, Redis, MySQL.