niedziela, kwietnia 04, 2010

.NET 4.0 na wiele rdzeni



Operacje na ParalellArray w Javie można łączyć ze sobą, ale w .NET 4.0 jest obsługa domknięć (closures).

sobota, kwietnia 03, 2010

Java 7 na wiele rdzeni



Hitem Javy 7.0 będzie uaktualniony pakiet java.util.concurrent z klasą ParalellArray pozwalającą na proste pisanie kodu, który będzie wykonywał się automatycznie na wielu rdzeniach. Na obrazku proste szukanie liczb pierwszych.

Eclipse 3.6 Marketplace



W nowym wydaniu popularnego IDE będzie można zainstalować darmowe i płatne aplikacje ze sklepu z oprogramowaniem.

Solaris prstat


Zanim użyjemy dtrace-a można szybko zebrać ważne informacje o wątkach procesu.

środa, marca 24, 2010

Certyfikaty klienta na IIS 6.0

Na IIS-ie w celu autoryzacji klienta certyfikatem nie należy używać Certificate Trust List. Przeważnie certyfikat klienta będzie podpisany certyfikatem nadrzędnej jednostki a na najwyższym poziomie certyfikatem CA. IIS do Certificate Trust List akceptuje tylko certyfikat self-signed, czyli w tym wypadku CA. Uaktywniając CTL spowodujemy, że do serwera zautentykuje się każdy dysponujący dowolnym certyfikatem, który w ścieżce certyfikacji ma to samo CA!

Żeby rozwiązać problem uaktywniamy mapowanie certyfikatu do użytkownika lokalnego.



Na zasobie IIS ustawiamy ACL tak, żeby dostęp miał tylko zamapowany użytkownik (pozostałe wpisy uprawnień to SYSTEM, NETWORK_SERVICE, NETWORK, IIS_WPG i Administrators).



Teraz jeszcze jedna kwestia: certyfikat klienta podaje jako adres CRL hosta z sieci wewnętrznej. Można wyłączyć sprawdzanie, czy certyfikat został wycofany, za pomocą narzędzia IIS Metabase Explorer z pakietu IIS Resource Kit - dodając wpis CertCheckMode=1 (user: Server, attributes: Inheritable).



Należy pamiętać o wyłączeniu anonimowego dostępu.

piątek, marca 12, 2010

Naprawiamy Internet w Aster

Objawy problemu są takie: sieć działa wolno, z dużymi opóźnieniami, co jakiś czas połączenie internetowe przestaje działać, modem długo się synchronizuje (zapalanie się kolejnych diod), stany działania i niedziałania są naprzemienne.

Workaround: Odłączamy kabel sygnałowy od modemu
i restartujemy go - modem przyjmie adres IP 192.168.100.1. Do modemu podłączamy bezpośrednio komputer i ustawiamy mu na sztywno adres 192.168.100.2 z adresem bramki 192.168.100.1. Wchodzimy na interfejs webowy i szukamy ustawień dotyczących pasma.


W przypadku Ambit Broadband zaglądamy do menu Tools. Podnosimy wartość Lowest Downstream Frequency z 560MHz na 700MHz (górna granica Highest Downstream będzie określona na około 850MHz). Możemy zwiększyć odstęp między kanałami z 8 na 10MHz. Przepinamy wszystko tak, jak było oryginalnie i restartujemy router (ale nie modem!). Powinno działać. Problem jest jeszcze z tym, że modem może się zrestartować i zaczytać domyślną konfigurację - wtedy operację trzeba powtórzyć.

Kanałem downstream transmitowane są pakiety UCD (Upstream Channel Descriptor), zawierające informacje o częstotliwości kanału upstream (można przyjąć, że jest on poniżej 40MHz).


Warto też wymienić sobie serwer DNS na chociażby 8.8.8.8 (asterowy bind na FreeBSD ma spore opóźnienia i nie odpowiada na część żądań - szczególnie widać to na Linuksie).

Bo zupa była za słona

Przeczytałem list Rektora w sprawie likwidacji Zakładu Żywienia Zbiorowego PW i doszedłem do wniosku, że wobec nierzetelnego potraktowania tematu, warto nadal bronić Stołówki. Zmotywował mnie także do tego dokument 'Misja Politechniki Warszawskiej', w którym czytamy:
'Wrażliwość młodzieży nakazuje szczególną troskę o fundamentalne zasady i system wartości.
Społeczność Politechniki musi dostarczać wzorców dobrych obyczajów w życiu akademickim
i w życiu publicznym oraz być szczególnie wyczulona na wszelkie przejawy zła i nieprawości,
a zwłaszcza na naruszanie godności osoby ludzkiej albo odstępowanie od prawdy
w imię indywidualnych lub grupowych interesów.'

Uważam, że należy bronić godności mniej majętnych studentów, którzy zasługują na gorący posiłek, za 5 albo 14 zł (2 batony czekoladowe po 2,50 zł nie zastąpią gorącej zupy!). Studentów, których nie będzie stać na sporo droższy, wyrafinowany obiad w Restauracji u Rektora, a którym prawdziwego obiadu nie zastąpi barek. Na portalu polibuda.info Stołówka Centralna ma najlepsze oceny wśród miejsc w okolicy PW, w których można spożyć ciepły posiłek. Nie są to głosy studentów i pracowników z wyższych sfer - czy z tego powodu są to głosy nic nie znaczące? Czy dyskryminujemy studentów ze względu na ich status społeczny?
[Przewodnicząca Samorządu] Chciałabym zwrócić uwagę że 560 podpisów stanowi jedynie ok. 1% społeczności akademickiej
naszej Alma Mater a ponadto są to podpisy nie weryfikowalne gdyż nie są w nich zawarte żadne
dane osobowe. Dlatego też ewentualna zmiana stanowiska Samorządu nie będzie wynikać
z kwestii protestu.


Sprostuję: 2%. Jeśli jakaś partia ma 2% to już ją pokazują w sondażach. Czy Pani chce, czy nie,
mamy demokrację i 560 głosów też się liczy; można je sprawdzić, bo wydziały były podane.
Możemy oczywiście założyć, że te 560 osób nic nie znaczy, ale wtedy cofamy się do poprzedniego
ustroju, w którym byli równi i równiejsi. Czy dzisiaj też mamy równych zwykłych studentów i równiejszy samorząd w białych kołnierzykach, dla którego priorytetem jest kariera i ładnie wyglądający w CV wpis 'działacz samorządu'? Proszę się nie obrażać za to pytanie - zadaję je, bo nie potrafię zrozumieć postawy samorządu.
Samorząd Studentów reprezentuje interesy studentów! Dlatego też uważamy że niekorzystne zamknięcie
stołówki w ogólnym rozrachunku przyniesie znacznie większe korzyści po zakończeniu remontu. Dzięki
czemu studenci nie będą już musieli odbywać zajęć z języków obcych w warunkach uwłaczających ich
godności. A także Wydział Administracji będzie posiadał do dyspozycji sale wykładowe dla swoich studentów
co częściowo rozwiąże aktualne problemy lokalowe.

Co do argumentów za zamknięciem: argument 'za drogo i za słaba jakość' jest wzięty z sufitu.
Ajent nie może mieć lepszych i tańszych obiadów bo:
- nie ma dotacji MNiSW
- będzie ponosił koszty dzierżawy
- będzie miał większe koszty produktów, z których tworzy się obiad (bo nie jest 30-letnią stołówką z ugruntowaną pozycją wśród dostawców kupującą towar w znacznych hurtowych ilościach, ma wydawać mniej "obiadów").
Stwierdzenie, że ajent będzie miał lepsze i tańsze posiłki jest sprzeczne z logiką, więc należy je uznać za fałszywe.

Dzięki Politechnice znam dwa języki obce i nie przypominam sobie, żebym odbywał zajęcia w warunkach uwłaczających mojej godności. Uważam ten argument za wzięty z sufitu. Będąc na wydziale MiNI miałem zajęcia z przedmiotów matematycznych w salach Wydziału Administracji. Jeśli Wydział Administracji miałby takie problemy lokalowe, to by nie udostępniał swoich sal innym wydziałom. Kolejny argument odbiegający od rzeczywistości.

Sprawdziłem dokumenty na stronie Ministerstwa NiSW i widać tam, że kategoria
'koszty utrzymania domów i stołówek studenckich' figuruje w Funduszu pomocy materialnej dla studentów i doktorantów.
Finansowanie jest określone przez USTAWĘ z dnia 27 lipca 2005 r. Prawo o szkolnictwie wyższym (Dz. U. z dnia 30 sierpnia 2005 r.)

Art. 94. 1. Z budżetu państwa uczelnia publiczna otrzymuje dotacje na:
1) zadania związane z kształceniem studentów studiów stacjonarnych, uczestników stacjonarnych studiów doktoranckich i kadr naukowych oraz utrzymaniem uczelni, w tym na remonty;
2. Uczelnia publiczna w ramach dotacji na pomoc materialną dla studentów i doktorantów, o której mowa w ust. 1 pkt 7, może dofinansować remonty domów oraz stołówek studenckich.

Art. 95. 1. Minister właściwy do spraw szkolnictwa wyższego określa, w drodze rozporządzenia, warunki i tryb występowania przez uczelnie niepubliczne o dotacje, o których mowa w art. 94, oraz sposób kontroli ich wykorzystania, uwzględniając jakość kształcenia w uczelni, liczbę nauczycieli akademickich, dla których uczelnia jest podstawowym miejscem pracy, liczbę kształconych w uczelni studentów studiów stacjonarnych i uczestników stacjonarnych studiów doktoranckich, zaangażowanie własnych środków w rozwój bazy materialnej uczelni oraz osiągnięcia uczelni w dotychczasowym kształceniu. W przypadku dotacji na pomoc materialną uwzględnia się liczbę kształconych w uczelni studentów studiów stacjonarnych i uczestników stacjonarnych studiów doktoranckich oraz liczbę studentów i doktorantów będących w trudnej sytuacji materialnej.

Art. 96. Minister właściwy do spraw szkolnictwa wyższego w porozumieniu z Ministrem Obrony Narodowej oraz ministrami właściwymi do spraw wewnętrznych, do spraw zdrowia, do spraw kultury i ochrony dziedzictwa narodowego oraz do spraw gospodarki morskiej określa, w drodze rozporządzenia:
2) zasady podziału dotacji, o których mowa w art. 94, z uwzględnieniem:
a) w zakresie zadań, o których mowa w art. 94 ust. 1 pkt 1 i 8 - danych o liczbie studentów studiów stacjonarnych, uczestników stacjonarnych studiów doktoranckich i nauczycieli akademickich oraz o wskaźnikach kosztochłonności poszczególnych kierunków studiów stacjonarnych i stacjonarnych studiów doktoranckich w poszczególnych dziedzinach nauki,
b) w zakresie pomocy materialnej dla studentów - danych o liczbie studentów, liczbie studentów studiów stacjonarnych uprawnionych do zakwaterowania w domach studenckich oraz liczbie studentów będących w trudnej sytuacji materialnej,

Art. 100. 1. Uczelnia publiczna pokrywa koszty swojej działalności, zobowiązania oraz wydatki na rozwój i inne potrzeby z przychodów określonych w art. 98 ust. 1.
2. Uczelnia publiczna prowadzi samodzielną gospodarkę finansową na podstawie planu rzeczowo-finansowego, zgodnie z przepisami o finansach publicznych i o rachunkowości.
3. Uczelnia publiczna przekazuje ministrowi, który sprawuje nad nią nadzór, oraz ministrowi właściwemu do spraw finansów publicznych plan rzeczowo-finansowy, w terminie czternastu dni od jego uchwalenia. [przydałoby się zobaczyć sprawozdanie z rozliczeniem kosztów stołówki]

Art. 103. 1. Uczelnia tworzy fundusz pomocy materialnej dla studentów i doktorantów.
2. Fundusz, o którym mowa w ust. 1, tworzy się:
1) z dotacji, o której mowa w art. 94 ust. 1 pkt 7 i ust. 4, z wyłączeniem środków na stypendia ministra, o których mowa w art. 173 ust. 1 pkt 4 i 5;
2) z opłat za korzystanie z domu studenckiego;
3) z opłat za korzystanie ze stołówki studenckiej;
4) z innych przychodów, w tym z opłat za wynajem pomieszczeń w domach i stołówkach studenckich.
3. Fundusz pomocy materialnej dla studentów i doktorantów w części, o której mowa w ust. 2 pkt 1, przeznacza się na wypłaty stypendiów i zapomóg, a w przypadku uczelni publicznej także na remonty domów i stołówek studenckich. Dotacja przeznaczona na pomoc materialną dla doktorantów nie może być większa niż 3 % wysokości dotacji określonej w ust. 2 pkt 1.
4. Fundusz pomocy materialnej dla studentów i doktorantów w części, o której mowa w ust. 2 pkt 2-4, przeznacza się na pokrycie kosztów utrzymania domów i stołówek studenckich, a w przypadku uczelni publicznej także na wynagrodzenia pracowników uczelni zatrudnionych w tych domach i stołówkach oraz na odpis na zakładowy fundusz świadczeń socjalnych dla tych pracowników, o którym mowa w art. 157.

Komentując dalej list Rektora:
Stwierdzenie o słabym wykorzystaniu budynku jest fałszywe, o czy może przekonać się każdy jedzący obiad pomiędzy 13:15 a 14 (tylko należy tam się wybrać), kiedy w części samoobsługowej ciężko jest znaleźć wolne miejsca. Należałoby zlikwidować część z obsługą kelnerską, w której faktycznie ruch jest mały - wpłynęłoby to także pozytywnie na integrację wykładowców ze studentami.
Stołówka dla studentów to nie może być stolik na stoliku i ciasnota. Studenci często głośno w swoim gronie rozmawiają, inni przy obiedzie rozwiązują jakieś zadania, czy się uczą - przy mniejszej powierzchni jedni przeszkadzaliby drugim, warunki byłyby naprawdę mało komfortowe. Porównując: w barze na 1 piętrze w Gmachu Głównym stoliki są za małe do wygodnego spożywania obiadu, a ogólne odczucie jest takie, że jest tam za mało przestrzeni.
Co do strat średnio 400 000 zł, to dane te wg rozliczeń ZŻZ są nieprawdziwe. PW powinna korzystać z dotacji MNiSW dla stołówki. Po uwzględnieniu dotacji stołówka jest na plusie.

"Umożliwimy partnerowi organizowanie imprez umożliwiających uzyskiwanie dodatkowych przychodów" - pomijając 'umożliwimy umożliwiających' należy skomentować, że stołówka podejmowała takie aktywności i przynosiły one zyski.
Co do kawiarenki internetowej to studenci mają dostęp do Internetu na wydziałach, a dobrym i sprawdzonym miejscem do spotkań i nauki jest biblioteka.

Co do wykorzystania pomieszczeń: SJO już ma pomieszczenia na terenie SC i Rektor nie planuje tu zmian, podobnie jak Sekretariat Szkoły i Archiwum - ta nadmiarowa enumeracja (wraz z miejscami dla Profesorów w razie potrzeby) ma chyba stworzyć wrażenie, że na terenie stołówki można zagospodarować sporo nowych miejsc.

"Obecnie trwają prace projektowe nowego wnętrza i elewacji budynku" - czyli jeszcze nie ma projektu, ani tym bardziej pozwolenia z Urzędu Nadzoru Budowlanego na remont, a już zamyka się Stołówkę ?!

Chciałbym jeszcze zwrócić uwagę na § 168 Statutu PW:
"1. Politechnika Warszawska utrzymuje stałą więź ze swoimi pracownikami, którzy przeszli na emeryturę lub rentę.
2. Politechnika Warszawska udziela emerytom i rencistom pomocy w zakresie potrzeb kulturalnych i bytowych."
Na obiady na stołówkę przychodzą byli wykładowcy, którzy spory kawałek swojego życia poświecili kształceniu studentów PW. Mogą w swoim gronie porozmawiać, zjeść obiad, a otoczeni studentami, mogą czuć, że są oni nadal z Politechniką a Politechnika z nimi. To sprawia, że ich codzienna egzystencja jest mniej szara. Czy w ich jesieni życia musimy odbierać im te małe codzienne radości?

Update: Tak wygląda barek ITC prowadzony przez przyszłego ajenta - "wyższa jakość":

e


Po powiększeniu obrazka widać cennik - obiad jest droższy niż na SC.




Update: List Rektora i potwierdzenie wpłynięcia protestu:





W oryginalnym wzorze listy protestacyjnej mowa jest o braku stołówki przez 1,5 roku. Informację taką otrzymałem od Samorządu, potwierdził mi ją Kanclerz.
[Przewodnicząca Samorządu, 2010-03-01 17:14] Tak więc zamknięcie stołówki jest sytuacją tymczasową. Na potrzeby remontu będziemy musieli poczekać na otwarcie nowej ok. 1,5 roku.
[Kanclerz, 2010-03-05 17:15] Informacje, które Pan uzyskał od Przewodniczącej Samorządu Studentów są w pełni wiarygodne.

sobota, marca 06, 2010

Marketing PO


Piękna kampania wymierzona w koalicjanta.

Fix Toyoty nie działa

Czyżby błąd w oprogramowaniu? Błędny kod maszynowy wygenerowany przez kompilator, przepełnienie liczby całkowitej, timing issue, błędne dane dostarczane przez czujniki? Przeciętna liczba błędów na 1000 linii kodu dla "zwykłego" oprogramowania to ok. 20. Dla specjalistycznego oprogramowania zakłada się, że ta wartość wynosi ok. 2-3. NASA jest w stanie zejść do poziomu < 0.01 błędu/KLOC. Przy założeniu, że liczba linii kodu firmware-u Toyoty to około 1 mln (VxWorks jest większy) i ma on jakość NASA otrzymujemy 10 000 błędów. Przyjmując, że 0.1% to błędy krytyczne otrzymujemy 10 poważnych błędów.
Co jeszcze z tych rozważań wynika? Im mniej linii kodu, tym mniej błędów. Dlatego eXtreme Programming promujące refaktoring kodu jest dobre.

piątek, marca 05, 2010

MS Marketing



Tak fajny, że aż śmieszny. Chociaż w Windows 7 E muszą się starać, bo przeglądarka będzie do wyboru.

niedziela, lutego 28, 2010

Need For Speed 4 High Stakes nadal rządzi

To był chyba Need For Speed dający najwięcej frajdy (oprócz NFS 5 Porsche Unleashed). Software z 1999 roku można uruchomić na 64-bitowym Windows 7.





Najbardziej lubiłem trasę Hometown (z NFS3) na Ferrari Maranello (albo na dodatkowym Ferrari Modenie). Ponad 10-letnia gra a nadal wymiata!



piątek, lutego 26, 2010

Ekspansja islamu


Wycinek z Gościa Niedzielnego jako komentarz do wpisu na blogu Pastora Bartosika.

czwartek, lutego 25, 2010

House M.D

  • Życie ma sens tylko jeśli robisz coś sensownego (np. ratujesz ludzi).
  • Z Sartre-a: inni ludzie są dla nas piekłem na ziemi, kontakty międzyludzkie z zasady obarczone są nieprzyjemnymi doznaniami, ale oceny innych ludzi wpływają na naszą samoświadomość.
  • House ma cechy nadczłowieka Nietschego.
  • Ocena naszych działań zależy od efektu końcowego.
  • House posługuje się abdukcją w stylu Sherlocka Holmes-a.
  • House poszukuje prawdziwej istoty rzeczy i dlatego można powiedzieć o nim, że jest mistrzem zen.
Książkę pisali wykładowcy filozofii z amerykańskich uczelni. Każdy z nich analizuje House-a przez pryzmat dziedziny, w której się specjalizuje. Niektóre teksty są rzeczywiście celne, chociaż patrząc na powyższą listę w ujęciu całości - wykluczają się. Everybody lies?

środa, lutego 10, 2010

Do akcji wkracza RedHat

Where will you be when the Sun burns out? Dobrze zadane pytanie. A odpowiedź raczej wiadoma...

sobota, lutego 06, 2010

Oracle Solaris

Nie podoba mi się, co Oracle zrobił z Sun-em. Jonathanowi Schwartzowi też się nie spodobało. Wycięli wszystkie projekty, na których nie da się zarobić dużej kasy. Nie skasowali OpenESB chyba tylko dlatego, że Oracle Fusion też używa JBI-a. Zamiast sympatycznych niebieskich stron jest teraz czarny z czerwonym. Kulturą korporacyjną Sun bardziej pasował do IBM-a (DeveloperWorks, AlphaWorks).

Forkować czy nie forkować Database-BC? Obecnie używam poprawionej w paru miejscach wersji w ServiceMix-ie. Sun nie dostał poprawionego kodu, bo zastopowali mnie na etapie Sun Contributors Agreement. Gdybym przekazał swoje poprawki, to OpenESB działałoby bez problemu z bazą Oracle na standardowym sterowniku Oracle. Nie jest to cel strategiczny Oracle Corporation. OpenESB działa ze sterownikiem DataDirect dostępnym w komercyjnym JCAPS-ie albo w wersji standalone za około 20 000 Euro z licencją na cztery rdzenie (z rocznym supportem).

Update 10.02: Oracle zwolnił ekspertów od usuability pracujących dla projektu Gnome. Największy wkład w rozwój Gnome-a mieli pracownicy Sun Microsystems (kto nie wierzy niech spojrzy w statystyki commitów).

piątek, lutego 05, 2010

Profesjonalne Radio tylko z Krakowa

środa, stycznia 27, 2010

Stabilny ServiceMix 3.3 i smx-arch/maven

Standardowo nie działa. Apache udostępnia artefakty w wersji 3.2.3. Rozwiązanie: użyć rzeczy udostępnianych przez FUSE ESB.

-DremoteRepositories=http://repo.fusesource.com/maven2/

wtorek, stycznia 26, 2010

LinkedBlockingQueue czyli jak napisać pulę JDBC

protected LinkedBlockingQueue<Connection> pool = new LinkedBlockingQueue<Connection>();

public Connection getConnection() throws SQLException {
long timeToGo = connAcquireTimeout;
long start = System.currentTimeMillis();
Connection conn = null;
int size = poolSize.get();
workerThread.orderConnections(size < poolMinSize ?
poolMinSize - size : 1);
// wkladamy do kolejki roboczej watku
// ilosc polaczen do zrobienia;
// watek w metodzie run wyjmuje Integer-a n,
// robi n polaczen i wklada je do pool-a

while (true) {
try {
conn = pool.poll(timeToGo, TimeUnit.MILLISECONDS);
break;
}
catch (InterruptedException ie) {
if (conn==null) {
long runTime = System.currentTimeMillis()-start;
if (runTime < timeToGo)
timeToGo -= runTime;
}
}}
return conn;
}

sobota, stycznia 23, 2010

Śledzenie komunikatów w ServiceMix-ie

Trzeba napisać klasę bazującą na org.apache.servicemix.jbi.audit.AbstractAuditor. Proste i ładne.

<bean name="messageAuditor" class="pl.ivmx.smx.MessageAuditor" method="start" method="stop">
<property name="container" ref="jbi">
</bean>

A może usługi "E" realizować jako jedno Service Assembly (BPEL-SE + DBBC)?

Database-bc z OpenESB w ServiceMix-ie

Z zainstalowanego OpenESB potrzebujemy następujące pliki, które umieścimy w katalogu smx3.3/lib/optional: commons-logging-1.1.jar, grizzly-1.0.17.jar, httpbc-ext.jar, javaee.jar, javaws-rt-2.1.2, saaj-impl-1.3.jar, sjsxp-1.0.jar, stax-ex-1.0.jar, streambuffer-0.4.jar.

Do hotdeploy wrzucimy databasebc.jar i httpbc.jar. Demo usługi jest tutaj.

W servicemix.xml dodajemy wpis import resource z classpath o nazwie ds.xml, a tam już definicję DataSource-a:

<bean id="oraEAIDataSource" class="oracle.jdbc.xdriver.OracleDataSource" destroy-method="close">  
<property name="driverType" value="thin"/>
<property name="networkProtocol" value="tcp"/>
<property name="serverName" value="localhost"/>
<property name="portNumber" value="1521"/>
<property name="serviceName" value="EAI"/>
<property name="user" value="soatest"/>
<property name="password" value="soatest"/>
<property name="connectionCachingEnabled" value="true"/>
</bean>

Trzeba pamiętać o dodaniu wpisu JNDI w jndi.xml.

Dlaczego DataSource pochodzi z Oracle XDrivera? Bo Sun w OpenESB nie wspiera oryginalnego sterownika oracle-owego i nie zamierza wspierać. Database-bc i komponenty design-time NetBeansa (dawny SOA Pack) napisane są tak celowo, żeby OpenESB nie nadawało się do zastosować profesjonalnych i nie próbowało konkurować z produktem Oracle Fusion. OpenESB ma niby otwarty kod, ale Sun nie chce poprawek przystosowujących darmowe ESB do działania z bazą Oracle.

Dokumentacja DBBC jest tutaj.

piątek, stycznia 15, 2010

HA-JDBC a Oracle

Fajnie by było mieć magiczny sterownik JDBC, który wie, że są dwa Oracle-a w konfiguracji active-standby. Jeśli połączenie się zepsuje w momencie, gdy aplikacja chce np. wykonać zbuforowany PreparedStatement, sterownik mógłby transparentnie przełączyć się na drugą bazę, tak żeby w żadnym momencie nie pojawił się wyjątek SQLException. Gdy pierwsza baza wróci do życia, sprytny sterownik mógłby zrobić synchronizację i przełączyć się na pierwszą bazę.

HA-JDBC nie obsługuje buforowanych PreparedStatementów - żeby taką funkcjonalność dodać trzeba napisać własnego DataSource-a i wszystko w dół. Drugi problem to problemy w obsłudze synchronizacji Oracle-a (przetwarzanie zbyt wielu obiektów, w tym takich, do których użytkownik nie ma uprawnień oraz nieprawidłowa gramatyka zapytań SQL). Trzeci problem to synchronizacja wewnątrz sterownika. Wątek aktywujący bazy współzawodniczy z wątkiem deaktywującym na tym samym obiekcie Javy, będącym zbiorem obiektów Database - w rezultacie mamy wyjątki przy używaniu iteratora...

Wersja testowa poprawionego HA-JDBC z plikiem konfiguracyjnym, który wyłącza wątek deaktywujący (nie jest potrzebny, bo jest sprytny DataSource) znajduje się tutaj.
HA-JDBC jest na licencji LGPL.

czwartek, stycznia 14, 2010

Oracle XDriver

  • See executed sql commands (also internal PreparedStatements of Oracle driver)
  • Cache statements and database metadata for better performance
  • Easy to switch solution: oracle.jdbc.xdriver.OracleDataSource
  • Lowers GlassFish ESB response time in Oracle operations up to 10x
  • Added metadata operations not supported by Oracle driver
  • DriverManager.getConnection("x:jdbc:oracle:@host:1521:SID")

środa, stycznia 13, 2010

Quick and dirty wrapper generator

niedziela, stycznia 10, 2010

UML by reverse engineering (Borland Together)

 



Przy większych projektach albo projektach mających GUI będzie problem z czytelnością. Całe szczęście jest funkcjonalność Hide/Show. Czy to pomaga dowiedzieć się co jest grane w obiektowym kodzie? Trochę...

piątek, stycznia 08, 2010

Analiza wydajności OpenESB

BPEL w OpenESB wcale nie jest taki wolny. Wołanie procedury NOOP w bazie powoduje, że są sprawdzane jej parametry poprzez oracle.jdbc.OracleDatabaseMetaData.getProcedureColumns, a to natomiast tworzy nowego PreparedStatement-a:

SELECT package_name AS procedure_cat, owner AS procedure_schem, object_name AS procedure_name, argument_name AS column_name,
DECODE(position, 0, 5, DECODE(in_out, 'IN', 1, 'OUT', 4, 'IN/OUT', 2, 0)) AS column_type,
DECODE (data_type, 'CHAR', 1, 'VARCHAR2', 12, 'NUMBER', 3, 'LONG', -1,
'DATE', 91, 'RAW', -3, 'LONG RAW', -4, 'TIMESTAMP', 93, 'TIMESTAMP WITH TIME ZONE', -101, 'TIMESTAMP WITH LOCAL TIME ZONE', -102, 'INTERVAL YEAR TO MONTH', -103,
'INTERVAL DAY TO SECOND', -104, 'BINARY_FLOAT', 100, 'BINAvRY_DOUBLE', 101,
1111) AS data_type,
DECODE(data_type, 'OBJECT', type_owner || '.' || type_name, data_type) AS type_name,
DECODE (data_precision, NULL, data_length, data_precision) AS precision,
data_length AS length, data_scale AS scale, 10 AS radix, 1 AS nullable,
NULL AS remarks, default_value AS column_def, NULL as sql_data_type,
NULL AS sql_datetime_sub, 
DECODE(data_type, 'CHAR', 32767, 'VARCHAR2', 32767, 'LONG', 32767, 'RAW', 32767, 'LONG RAW', 32767,
NULL) AS char_octet_length, (sequence - 1) AS ordinal_position,
'YES' AS is_nullable, NULL AS specific_name, sequence, overload,
default_value 
FROM all_arguments
WHERE owner LIKE :1 ESCAPE '/' AND object_name LIKE :2 ESCAPE '/' AND data_level = 0 
AND package_name LIKE :3 ESCAPE '/' "+
ORDER BY procedure_schem, procedure_name, overload, sequence

który jest strasznie wolny. Należy to wsadzić w cache (org.glassfish.openesb.databasebc.JDBCDenormalizer.populateProcedure):

private static HashMap<String,List<ProcMetaData>> procMetaDataCache = new HashMap<String,List<ProcMetaData>>();
String key = "pcatalog="+pcatalog+",pschema="+pschema+",procName="+procName;
List<ProcMetaData> pmdList = procMetaDataCache.get(key);
if (pmdList==null) {
try
{ pmdList = new LinkedList<ProcMetaData>();
rs = dbmeta.getProcedureColumns(pcatalog, pschema, procName, "%");
while (rs.next()) {
String columnName = rs.getString("COLUMN_NAME");
if(columnName.charAt(0) == '@')
columnName = columnName.substring(1);
int targetSqlType = rs.getInt("DATA_TYPE");
int colType = rs.getShort("COLUMN_TYPE");
String type_Name = rs.getString("TYPE_NAME");
short numericScale = rs.getShort("SCALE");
ProcMetaData pmd = new ProcMetaData(columnName, targetSqlType, colType, type_Name, numericScale);
pmdList.add(pmd);
}
procMetaDataCache.put(key, pmdList); // no sync since it would be difficult or could hurt performance
rs.close();
}

Teraz mamy 22 ms! Quick and dirty fix is here.

wtorek, stycznia 05, 2010

Monitoring pracy systemu podczas obciążenia BizTalka


Szczytowy zapis na wirtualny dysk VMware z punktu widzenia systemu gościa (W2K8 32-bit) to prawie 5MB/s, średnio poniżej 400KB/s. System działa z wyłączonym swapem i włączonym write cache-em.

A teraz wyniki testu Filesystems SiSoft Sandra:

Buffered read: 562 MB/s
Sequential read: 98.43 MB/s
Random read: 44.83 MB/s
Buffered write: 122.38 MB/s
Sequential write: 90.65 MB/s
Random write: 42.65 MB/s
Random access time: 12.15 ms

Tak więc podsystem dyskowy nie powoduje ograniczenia wydajności.

Średni czas dla usługi PobierzDaneKlienta to 472ms.

Po zmianie dysku na preallocated scsi independent-persistent (plus tuning pliku vmx: MemTrimRate=0, logging="FALSE") polepszyła się wydajność w benchmarku (system wirtualny ma dysk szybszy od pojedyńczego Seagate-a; dwa takie dyski tworzą RAID0, na którym umieszczone są wirtualki), ale nie polepszyły się wyniki BizTalka.

Pod BizTalka można podłączyć YourKit Profilera i wtedy widać, że mamy sporo czekających wątków.

Tutaj widać, że sporo czasu zajmuje SendPort.

A od strony IIS-a wygląda to tak:

A co robi baza?

W czasie testu mamy około 5000 blokad SQL na sekundę i 200 transakcji.

poniedziałek, stycznia 04, 2010

Testy wirtualizacji 2.0

Ten sam projekt testowy OpenESB, ale tym razem na najnowszym procesorze AMD: 4 rdzenie 2.6GHz, 95W TDP.



Począwszy od Barcelony 32-bitowe systemy goście działają ze sprzętową wirtualizacją. Na starszych procesorach wirtualizacja realizowana przez procesor była mało wydajna, dlatego VMware włączał ją tylko w przypadku 64-bitowych gości (inaczej nie można by było ich uruchomić), a preferowanym trybem była parawirtualizacja VMI. Linux na AMD-V jest gorszy o 1% od natywnego windowsowego procesu z nałożoną maską afiniczności na jeden rdzeń. RVI (Rapid Virtualization Indexing / nested paging) przynosi niewielki wzrost wydajności w przypadku OpenSolarisa, ale nie w przypadku Linuksa - wygląda na to, że bardzo dobrze zoptymalizowano dla niego tryb AMD-V, a być może nie przyłożono się do RVI. VMware obecnie zapowiada, że w następnych ESX-ach i Linuksie 2.6.37 zrezygnuje z obsługi VMI a skupi się na RVI.

AMD robi świetne procesory. Ciągłe używanie WebService'u przez 10 wątków powodujące pełne obciążenie wszystkich 4 rdzeni, a procesor ma tylko 45 stopni Celsjusza. Intel robi lepsze CPU? No mam wątpliwości...

Offtopic: Grails+JRockit: średni czas 4ms, przy 20 wątkach średni czas 6ms :)
Gdy procesor się nudzi przyjmuje częstotliwość 800MHz na wszystkich rdzeniach i napięcie 1.150V.

Jeszcze jedna informacja: Oracle dobrze radzi sobie z wirtualizacją (albo inaczej: VMware dobrze sobie radzi z Oraclem).

piątek, stycznia 01, 2010

Z Grails-ów też można zrobić ESB

Uproszczona definicja ESB:

  • można podłączyć się do wszystkiego za pomocą wtyczek (grails install-plugin)
  • tą samą usługę możemy wystawić po wielu transportach (WebService: static expose=['cxf'])
  • usługi wewnętrznie wołane są po natywnym protokole szyny (Service.metoda)
  • mamy routing komunikatów (grails install-plugin camel).

Grailsy dodatkowo mają ładny webowy interfejs użytkownika i są tanie (OpenSource + Tomcat + Apache mod_proxy).


A co z szybkością? grails run-app: 29ms, grails prod run-app 25ms.

Na BEA JRockit(R) (build R27.6.5-32_o-121899-1.6.0_14-20091001-2107-windows-ia32, compiled mode) udaje się zejść do 16.5ms pod warunkiem jednej poprawki (Grailsy próbują używać metody, która nie została jeszcze skompilowana do kodu maszynowego - błąd w JVM):

Klasa org.codehaus.groovy.grails.cli.GrailsScriptRunner z grails-bootstrap-1.2.0.jar, metoda private int callPluginOrGrailsScript(String scriptName), workaround:

Project p = antBuilder.getAntProject();
try {
p.setDefaultInputStream(System.in);
}
catch (NoSuchMethodError e) {
try {
Field f = p.getClass().getDeclaredField("defaultInputStream");
f.setAccessible(true);
f.set(p, System.in);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
Przypominam, że właścicielem Grails-ów jest VMware.

Update 03.03.2010: mamy naprawione Grailsy na JRockit-cie. Niestety Oracle zamierza skasować JRockita jako produkt i przenieść GC firmy BEA do SUN JVM.