piątek, 25 kwietnia 2008

Organizacja repozytorium

Dzisiejszym zadaniem jest zorganizowanie struktury repozytorium pod główny projekt w repozytorium subversion. Podstawowe informacje jak uruchomić svn można przeczytać w wpisie Mariusza Lipińskiego. Dobra a teraz do dzieła tworzymy trzy główne katalogi:
- trunk
- branches
- tags
W trunk trzymamy główną część projektu (najbardziej rozwojowa gałąź), branches przeznaczamy na poprawianie błędów i na eksperymentowanie developerów, jako ostatni został nam katalog tags gdzie zamrażamy konkretne wydania naszego projektu, jakieś ważne wydarzenie z cyklu życia naszego projektu (z reguły koresponduje on do konkretnego podkatalogu branches). Dobrze jest zrobić katalog tags jak katalog tylko do odczytu. Hmm chyba wszystko na początek jakieś uwagi?

poniedziałek, 7 kwietnia 2008

Eclipse Mule IDE

Dodajemy teraz możliwość tworzenia Mule projektów w Eclipse postępujemy z godnie z instrukcja Mule IDE 2.0 Pre-release User Guide Instalujemy niezbędne komponenty do Eclipse 3.3
No i na koniec sama wtyczka z Mule IDE. Dodajemy nowe URL do Software Updates http://dist.muleforge.org/mule-ide/updates-2.0.0/ . Restartujemy Eclipse i tworzymy nowy Mule Project.
Potem musimy jeszcze skonfigurować domyślne ustawienia dla Mule.
Teraz jeszcze tworzymy plik konfiguracyjny za pomocą IDE
Nasz Eclipse IDE zostało przystosowane do pracy z Mule:) W następnym wpisie stworzymy najprostszy działający projekt z użyciem Mule, FTP i mavena.

Apache ActiveMQ instalacja

Instalacja ApacheMQ tak zwanego Message Broker sprowadza się do ściągnięcia źródeł i ich rozpakowania, korzystamy z ActiveMQ 5.0.0 Release. Uruchomianie samego serwisu bez jakiej kol wiek konfiguracji z naszej strony, sprowadza się do przejścia do rozpakowanego katalogu, później podkatalog bin i uruchomienie skryptu uruchamiającego.
lukasz-lipkas-computer:~/Library/apache-activemq-5.0.0/bin lipka$ ./activemq
Na kosoli po chwili można zobaczyć następujące logi:
Loading message broker from: xbean:activemq.xml
INFO BrokerService - Using Persistence Adapter: AMQPersistenceAdapter(/Users/lipka/Library/apache-activemq-5.0.0/data/localhost)
INFO BrokerService - ActiveMQ 5.0.0 JMS Message Broker (localhost) is starting
INFO BrokerService - For help or more information please see: http://activemq.apache.org/
INFO AMQPersistenceAdapter - AMQStore starting using directory: /Users/lipka/Library/apache-activemq-5.0.0/data/localhost
INFO KahaStore - Kaha Store using data directory /Users/lipka/Library/apache-activemq-5.0.0/data/localhost/kr-store/state
INFO ManagementContext - JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
INFO AMQPersistenceAdapter - Active data files: []
INFO KahaStore - Kaha Store using data directory /Users/lipka/Library/apache-activemq-5.0.0/data/localhost/kr-store/data
INFO TransportServerThreadSupport - Listening for connections at: tcp://lukasz-lipkas-computer.local:61616
INFO TransportConnector - Connector openwire Started
INFO TransportServerThreadSupport - Listening for connections at: ssl://lukasz-lipkas-computer.local:61617
INFO TransportConnector - Connector ssl Started
INFO TransportServerThreadSupport - Listening for connections at: stomp://lukasz-lipkas-computer.local:61613
INFO TransportConnector - Connector stomp Started
INFO TransportServerThreadSupport - Listening for connections at: xmpp://lukasz-lipkas-computer.local:61222
INFO TransportConnector - Connector xmpp Started
INFO NetworkConnector - Network Connector org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent@28bdf4 Started
INFO BrokerService - ActiveMQ JMS Message Broker (localhost, ID:lukasz-lipkas-computer.local-50886-1207581085279-0:0) started
INFO TransportConnector - Connector vm://localhost Started
INFO log - Logging to org.slf4j.impl.JCLLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
INFO log - jetty-6.1.4
INFO WebConsoleStarter - ActiveMQ WebConsole initialized.
INFO /admin - Initializing Spring FrameworkServlet 'dispatcher'
INFO log - ActiveMQ Console at http://0.0.0.0:8161/admin
INFO log - ActiveMQ Web Demos at http://0.0.0.0:8161/demo
INFO log - Started SelectChannelConnector@0.0.0.0:8161

Żeby sprawdzić czy działa otwieramy przeglądarkę i sprawdzamy adres http://0.0.0.0:8161/admin
Ostatni test czy wszystko działa poprawnie uruchamiamy przykład dostarczony przez dystrybutora (typowy przykład klient (czeka na 10 wiadomość) producent (produkuje 10 wiadomości)). Do uruchomienia przykładu musimy mieć zainstalowanego Anta. W katalogu gdzie rozpakowaliśmy źródła przechodzimy do pod katalogu examples i w jednej konsoli uruchamiamy klienta w drugiej producenta.
Klient:
lukasz-lipkas-computer:~/Library/apache-activemq-5.0.0/example lipka$ ant consumer
Producent:
lukasz-lipkas-computer:~/Library/apache-activemq-5.0.0/example lipka$ ant producer

Wszystko działa:) Teraz już tylko połączyć to z Mule:)


Mule instalacja

Dzisiaj czas zacząć przygodę z jednym z najbardziej popularnych, darmowych ESB MULE. Nie będę robił wprowadzenia do ESB, napiszę w skrócie do czego może się przydać.
Moja definicja ESB to:
- szyna umożliwiająca komunikacje pomiędzy różnymi serwisami, jej główne założenie to uproszczenie tworzenia architektury SOA(Service Oriented Architecture) (architektura zorientowana na usługi).
Dobra zobaczymy jak to działa w praktyce, pojawiła się nowa wersja Mule 2.o.o idziemy do Download ściągamy źródła i je rozpakowujemy. Zerkamy jeszcze co nowego w wersji 2.0.0 z ciekawych rzeczy widzę, że w następnych wersjach ma być wsparcie dla OSGi.
The Registry architecture will continue to evolve a bit in future releases and will form the basis of OSGi support in Mule.
Wracając do Mule przed rozpoczęciem całej zabawy należy zainstalować niezbędne oprogramowanie(jvm, maven, ...). Po ściągnięciu i rozpakowaniu , czytamy INSTALL.txt, i wykonujemy następujące polecenia (w zależności od systemu operacyjnego, u mnie mac):
export MULE_HOME=/Users/lipka/Library/mule-2.0.0
export PATH=$PATH:$MULE_HOME/bin
Potem w konsoli piszemy:
mule
podczas pierwszego uruchomienia musimy zaakceptować licencje.
Do you accept the terms and conditions of this license agreement [y/n]?
y
i potem widzimy (maven ściągą niezbędne jary) i na końcu:
Starting the Mule Server...
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.

WARN 2008-04-07 13:57:39,559 [WrapperListener_start_runner] org.mule.MuleServer: A configuration file was not set, using default: mule-config.xml


*******************************************************************************
No config file specified and no config by the name of mule-config.xml
found on the classpath.

Usage: mule -config [-builder ] [-debug] [-version]

mule-configuration - a URL for the Mule Config XML to use,
if not specified the config will be loaded from
the classpath

config-builder - a fully qualified class name of the builder to use
to configure Mule.

debug - configure Mule for JPDA remote debugging.
Customize settings by editing a JPDA_OPTS variable
in the mule startup script

version - print full product information
*******************************************************************************


INFO 2008-04-07 13:57:39,594 [Thread-0] org.mule.MuleServer: Mule server shutting down due to normal shutdown request
INFO 2008-04-07 13:57:39,603 [Thread-0] org.mule.MuleServer:
**************************************************************************************
* The server is shutting down due to normal shutdown request *
* Server shutdown: 07.04.08 13:57 *
**************************************************************************************
<-- Wrapper Stopped


Teraz jak już wszystko działa, można uruchomić najprostszy przykład, dostarczony z dystrybucją, w naszym wypadku to będzie Echo Example.
lukasz-lipkas-computer:~/Library/mule-2.0.0 lipka$ cd examples/echo/
lukasz-lipkas-computer:~/Library/mule-2.0.0/examples/echo lipka$ mule -config conf/echo-config.xml
Na konsoli powinna się pokazać możliwość wpisania jakiegoś przykładowego teksty (potem ENTER) i jeszcze raz go wyświetlenie, takie systemowe echo tylko za pomocą UMOComponentu:
**********************************************************************
* Mule ESB and Integration Platform *
* Version: 2.0.0 Build: 11521 *
* MuleSource, Inc. *
* For more information go to http://mule.mulesource.org *
* *
* Server started: 01.01.70 01:00 *
* Server ID: 8e67013c-049b-11dd-b60e-f34003987973 *
* JDK: 1.5.0_13 (mixed mode) *
* OS: Mac OS X (10.4.11, i386) *
* Host: lukasz-lipkas-computer.local (192.168.123.3) *
* *
* Agents Running: None *
**********************************************************************

Please enter something:
helloWorld :)
INFO 2008-04-07 14:10:17,896 [EchoUMO.2] org.mule.component.simple.LogComponent:
********************************************************************************
* Message received in service: EchoUMO. Content is: 'helloWorld :)' *
********************************************************************************
INFO 2008-04-07 14:10:17,911 [SystemStreamConnector.dispatcher.1] org.mule.transport.stdio.StdioMessageDispatcher: Connected: StdioMessageDispatcher{this=185633, endpoint=stdio://system.out, disposed=false}
helloWorld :)

Please enter something:


Mule już działa więc teraz trzeba będzie się przyjrzeć jak można go zastosować w projektach informatycznych.
PS. dla tych co mają maci, krótkie wprowadzenie do shella pod mac OS.




wtorek, 1 kwietnia 2008

Zarządzanie grupą rozproszonych programistów

Rozpoczynam temat z myślą, że jakieś bardziej doświadczone osoby pomogą mi w doborze jak najlepszych praktyk pracy zdalnej grupy programistów.
Z tego co mi się wydaje jedną z ważniejszych rzeczy w udanym projekcie informatycznym jest komunikacja w zespole. Do jak najlepszej komunikacji jak na razie został wybrany skype (nie ma problemu z tworzeniem konferencji paro osobowych).
Skype w praktyce (jeśli zespół jest rozproszony wtedy może zastępować codziennie spotkania w pracy):
- codziennie ta sama godzina konferencji, na której każdy z programistów opisuje co zrobił wczoraj i co planuje na dzisiaj (maksymalny czas na osobę nie powinien przekroczyć 3 -4 min).
Jak jest zaleta tej technologi ? Każdy z programistów wie co dzieje się w projekcie i do kogo się można zwrócić w razie wystąpienia jakiegoś problemu.
W jaki sposób zorganizować programowanie w parach (XP)? W tym wypadku przychodzi nam z pomocą NX dzięki któremu możemy współdzielić ekran, myszkę i klawiaturę z osobą po drugiej stronie globu.
Co do innych narzędzi usprawniających pracę programistów to zastanawiam się nad:
- cruise control (zautomatyzowane budowanie całego projektu uwzględniające junit i generujące raporty o aktualnym stanie projektu)
- trac + mylyn (jako w tyczka do Eclipse) (organizacja zadań z priorytetami)
- do tworzenia dokumentacji jakieś wiki (osobiście polecam jedno z prostszych dokuwiki)
- maven + svn (tutaj chyba nic nie muszę pisać:))
Jeżeli już ktoś pracował w rozproszonym środowisku programistów, proszę o wskazówki jak można usprawnić pracę i komunikację w takim zespole (i jakie narzędzia, praktyki były stosowane).