Marcin bloguje

.impressions.memos.tech.

Inteligentny Mock W SoapUI

Któż z nas nie testował WebService’ów, a któż z nas nie używał do tego SoapUI :) Ok, z rzeczami oczywistymi dyskutować nie będę, ale przy okazji jednego projekciku okazało się, że fajnie by było gdyby mój mock potrafił zrobić coś więcej niż tylko odpowiedzieć na nadesłany komunikat.

Oczywiście sam SoapUI posiada dosyć spory wachlarz możliwości, bo może wysłać losowy request spośród wprowadzonych, lub wysyłać wedle sekwencji, itp.

Problem w tym, że moim wysublimowanym życzeniem było aby korelować komunikaty określonego typu na podstawie jednego pola z XMLa - nazwijmy je polem “X”. Jeśli w polu X przyszła wartość, której do tej pory nie widzieliśmy - odpowiedz jednym komunikatem, jeśli ta wartość już została przez nas odebrana (ostatnio :) ), to prześlij trochę inną odpowiedź.

Na pomoc przyszedł mi wbudowany interpreter Grooviego, którym to można oskryptować kilka fragmentów aplikacji, między innymi tworzone MockService.

No cóż, rozwiązaniem mojego problemu okazało się wrzucenie poniższego skryptu do “OnRequest” konkretnego WebService’u.

import groovy.sql.Sql                                                                                                                                        
import java.sql.*;

def url = 'jdbc:oracle:thin:@localhost:1521:XE'
def driver = 'oracle.jdbc.OracleDriver'
def user = 'mnp_data' 
def password = 'mnp_data'

def sql = Sql.newInstance(url, user, password, driver)

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)

def holder = groovyUtils.getXmlHolder( mockRequest.requestContent)

holder.declareNamespace("xxx", "http://www.ftang.com/example")

def props = mockRunner.mockService
context.put('props', props);

def _phoneNumber = holder.getNodeValue( "//xxx:number")
log.error(_phoneNumber)

if (_phoneNumber != null) {
    if (context.phoneNumber != _phoneNumber) {
        context.setProperty('phoneNumber', _phoneNumber)
        context.setProperty('responseType', 0)
    } else {
        context.setProperty('responseType', 1)
    }   
    sql.eachRow("select * from cases where phone_number = ?", [_phoneNumber]) { 
            log.error(it)
            context.setProperty("caseId", it['case_id'])
        }  
}

def _getPhoneNumber = { 
    return props.getPropertyValue('phoneNumber')
}
context.setProperty("getPhoneNumber", _getPhoneNumber);

def _getOpenCasesResponse = {
    if(context.get('responseType')==1)
        return "";
}

context.setProperty("getOpenCasesResponse", _getOpenCasesResponse);

Prawda, że proste? :)

A czy Wy używacie grooviego? A może SoapUI?

Comments

No popatrz, używam SoapUI :) Z groov tego korzystalismy do generowania identyfikatorow, ktore nastepnie trafialy do komunikatow.

Pozdrowienia od kolegi z akademika :)

Czyżby BPEL Wreszcie Stał Się Bardziej Użyteczny?

Nieee… to po prostu udało mi się uruchomić BPEL Designera - plugin
do Eclipse’a. Co prawda wymagało to grzebnięcia w źródłach, które nie
były aktualizowane już od dłuższego czasu. Zmiany polegały głównie na
poprawie zależności. Niemniej, plugin z wersją 3.5 Eclipse’a działa
sprawnie. W poprzednich wersjach miał tendencje do zacinania się, a
przyczyny tego nie udało mi się namierzyć.

A co to jest BPEL?

Business Process Expression Language. Czyli XML do
opisywania przepływu długotrwałych procesów w przedsiębiorstwie, itp.
Dużo bełkotu marketingowego sprowadzającego się do tego, że jest to
ciężki w obejściu twór, którego główną zaletą są:

  • długotrwałe procesy właśnie - mogą trwać np. 100 dni,
  • obsługa web serwisów oraz pokrewnych xml’owi technologii w sposób natywny.

Wszystko to oczywiście musi działać w jakimś kontenerze. Ja akurat, ze
względu na miejsce pracy mam styczność z ODEO
(http://top.touk.pl/confluence/display/top/ODEO), które bazuje na Apache
ODE (http://ode.apache.org). Ot taki engine do uruchamiania procesów
biznesowych.

Na ostatnim JUGu koledzy z pracy mieli nawet prezentację na temat
rozwiązań, których używamy - między nimi również ODEO:
http://top.touk.pl/confluence/display/top/BPEL+in+Practice

No ale wracając do pluginu

Jest on o tyle fajnym narzędziem - a przynajmniej powinien być, bo
pozwala na graficzne przedstawienie procesu, co powinno ułatwić jego
ogarnięcie. Oczywiście kwestia z którą można swobodnie polemizować ;-)

Plugin nie jest też zdecydowanie doskonały, bo nie wszystko w nim
działa. A co w pluginie nie działa?

  • edytowanie deploy.xml - otwierając pusty plik, otwiera się jakiś inny
    :) bardzo dziwne
  • są dziwne problemy z wizualizacją strzałek połączeń, np. jak na
    screenie poniżej.

Co mogłoby działać lepiej.

  • zmiana orientacji diagramu - z pionowej na horyzontalną
  • fajnie byłoby wiedzieć w którym miejscu grafu jesteśmy, czyli np.
    wyświetlać nazwy activity czyli wartość atrybutu name

No cóż, żeby nie psioczyć, zamierzam te włąśnie wyżej wymienione rzeczy
poprawić. Zobaczymy co z tego wyjdzie :) W tej chwili projekt na
eclipse.org jest od dłuższego czasu nieaktywny (brak zmian w CVS oraz
postów na grubie projektu), a szkoda, bo to jedyna na tyle kompleksowa
implementacja narzędzia do BPELa. Oczywiście z tych open-source.

Comments

Ojej… Kumpel w ramach pracy magisterskiej robi edytor BPEL na potrzeby projektu grantowego. Coś mi się zdaje, iż niedługo i ja sam będę musiał się o to otrzeć.

Solaris W TR

Wczoraj byłem w TR (http://www.trwarszawa.pl/). Na wejściówki, po
taniości. Obejrzałem spektakl Solaris, bo to Lem, bo znam, bo jako jedną
z niewielu rzeczy Lema czytałem. Powody były.

Wrażenia? Bardzo fajnie się oglądało. Problem jedynie w tym, że z
wydawałoby się dosyć prostej fabularnie książki zrobiono spektakl,
którego nie da się w całości zrozumieć z powodu niedopowiedzeń. Czy to
jest domena nowoczesnych interpretacji teatralnych??

Comments

@Biały, tak, faktycznie. Ale ostatecznie na prawdę nie wyszło to tak źle. Akurat te aspekty, które wspomniałeś były ciekawie przedstawione.

Moim zdaniem „Solaris” jest książką, która absolutnie nie nadaje się do wystawiania, kręcenia filmów, itp. To znaczy – chętnie bym w sumie zobaczył, co można zrobić z tym w teatrze, ale na pewno nie da się tego zrobić „wprost” – po prostu pokazując fabułę. Sęk w tym, że w „Solaris” wszystko, co istotne, pozostaje niewypowiedziane. Przede wszystkim kluczowe pytanie książki: jak bardzo w swoim widzeniu świata jesteśmy ograniczeni przez swoją zwierzęcą naturę i ludzką, uwarunkowaną ziemskim życiem psychologię? Do jakiego stopnia możemy rzeczywiście poznać i zrozumieć coś nowego, a do jakiego w spotkaniu z czymś nowym i obcym możemy tylko powielać swoje stare wzorce i uprzedzenia, próbując jakoś poupychać świat w niezbyt adekwatny zestaw pojęć?

Heh, jeśli mam być szczery to w tej chwili nie pamiętam ani skąd wizyta, ani kim byli biegający ludzie ;) Zresztą to teatr - wszystkiego się można spodziewać, ale nie tego, że będzie to prosta opowiastka z prostą fabułą.

@katafrakt, ale zrozumienie fabuły na pewno pomogłoby w odbiorze reszty. Przedstawienie przemilczało kwestie takie jak: skąd ta wizyta w pobliżu planety, kim są ci biegający po stacji ludzie, itp.

Oczywiście jak ktoś czytał książkę, to zrozumiał ;-) ale jednak nie o to do końca chodzi.

Tyle że w Solaris raczej nie o "zrozumienie fabuły" chodziło, ztcp ;)

A co? nie zrozumiałeś fabuły? Moim zdaniem to akurat łatwizna, w samej książce można się doszukiwać różnych psychologicznych motywów działania ludzi na stacji. To tak IMHO.

> że z wydawałoby się dosyć prostej fabularnie książki

czo

Love - Some Kind of Preview…

Czytając mój ulubiony serwis o grach, czyli Rock-Paper-Shutgun dowiedziałem się, że osobnik znany jako Eskil Steenberg wypuścił nieinteraktywne preview swojego “multiplayer experience” - LOVE.

O co tyle szumu? Wystarczy spojrzeć na to jak gra wygląda. Nie chodzi w tym o jakąś wypasioną grafikę, a o frajdę z gry. Eskil pisze swoją grę w pojedynkę. Idzie mu to naprawdę sprawnie. A zestaw narzędzi jakich używa wprawia mnie za każdym razem w podziw. Chodzi mi z grubsza o narzędzia pokroju Verse (http://www.quelsolaar.com/verse/), które to jest rozproszonym edytorem modeli 3D. Pozwala na współpracę wielu osób i do tego integruje się chociażby z Blenderem. A to tylko wierzchołek tej góry :) Całość wygląda niesamowicie innowacyjnie i imponująco.

A wszystko to i wiele innych możecie znaleźć na stronie Eskila - Quel Solaar.

Demotywator Mój

Z dwa tygodnie temu zrobiłem fotkę. Nadawała się na demotywator. Moim zdaniem przynajmnie :)

Umieściłem ją więc w serwisie odpowiednim - demotywatory.pl Raczej nie pieją ludzie z zachwytu, ale mam radochę i tak :D.

Link do demotywatora - LINK.

Comments

@Voter101 - dzięki za słowa krytyki ;-)

Jednak nadal dziwi mnie tak niesamowicie osobiste podejście do tego co ktoś sobie na blogu napisze. No ale trudno!

A co do Twojej rady, żebym wracał do gimnazjum. Wydaje mi się, że ktoś tu tęskni za zeszłym rokiem, bo: http://voter101.jogger.pl/2009/09/08/liceum-nie-takie-straszne/

:)

Marcinie Drogi, ten obrazek w białej ramce na czarnym tle z nieśmiesznym podpisem jest iście chujowy - że tak się wyrażę. Żal^2. Wracaj do gimnazjum, tam lubią takie obrazki w białej ramce, na czarnym tle!

I teraz się pożal, że cię obraziłem. :) Nie było tego umieszczać na stronie głównej. Niestety społeczność joggera nie wybacza takich pomyłek. :D

You forgot Poland.

To nie jest demotywator.

W sumie, średnio śmieszne zdjęcie z kompletnie nieśmiesznym podpisem = demotywator!

Sry, że tak brutalnie, ale moje podejście do wynalazku zwanego demotywatorami jest powszechnie znane ;)

racja, nie przejmuj się definicjami ;) Kto by chciał, żeby demotywator demotywował ;)

He! biorąc sobie jakąś tam definicję demotywatora, to może i nie jest demotywator. Natomiast jak dla mnie, to wszystko jest na miejscu:

* głupi tekst
* głupie zdjęcie
* czarne tło
* biała ramka :P

Mniej definicji ludzie!

Bo to nie jest demotywator…

Zaraz pewnie przyjdzie RioT i zacznie krzyczeć że to nie demotywator ;).

Ludzie! Porzućcie F-Spot!

Dziś usiadłem do porządkowania zdjęć z wyjazdu wakacyjnego. Postanowiłem użyć do tego właśnie programu F-Spot. Wydawał się on odpowiedni. Zaimportował fotki, posortował według informacji EXIF. Schody zaczęły się w momencie edycji całej kolekcji.

Ze zdjęciami było trochę problemów, którymi chciałem się zająć:

  • część trzeba było obrócić
  • połowa była zrobiona na Nikonie, który nie miał ustawionej daty, tak więc ficzer sortowania po dacie z nagłówka EXIF wziął w łeb

Tak więc chciałem poobracać fotki i uporządkować wedle czasu. Pierwsza czynność poszła w miarę łatwo. Druga była już lekko upierdliwa - np. Można zaznaczyć wszystkie fotki i otworzyć je w okienku do zmiany czasu, ale wtedy zapisywane są zmiany dopiero po wciśnięciu OK. Niby byłoby to fajne, ale, gdy ustawimy czas dla jednej fotki, to mamy taki oto wybór:

fspot-fail

Albo zastosujemy tą datę do wszystkich zdjęć, albo damy zdefiniowany krok pomiędzy zdjęciami. A jakbym chciał tylko częściowo skorzystać z tych opcji, albo jednocześnie, to co niby mam zrobić?? Może da się to zrobić jakoś inaczej, ale jest to w obecnej formie krańcowo nieintuicyjne. W rezultacie proces porządkowania to około 1h - przy 500 zdjęciach.

Mając już posortowane fotki chciałem je zapisać do folderu. Jest przecież opcja “Export->Folder”, która dokładnie to robi. A ja lubię mieć fotki w folderach, a nie zarządzane wyłącznie jakąś dodatkową aplikacją. Niestety okazało się, że dostaję piękną wywrotkę F-Spota:


Stacktrace: at (wrapper managed-to-native) Exif.ExifData.exif_data_save_data (System.Runtime.InteropServices.HandleRef,intptr&,uint&) <0x00004> at (wrapper managed-to-native) Exif.ExifData.exif_data_save_data (System.Runtime.InteropServices.HandleRef,intptr&,uint&) <0xffffffff> at Exif.ExifData.Save () <0x0006c> at JpegHeader.SetExif (Exif.ExifData) <0x00014> at FSpot.JpegFile.SaveMetaData (System.IO.Stream,System.IO.Stream) <0x0004e> at FSpot.JpegFile.Save (Gdk.Pixbuf,System.IO.Stream) <0x00149> at FSpot.Filters.ResizeFilter.Convert (FSpot.Filters.FilterRequest) <0x001d1> at FSpot.Filters.FilterSet.Convert (FSpot.Filters.FilterRequest) <0x000e6> at FSpotFolderExport.FolderGallery.ProcessImage (int,FSpot.Filters.FilterSet) <0x0060a> at FSpotFolderExport.FolderExport.Upload () <0x0050f> at (wrapper runtime-invoke) System.Object.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff>

Aby nie czekać na poprawki i dochodzenie co i jak w samym programie postanowiłem obejść program i korzystając z informacji z bazy SQLite, wewnętrznie wykorzystywana baza F-Spota, sam uporządkowałem moje fotki w folderze.

Jeśli komuś byłoby to kiedyś potrzebne, to korzystając z wersji 0.5.0.3 pomógł mi taki skrypcik:

#!/bin/sh
for pair in `sqlite3 photos.db 'select * from photos' | awk -F\| '{ print $2 "|" $3}'`
do
    seconds=`echo $pair | awk -F\| '{print $1}'`
    path=`echo $pair | awk -F\| '{print $2}' | sed -e 's/file:\/\///'`
    photo_date=`date -d @$seconds +%F_%H:%M`
    cp $path Desktop/Sycylia_09.2009/$photo_date.jpg
    echo $photo_date $path
done

No i ok, o ile pierwsze z moich zarzutów można jakoś ścierpieć i starać się wytłumaczyć (choćby tym, że ostatnio czytałem książkę “Designing interfaces” (Amazon), to już nie wyobrażam sobie jak można dopuścić do tego, żeby aplikacja wywalała się przy dosyć kluczowej - bo końcowej, operacji!

Comments

DigiKam i Gwenview oferują znacznie więcej, a tym samym są mniej zasobożerne od F-Spot. Jeśłi ktoś uparcie chce aplikację napisaną z użyciem gtk to polecam Shotwell:

http://yorba.org/shotwell/

Ja jestem zadowolony z F-spot na Mandriva Extreme 2

Totalna załamka F-Spot :F

Odnośnie pakietów i repozytoriów w openSUSE, to rzeczywiście jest tam niezły syf. Webowy klient Build Service powinien dorobić się jakiegoś interfejsu propozycji pakietów do oficjalnego repozytorium, które winno być jedno i powinno zawierać aktualizacje. Mniej do pobierania, większy porządek.

Bo Contrib nie zdało egzaminu.

@Jajcuś - racja, ale w jednym z wcześniejszych postów na tym blogu żaliłem się na system pakietowy openSuse, na którym to używałem tego f-spota.

Ok, fakt jest faktem, powinienem dać szansę nowszej wersji.

no brak jest alterntywy

Wiesz… aktualna wersja f-spot to 0.6.1.2, a nie 0.5.0.3.
No i ja alternatywy dla F-Spot nie widzę… oglądałem różne alternatywy (czy Picassa, czy GThumb) i niestety, jak dla mnie nawet nie zbliżyło się użytecznością do tego, dalekiego od doskonałości, F-Spota.

Zamiast robić durne afery, zgłoś błąd…

Wyobraź sobie, dla własnego komfortu psychicznego, co byłoby, gdyby każdy robił aferę ze znalezionego buga. Jogger musiałby zmienić nazwę na Bugger albo I’m-too-lazy-or-sth-to-file-a-bug.

Marcin: gthumb w niektórych wersjach ma BUG. Też to mam.

digiKam

Cóż mogę powiedzieć, SOA#1 :).

@kmitko: a czy trzeba zrobić coś specjalnego, żeby w gthumb, przy przeglądaniu folderów ze zdjęciami pokazały się te pliki? W tej chwili gdy wchodzę do zadanego katalogu nic nie pokazuje się, tak jakby był pusty. A nie jest :)

To już zależy od wymagań. Ja przerzuciłem się na gthumb — jest import zdjęć, prosta edycja, katalogi działające jak tagi i eksport do galerii html.

jeśli nie f-spot to co?

Open Suse Jest Upośledzone!

Zarządzanie pakietami to droga przez mękę. Czemu? Proszę bardzo:

marcin@byakshee:~> sudo zypper install f-spot
Reading installed packages...
'f-spot' is already installed.
Nothing to do.

ale już jakbym chciał upgrade paczki zrobić, to inna rozmowa:

marcin@byakshee:~> sudo zypper update f-spot
Reading installed packages...
Package 'f-spot' is not installed.
Nothing to do.


Wniosek z tego taki, że jak raz zetkniesz się z apt-getem, to już nic nie będzie później odpowiednie :D A OpenSuse oczywiście odradzam.

Comments

Apatitude ssie ;) Na moim NAS działa jakieś 80% wolniej niż apt-get. Zwłaszcza proces inicjacji.

Zainstalowałem z lenistwa OpenSuse u mojej Miłości. Srodze się rozczarowałem. Ślimaczy się toto u Niej bardziej niż moje Gentoo, przy czym należy wspomnieć, że moja maszyna ma jakieś 7 lat więcej niż ta przez Nią aktualnie użytkowana.

A poza tym apt-get jest przestarzały — „użyj mocy” i włącz aptitude.

Nie korzystam z apt-geta na OpenSuse - takie wybiegi uznaję za jakieś akrobacje. Używam tylko YaST i zypper - no ale mam nadzieję, że korzystają z tej samej bazy pakietów :D albo że "zypper install" korzysta z tej samej co "zypper update" :)

Oh, to nie wiem - administruje dwoma SuSE (jeden czysty SuSE, jeden OpenSuse) i poza marudzeniem na UBER WOLNE YaST problemów nie miałem.

Raczej nie sądzę – ja też się z tym problemem w openSUSE spotkałem niegdyś, i zawsze on występował, nieważne jak paczka została zainstalowana.

Tu się nie sprzeczam, bo mnie zawsze YaST boli - ale może właśnie dlatego, że pakiet był instalowany przez czysty apt-get teraz są problemy z paczką?

Ma, ale jest szitowe – zawsze po instalacji czegokolwiek przez 5 minut musi się wałkować jakieś SuSEconfig, nie wiadomo po co.

A ten - OpenSuse nie ma zarządzania przez yast?

Cóż, pozostaje mi się z tą opinią zgodzić. Używałem niegdyś openSUSE, i muszę przyznać, że zarządzanie pakietami w nim jest do dupy – a to problemy z apgrejdowaniem, a to konieczność żonglerki repozytoriami, a to pakiety z powycinanymi niektórymi funkcjonalnościami (bo patenty), a to całkowicie niepotrzebne i zbędne zależności… Ech.

Przydatne Programy Zdjęciowe

Od dawna używam hugina, który doskonale nadaje się do sklejania wielu zdjęć w panoramę. Robi to doskonale, wygładza, koryguje, dopasowuje. Wystarczy wrzucić sekwencję zdjęć w odpowiedniej kolejności, a program załatwi wszystko za mnie. Miód!

Dziś znalazłem natomiast programik o dziwnej conieco nazwie tintii. On z koleii służy do przerabiana zdjęc na czarnobiałe, zostawiając pewien obszar w kolorze. Robienie podobnej rzeczy w Gimpie nigdy nie wychodziło mi łatwo. Dzięki temu narzędziu wszystko idzie łatwo i przyjemnie!

Polecam!

Comments

I had that 2 months ago. You can dlnoowad everything under the moon, it may not help. Save all your files on portable disks(Music, files, pics, etc.) Now, you need to reformat the disk. To do this, turn off computer.Turn back on, and then hit F10. Go to advanced options, Next, Yes, Yes. Your computer is good as new. Don’t forget to save those files because they will be gone once you reformat.

Bardzo fajny to programik, polecam :0

Battlestar Galactica

Wszystko zaczęło się w 2005, kiedy to wypuszczony został pierwszy odcinek odświeżonego serialu Battlestar Galactica. Początkowo zapowiadał się po prostu remake serialu z lat 70. Jednak z czasem, gdy rozwijała się fabuła a kolejne odcinki puchły od mnogości bohaterów i ich różnorodności, serial stał się czymś nowym. Całkiem odrębnym.



Przez te lata pozwolił przeżyć z bohaterami zagładę planety Caprice, ucieczkę grupy 50 000 niedobitków, partyzancką walkę z przeważającymi siłami Cylonów. Gdy znaleziono nowy dom, oglądaliśmy ich zmagania z niegościnną planetą, a później z jażmę Cylonów, którzy jednak znaleźli ich i tam. Z czasem doszło do unii między ludźmi a Cylonami, aż w końcu….



Nieee…. to by był zbyt duży spoiler. Sęk w tym, że właśnie skończyłem 4. sezon Battlestar Galactica, który rozstrzygnął masę rzeczy i zakończył całość. I jakkolwiek ckliwie i telenowelowo brzmi powyższe streszczenie, to wszystkim fanom scifi radzę zapoznać się z tą produkcją, bo naprawdę warto.



Wiele z tych postaci osiągnęło już status kultowy :D przynajmniej wśród osób oglądających serial!




Battlestar galactica - last supper


IMDB

Wikipedia