piątek, grudnia 30, 2011

Distinct w Tibco


Bo w BW nie ma obsługi XPath distinct-nodes. Opcja z Variable List:
$Map-Data/root/param[ not(contains(  concat('|', tib:concat-sequence-format(preceding::node(), '|', true()), '|'), concat('|',.,'|'))) ]

czwartek, grudnia 29, 2011

Dlaczego GUI na Androidzie nie działa płynnie?

Jeśli ktoś ma tablet z Androidem i do przeglądania Internetu używa Firefoksa to zapewne zauważył, że działanie aplikacji wcale nie jest płynne (także w kontekście obsługi zdarzeń generowanych przez ruchy palca po ekranie). Android operuje na buforze ramki karty graficznej, wątek do rysowania jest jeden. Podejście takie samo jak w Javie. Napiszmy zatem w Swingu program obrazujący problem: na panelu rysujemy pod kątem ostrym naprzemienne linie czerwone i czarne z włączonym antyalisingiem.


Okienko aplikacji pojawia się bardzo wolno, skalowanie okna stwarza problemy wydajnościowe, pod względem używalności GUI jest słabo. Jak to można naprawić? Trzeba wziąć pod uwagę, że jeżeli czas obsługi zdarzenia/rysowania jest znaczny w porównaniu do czasu generowania zdarzenia (ruchu palcem po ekranie), to może nam się nagromadzić kolejka zdarzeń do obsłużenia. W poprawnej obsłudze stanu aplikacji, część zdarzeń powinna być odrzucona, a obsłużone tylko ostatnie. Przy takim założeniu oprócz wątku obsługi zdarzeń, którego działanie powinno być natychmiastowe, potrzebujemy dodatkowego wątku, który będzie wykonywał pracę graficzną. Pojedynczy wątek podsystemu graficznego powinien być używany tylko do blokowego transferu gotowego obrazka do bufora ramki (BitBlt).


Mniej więcej takie założenia ma Apple Grand Central Dispatch i dzięki temu GUI na iOS śmiga*. Na Androidzie też się da, ale musi zadbać o to programista. Na urządzeniach przenośnych trzeba wypracowywać kompromis pomiędzy zużyciem pamięci (offscreen pixmaps) a responsywnością, jednak Firefox powinien brać pod uwagę, że tablet to trochę większe urządzenie i da się na nim osiągnąć lepsze user experience. Ciekawe jest podejście Google-a do przeglądarki: strona wyświetlana jest tylko, kiedy cała jest gotowa, a żeby zająć czymś użytkownika u góry przebiega ładna ale za wąska linia postępu. Bufor pozaekranowy oczywiście istnieje.


Ostatni obrazek pokazuje artefakty wynikające z odmalowywania na ekranie obrazka w trakcie rysowania - ale oszczędzamy na jednym buforze pozaekranowym.

O czym powinien jeszcze pamiętać programista na platformie ARM? O minimalizowaniu ilości rozgałęzień kodu. Spekulatywne wykonywanie zaczyna pojawiać się w tych procesorach, ale nie jest na tym samym wysokim poziomie jaki prezentuje Intel x86. Z drugiej strony wykonywanie kodu, które pójdzie w niebyt, niepotrzebnie marnuje energię.

* - nie zmienia to jednak faktu, że posiadanie iPhone-a przez szwagra jest mało męskie.

Ciekawostka: Java 1.8.0-ea-b18 po chwilowej zmianie rozmiaru okna na [0,0] wisi na:

----------- Thread[Thread-2,6,main]
sun.java2d.d3d.D3DRenderQueue.flushBuffer(Native Method)
sun.java2d.d3d.D3DRenderQueue.flushBuffer(D3DRenderQueue.java:152)
sun.java2d.d3d.D3DRenderQueue.flushAndInvokeNow(D3DRenderQueue.java:142)
sun.java2d.d3d.D3DSurfaceData$D3DDataBufferNative.getElem(D3DSurfaceData.java:448)
sun.awt.image.DataBufferNative.getElem(DataBufferNative.java:75)
java.awt.image.DataBuffer.getElem(DataBuffer.java:327)
java.awt.image.SinglePixelPackedSampleModel.getDataElements(SinglePixelPackedSampleModel.java:409)
java.awt.image.Raster.getDataElements(Raster.java:1469)
sun.java2d.loops.OpaqueCopyAnyToArgb.Blit(CustomComponent.java:144)
sun.java2d.loops.GraphicsPrimitive.convertFrom(GraphicsPrimitive.java:560)
sun.java2d.loops.GraphicsPrimitive.convertFrom(GraphicsPrimitive.java:541)
sun.java2d.loops.MaskBlit$General.MaskBlit(MaskBlit.java:189)
sun.java2d.loops.Blit$GeneralMaskBlit.Blit(Blit.java:204)
sun.java2d.pipe.DrawImage.blitSurfaceData(DrawImage.java:959)
sun.java2d.pipe.DrawImage.renderImageCopy(DrawImage.java:578)
sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:71)
sun.java2d.pipe.DrawImage.transformImage(DrawImage.java:1111)
sun.java2d.pipe.ValidatePipe.transformImage(ValidatePipe.java:238)
sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3214)

Z dokumentacji Androida:

Tips and Tricks
Switching to hardware accelerated 2D graphics can instantly increase performance, but you should still design your application to use the GPU effectively by following these recommendations:
Reduce the number of views in your application
The more views the system has to draw, the slower it will be. This applies to the software rendering pipeline as well. Reducing views is one of the easiest ways to optimize your UI.
Avoid overdraw
Do not draw too many layers on top of each other. Remove any views that are completely obscured by other opaque views on top of it. If you need to draw several layers blended on top of each other, consider merging them into a single layer. A good rule of thumb with current hardware is to not draw more than 2.5 times the number of pixels on screen per frame (transparent pixels in a bitmap count!).
Don't create render objects in draw methods
A common mistake is to create a new Paint or a new Path every time a rendering method is invoked. This forces the garbage collector to run more often and also bypasses caches and optimizations in the hardware pipeline.
Don't modify shapes too often
Complex shapes, paths, and circles for instance, are rendered using texture masks. Every time you create or modify a path, the hardware pipeline creates a new mask, which can be expensive.
Don't modify bitmaps too often
Every time you change the content of a bitmap, it is uploaded again as a GPU texture the next time you draw it.
Use alpha with care
When you make a view translucent using setAlpha()AlphaAnimation, or ObjectAnimator, it is rendered in an off-screen buffer which doubles the required fill-rate. When applying alpha on very large views, consider setting the view's layer type to LAYER_TYPE_HARDWARE.
Słabo, prawda?

środa, grudnia 28, 2011

Tinker, Tailor, Soldier, Spy

Gary Oldman potrafi genialnie kreować grane postacie. Smiley to facet, po którym w zasadzie nie widać uczuć i nie wiadomo, co tak naprawdę myśli. Po odejściu z pracy widać, że była ona dla niego ważna. Może stosuje podejście 'I don't care now', ale wraca. Wie jak rozmawiać z ludźmi, żeby osiągnąć cel. Wraca do pracy jako szef - z dyskretnym uśmiechem na ustach. Porządna brytyjska obsada: Collin Firth (King's Speech), John Hurt (V for Vendetta), Tom Hardy (Inception).

Tusk to najgorszy premier po 89 roku

Odwołanie Anny Streżyńskiej ze stanowiska prezesa UKE, żeby na jej miejsce wsadzić osobę z klucza partyjnego i móc ogłaszać sukcesy rządu, to jest bezczelność. Prezes UKE jest osobą, która zrobiła najwięcej dobrego dla polskich internautów. Nie jakiś tam Tusk z hasłem 'Internet w każdej gminie'. Internet powinien być cenowo dostępny - i taki jest dzięki wieloletniej profesjonalnej pracy Pani Prezes. Jeśli prezes rady ministrów ruguje profesjonalistów, a na ich miejsce wpycha ludzi z klucza, to marny z niego premier. Co do opinii, że Streżyńska za często zmienia zdanie i naraża operatorów na koszta - być może, ale dlatego, że jest osobą otwartą na dyskusje, a celem nadrzędnym jest dobro klienta, poza tym operatorzy wewnętrznie marnują dużo większe pieniądze, niż wydają na projekty regulacyjne. Być może przesadziłem z tytułem, ale się wkurzyłem. Z drugiej strony, jak się posłucha Staniszkis, to tytuł ma uzasadnienie.

wtorek, grudnia 27, 2011

Dzisiaj w Olimpie



wesoła nowina - Windows się zepsuł. Tanie chińskie AC97, których spora część producentów kradła sterowniki od Realteka zamiast opracować własne.

Listopadowe słońce


czwartek, grudnia 22, 2011

Tibco a złożone typy Oracle




W Oracle 11g można procedurę wystawić jako WebService. Jest jedno ale: wszystkie parametry top level muszą być typami prostymi lub obiektami (obiekt może zawierać pole typu rekord lub tablicę, tak więc prawie wszystkie rodzaje parametrów da się opakować w obiekt).



W wariancie z Javą nadal mamy kontrolę nad transakcyjnością w ramach procesu, w przypadku WebService-u musielibyśmy w procedurach opakowujących zaimplementować SAGA pattern, co niekoniecznie będzie wykonalne. Droga na skróty, czyli wkładanie składowalnych procedur Javy/JPublisher na typach prostych do nieswojego serwera bazodanowego, to zły pomysł - zemści się w utrzymaniu. Tibco od wersji 5.6 BW próbuje obsługiwać złożone typy Oracle, ale należy to traktować raczej jako 'technical preview'/work-in-progress.

wtorek, grudnia 13, 2011

nsswitch.conf w Windows


piątek, grudnia 09, 2011

Luther

Jenny:  You didn't really do that, did you?
Luther: Do what?
Jenny:  Like, call up some totally psycho killer girl.
Luther: Her name's Alice.

czwartek, grudnia 08, 2011

Oracle against Spring

Właścicielem Springa jest VMware - konkurencja w wirtualizacji i cloud computing.

poniedziałek, grudnia 05, 2011

TIBCO, IAIK, BIG-IP

11-letni (sic!) IAIK używany jako domyślny stos SSL w produktach Tibco (np. BusinessWorks) cache-uje sesje SSL i nie radzi sobie z tym, że długość życia sesji na urządzeniu F5 to domyślnie 1 godzina. Stale włączony komponent realizujący zabezpieczoną komunikację po protokole SOAP, przy niewygasającym ruchu, będzie z godzinną regularnością rzucał błędami. Żeby naprawić problem Tibco musi poprawić menedżera sesji: sslContext.setSessionManager(). Pewnie się naczekamy. Wnioski: należy używać ESB OpenSource a nie zamkniętych rozwiązań, w których samemu (albo zwinną firmą np. Touk) nic nie można poprawić.


Jak zasymulować F5? Spróbujmy Apache-em: odeśle stare zaakceptowane Session ID lub nowe.

httpd-ssl.conf:
SSLSessionCache "shmcb:c:/Users/user/Apache/ssl_scache(512000)"
SSLSessionCacheTimeout 30

javax.net.debug=all w implementacji Sun Microsystems:
%% Client cached [Session-2, TLS_DHE_RSA_WITH_AES_128_CBC_SHA]
%% Try resuming [Session-2, TLS_DHE_RSA_WITH_AES_128_CBC_SHA] from port 49499

Najnowszy IAIK też działa:
ssl_debug(8): Starting handshake (iSaSiLk 4.4 Evaluation Version)...
ssl_debug(8): Sending v3 client_hello message to localhost:443, requesting version 3.1...
ssl_debug(8): Trying to resume session CA:FE:BA:BE:00:01:02:03...

public class Lab {
private final static boolean useIAIK = true;
static {
System.setProperty("javax.net.debug", "all");
System.setProperty("javax.net.ssl.trustStore", "D://dev//ssl.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "secret");
System.setProperty("com.entrust.toolkit.ssl.trustroots.type", "JKS");
System.setProperty("com.entrust.toolkit.ssl.trustroots", "D://dev//ssl.jks");
System.setProperty("com.entrust.toolkit.trace", "FINEST");
Security.insertProviderAt(new Entrust(), 1);
}
    
public static void main(String[] args) throws Exception {
while (true) {
SSLClientContext ctx = new SSLClientContext();
ctx.setDebugStream(System.out);
ctx.setChainVerifier(null);
Socket s = useIAIK ? new SSLSocket(InetAddress.getByName("localhost"), 443, ctx) :
SSLSocketFactory.getDefault().createSocket(InetAddress.getByName("localhost"), 443);
s.setKeepAlive(true);
OutputStream os = s.getOutputStream();
os.write("GET / HTTP/1.1\r\n".getBytes());
os.write("Host: localhost\r\n".getBytes());
for (int i=0; i < 1; i++) {
os.write(("Header-"+i+": 0\r\n").getBytes());
os.flush();
Thread.sleep(1000);
}
os.write("\r\n".getBytes());
os.flush();
InputStream is = s.getInputStream();
int b = 0;
while ( (b=is.read())!=-1 )
System.out.print( (char)b );
is.close();
s.close();
Thread.sleep(40000);
}
}
}

niedziela, grudnia 04, 2011

Entropia

user@openindiana:~$ time dd if=/dev/random of=/dev/zero bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1,0 MB) copied, 56,3951 s, 18,6 kB/s

real 0m56.748s
user 0m0.009s
sys 0m56.382s
user@openindiana:~$ time dd if=/dev/urandom of=/dev/zero bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1,0 MB) copied, 0,0697105 s, 15,0 MB/s

real 0m0.079s
user 0m0.003s
sys 0m0.076s

czwartek, grudnia 01, 2011

Obiektywna ocena rzeczywistości

Żeby do bagażnika w Yarisie nie można było włożyć przedziurawionego koła, bo dojazdowe do 80km/h jest w rozmiarze 14 cali, a normalnej 15-tki na jego miejsce nie da się wcisnąć, to jest kurde skandal.

Żeby na parkingu dla pracowników niemieckiej firmy walały się gwoździe, to jest normalnie kurde skandal.

wtorek, listopada 29, 2011

Niekonwencjonalne metody działania Pana Boga

Adwent. Powinniśmy się skupić na fakcie, że Pan Bóg przychodzi. Współczesny za szybki tryb życia i nasze przyzwyczajenia nie za bardzo w tym pomagają. Czasem potrzebny jest jakiś silny bodziec z zewnątrz. Wczoraj miałem włam na chatę i zarąbali mi dwa laptopy. Za dużo pracowałem ostatnio, a teraz jestem wolny :) Zostawili nettopa, bo nie wiedzieli, że to komputer - w sam raz do włączenia Radia eR (o 19-tej jest msza z Archikatedry Św. Jana, nowy arcybiskup ma fajne katechezy) lub RDN Małopolska oraz poczytania MateuszaOpoki, czy Bartosika, ale nie za długo.

wtorek, listopada 22, 2011

Chmura na kryzys

Producenci drogiego pudełkowego oprogramowania powinni przy drugiej fali kryzysu zauważyć następującą rzecz: klientowi zaciskającemu pasa nie będą w stanie sprzedawać swoich produktów tak jak do tej pory. Poza tym klient będzie uciekał od modelu licencyjnego per CPU w wirtualizację (drastyczny przypadek: w VMWare ESXi 5 można stworzyć maszynę z 1 podstawką procesora i 16. rdzeniami - i zainstalować na niej Windows Server Standard Edition). Jedyną szansą na sprzedaż może być subskrypcja w modelu Software-as-a-Service. Przy atrakcyjnych cenach dostosowanych do wielkości użycia oprogramowania można też powalczyć o mniejszych klientów. Trzeba myśleć jak Warren Buffet - widzieć zagrożenia ale też i szanse. I być zwinnym.

Ile kosztuje miesięcznie 30 komponentów Tibco w ramach Silver public (5 centów za 1h)? 3 600 zł + opłaty za Amazon EC2 (podobne koszty).

niedziela, listopada 20, 2011

BW WS crash test

Tworzymy jeden WebService z operacjami 'a', 'b', 'c'. Operacja 'a' woła na tym samym komponencie dwa razy pod rząd operację 'b', operacja 'b' 4 razy operację 'c'. Operacja 'c' na wyjściu zwraca wejście. Teraz z SOAPUI 20 wątkami przez 60 sekund wywołujemy operację 'a' (z jednego zewnętrznego requestu robi się 10 wewnętrznych). Poniżej przepisana kontrolka SOAP Request Reply wykorzystująca JBoss Netty, wytrzymuje większą liczbę równoległych wywołań.



MaxJobs.x.serviceagent=250
FlowLimit.x.serviceagent=250
ActivationLimit.x.serviceagent=true
EnableOnStartup.x.serviceagent=true
bw.plugin.http.server.maxProcessors=250
bw.plugin.http.server.acceptCount=250
bw.plugin.http.server.httpcomponents.workerThread=40

25 transakcji na sekundę w SOAPUI oznacza 250 wywołań wewnątrz BW. Na dwurdzeniowym energooszczędnym Intelu SU4100 1,3GHz 10W TDP na Windows 7 można dojść z Netty do 35tps.

Po włączeniu persystentnych połączeń BW jest w stanie przy 20 wątkach w SOAPUI dostarczyć 45tps. Limit jest ściśle związany z liczbą równoległych połączeń na wejściu i wątków ResponseThreadPool.

bw.plugin.http.client.usePersistentConnectionManager=true
bw.plugin.http.client.usePersistentConnectionManagerForSSL=true (BW 5.12+)
bw.plugin.http.client.checkForStaleConnections=false
bw.plugin.http.client.maxConnectionsPerHost=500
bw.plugin.http.client.maxTotalConnections=500
bw.plugin.http.client.ResponseThreadPool=40
bw.plugin.http.client.ResponseThreadPool.type=single

piątek, listopada 18, 2011

Tibco BW JDBC Memory Leak

Jeśli PreparedStatement typu SELECT w BW nie zawiera parametrów [statement.indexOf('?')!=-1] to nie jest cache-owany (ale nie jest też zamykany, cała nadzieja w GC). W przeciwnym przypadku JDBCPoolManager trzyma pulę obiektów JDBCConnectionEntry, które to trzymają rosnący (per każdy nowy proces) wektor otwartych PreparedStatement-ów. Błędu wycieku cache-owanych zapytań nie mają aktywności UPDATE i SQL DIRECT. Zwalnianie zasobów odbywa się na zasadzie zamykania nieużywanych przez ostatnie 300 sekund połączeń JDBC.

czwartek, listopada 17, 2011

poniedziałek, listopada 14, 2011

Linux power drain solved

Phoronix should be happy.

niedziela, listopada 13, 2011

Luther

Facet, który ma pod górkę. Jego zachowania balansują na granicy autodestrukcji. Popełnia błędy, gwałtownie reaguje, ale w ogólnym rozrachunku jest skuteczny. Ma dziwne relacje z inteligentną neurotyczną morderczynią. Serial trzyma w napięciu... i nie jest amerykański. Zrobiło go BBC! W niedzielę po 20-tej w Ale Kino.

Muzyka na wejście to Massive Attack 'Paradise Circus'. A w House-ie 'Teardrop'.

EMS: korelacja komunikatów po stronie klienta, crash testy

Korelacja komunikatów po stronie klienta, to sprytny sposób na obejście problemu wydajnościowego z GetQueueMessage (za każdym razem nowa sesja i nowy konsument z selektorem), ale:
rozwiązanie jest wrażliwe na odkładanie się dużej ilości komunikatów na kolejce (trzeba "przejrzeć" wszystkie, żeby sparować kilka); komunikaty mogą ginąć - utykać w pobraniu wstępnym sesji (prefetch != none) - wtedy widzimy objawy timeout-ów w komunikacji request-response.

piątek, listopada 11, 2011

Vaadin - jeszcze szybszy sposób na raport




Framework pozwala na bardzo szybki dewelopment. No i używa go Tomek - a to jest poważny argument za :)

BIRT - szybki sposób na raport


środa, listopada 09, 2011

Fenomen Internetu jest czasami porażający

poniedziałek, listopada 07, 2011

Tusk chce odstrzelić Schetynę

Za wp.pl: 'Z nieoficjalnych informacji "Wiadomości" wynika, że Schetyna miałby zostać w nowym rządzie ministrem transportu. Schetyna - twierdzą "Wiadomości" właśnie podczas spotkania z premierem usłyszał taką propozycję'.
Nie byłoby kwiatów po wotum nieufności.

5 x Dlaczego?

Kadra zarządzająca bez odpowiednich kwalifikacji, w tym etycznych; "pływanie" w korporacji; brak obiektywnych audytów; fałszywe raportowanie sukcesów i zamiatanie problemów pod dywan; brak wizji, długoterminowej i dostosowywanej na bieżąco strategii, chaos i degradacja.

niedziela, listopada 06, 2011

JMS Wrapper

Koncepcja ta w Weblogicu stosowana jest od dawna i ma na celu zapewnić większą niezawodność oraz wydajność. Do czego przydałby się JMS Wrapper w Tibco BusinessWorks? Do transparentnego przywracania połączenia JMS i ukrywania wyjątków związanych z wadliwym połączeniem, do obsługi konfiguracji serwerów primary-secondary (w szczególności odbierania odpowiedzi z dwóch sewerów przez jeden logiczny MessageConsumer, kiedy wcześniej nastąpiła awaria serwera primary i przełączenie na secondary), do trzymania w pamięci podręcznej obiektów, których stworzenie jest czasochłonne (nowa sesja i nowy receiver z selektorem w przypadku komunikacji request-response; umieszczenie w cache-u sesji i zmodyfikowanego receivera powinno dramatycznie zmniejszyć obciążenie serwera przy dużych wolumenach komunikatów), do wymuszania SLA przy próbie wysyłania nadmiernej ilości danych do serwera JMS.

środa, listopada 02, 2011

GUI do Solaris Cluster

/usr/sbin/cacaoadm enable; /usr/sbin/smcwebserver enable

SUNW.Proxy_SMF_failover to zasób bazujący na serwisie SMF!

Straciłem zaufanie do Solaris Cluster

root@sx:/builds/ohac/usr/src# /usr/gnu/bin/grep -c -r XXX * | grep -v ":0"
cmd/scshutdown/scshutdown.c:1
cmd/mdm/rpc.metacld/common/mdc_init.c:2
cmd/dcs/run_reserve.ksh:1
cmd/dcs/scvxvmck.cc:2
cmd/dcs/reserve.cc:5
cmd/dcs/scsi.cc:2
cmd/dcs/scgdevs.c:2
cmd/scqsd/QuorumServer.cc:1
cmd/ha-services/hafoip/hafoip_start.c:1
cmd/ha-services/hafoip/hafoip_prenet_start.c:1
cmd/ha-services/hafoip/hafoip_stop.c:1
cmd/ha-services/haevent/event.c:1
cmd/ha-services/hastorageplus/hastorageplus_common.c:1
cmd/ha-services/hascip/hascip_init.c:1
cmd/rpc.scxcfg/scxcfgd_svc.c:2
cmd/rpc.scxcfg/scxcfgd_ccr.cc:1
cmd/scconf/scconf.c:1
cmd/cl_apid/cl_apid_main.cc:1
cmd/cl_apid/caapi_event.cc:1
cmd/cl_apid/caapi_mapping.cc:3
cmd/cl_apid/caapi_reg_cache.cc:4
cmd/cl_apid/caapi_event.h:1
cmd/cl_apid/caapi_mapping.h:1
cmd/cl_apid/client_reg_info.cc:2
cmd/ssm_wrapper/ssm_ipmp.c:1
cmd/ssm_wrapper/ssm_call.c:5
cmd/ssm_wrapper/ssm_net.c:2
cmd/ssm_wrapper/ssm_ipmp_callback.c:1
cmd/cmm/pmmd/pmmd_impl.cc:10
cmd/cmm/pmmd_adm/pmmd_adm.cc:3
cmd/cl_eventd/cl_eventd.cc:3
cmd/pxfs/clexecd.cc:4
cmd/replctl/replctl_main.cc:1
cmd/did/didadm.c:3
cmd/rpc.clquery/clquery_device.c:3
cmd/rpc.clquery/rpc_queue.c:8
cmd/rpc.clquery/rpc_manager.c:2
cmd/rpc.clquery/clquery_network.c:3
cmd/rpc.clquery/clquery_main.c:3
common/cl/repl/repl_mgr/rm_repl_service.cc:13
common/cl/repl/repl_mgr/rm_state_mach.cc:8
common/cl/repl/repl_mgr/cb_coord_control_impl.cc:4
common/cl/repl/repl_mgr/repl_mgr_impl.cc:4
common/cl/repl/repl_mgr/dependency_mgr_impl.cc:1
common/cl/repl/repl_mgr/service_admin_impl.cc:1
common/cl/repl/repl_mgr/dependency_mgr_impl.h:1
common/cl/repl/rmm/rmm.cc:3
common/cl/repl/service/replica_handler.cc:4
common/cl/repl/service/repl_service.h:2
common/cl/repl/service/multi_ckpt_handler.cc:1
common/cl/repl/service/repl_service.cc:3
common/cl/libuos/uos_misc.cc:1
common/cl/libuos/cladm_impl.cc:9
common/cl/clprivnet/clprivnet.h:3
common/cl/cmm/membership_engine_impl.cc:33
common/cl/cmm/automaton_impl.cc:4
common/cl/cmm/cmm_comm_impl.cc:1
common/cl/cmm/callback_registry_impl.cc:1
common/cl/cmm/ucmm_comm_impl.cc:22
common/cl/cmm/membership_manager_impl.cc:52
common/cl/cmm/ff_impl.cc:8
common/cl/cmm/cmm_impl.cc:1
common/cl/cmm/ucmm_api.h:1
common/cl/cmm/ucmm_impl.cc:8
common/cl/pxfs/lib/pxfs_misc.cc:1
common/cl/pxfs/client/pxspecial.cc:3
common/cl/pxfs/client/pxvfs.cc:12
common/cl/pxfs/mount/mount_server_impl.cc:13
common/cl/pxfs/mount/mount_client_impl.cc:21

Podobnie można zrobić dla " bug " i " workaround ", można jeszcze poczytać:

// XXX Pass by reference of cast value doesn't work with SC5.2
// XXX Need to file a bug, in the mean time we can work around
// XXX it by passing in the proper type and cast it back.

Sterowniki klastra będące modułami jądra Solaris pisane są w C i C++. Dodatkowo kod kompilowany jest w trybie debug, a wynikowe obiekty podlegają zmianom strukturalnym. Część funkcji dla klastra jest już w jądrze Solarisa, a moduły je przykrywają. Po przejściu problemu w cl_boostrap z inicjalizacją w nv151  pojawiają się dalsze awarie wynikające z tego, że Sun Cluster został skompilowany innym kompilatorem (z innymi CFLAGS) niż system. Mamy w jądrze kod i ABI strasznie wrażliwe na zmiany kompilatora. Klaster dodatkowo grzebie w 3-ciej warstwie modelu OSI i może nie być kompatybilny ze wszystkimi sterownikami kart sieciowych.

CTF is generated from stabs, and stabs are only generated in debug mode (-g). Unfortunately debug mode has side-effects:
- It disables the inline generation of functions and this can have a major  impact on performance. The C++ compiler provides the option -g0 that provides the same feature as  the -g option but does not disable inlining.
- It enables variable globalization which means that static local variables  will be defined as global instead of local and will have their names made unique by prepending a file specific global prefix. This increases the size of binaries and can break mdb debugging modules which are using some static  symbol defined in Sun Cluster.
The Sun Studio 10 and 11 C++ compilers have no option to disable  globalization. RFE 6289358 is opened get this option. While this option is  not available, globalization can be disabled by using the -G option of the ctfconvert binary.
- On sparc, it disables tail-call optimization so this creates less optimized  code and this can impact performance. The C++ compiler provides the option -Qoption cg -Qiselect-T1 to re-enable tail-call optimization.
The debug mode has no other known side-effects. Some other optimizations which may have been disabled will be re-enabled by the -xO3 optimization level.

poniedziałek, października 31, 2011

Statyczny adres IP w Solaris 11 Express


niedziela, października 30, 2011

Fighting with Solaris Cluster on OpenIndiana







Also replace every 'typeset -r' with 'typeset'.



Serial console ttya can be useful. There are just 2 variables inside cl_bootstrap module. Integer clconf_initialized can be set to 1 via /etc/system (set cl_bootstrap:clconf_initialized). The more important for us mynodeid is short and we cannot touch it. So we are stuck. This kernel panic is triggered by a compatibility bug between OpenIndiana and Solaris Cluster. Ugly solution: binary patch cl_bootstrap module: replace PUSH and JMP with NOOP+NOOP and leak file handle for /etc/cluster/nodeid.

On Solaris 10 kobj_open_file() is defined with return type int (32-bit), on newer OpenSolaris/OpenIndiana with struct *_buf (64-bit address), so casting from 64-bit pointer truncates its correct value and then release with kobj_close_file() operates on wrong value and we see bad free.

piątek, października 28, 2011

Oracle Day 2011

Sponsorem konferencji był Intel, miał też swoją prezentację, w której pokazywał innowacyjność firmy, ukierunkowanie na przyszłość, wsłuchiwanie się i przewidywanie potrzeb klientów oraz synergię z korporacją Oracle. Był to bardzo ważny sygnał: x86 mówimy tak! Tej architekurze można ufać i stawiamy na nią długoterminowo. Exadata, Exalogic, Exalytics - wszystkie te rozwiązania używają procesorów Intel Xeon. Dla sceptyków jest SuperCluster na T4. Oracle 11g na Exadata może być 20-50x szybszy: kontrolery dysków używają podtrzymywanego bateryjnie cache-u na pamięciach DDR3, zapis do cache-u powoduje powrót z operacji I/O; logi bazy są przetrzymywane na dedykowanych, jeszcze szybszych niż standardowe, dyskach SSD; dane są kompresowane - kompresja i dekompresja na wydajnym procesorze przy mniejszej liczbie odczytanych/zapisanych bloków storage-u daje mierzalne przyśpieszenie (patrz: testy btrfs w serwisie Phoronix); wreszcie baza wie jak mapują się kolumny na bloki na dysku i dzięki temu czyta tylko to, czego potrzebuje zapytanie SQL użytkownika, a nie leci sekwencyjnie po całych rekordach. Zwróćcie uwagę na literkę 'c' w Oracle Enterprise Manager 12c - to nawiązanie do chmury (co ciekawe EM ma w interfejsie webowym integrację z Metalinkiem). Na potężnych maszynach (w jednej szafie po kilkanaście albo więcej serwerów) można faktycznie stawiać rozwiązania Infrastructure/Platform-As-A-Service. Oracle jest firmą totalną. Teraz widać jak na dłoni jak przemyślane i strategiczne było przejęcie Sun Microsystems: Oracle może zaoferować klientom gotowe rozwiązanie, które wstawia się tylko do serwerowni dostając gotową bazę danych i serwer aplikacyjny.
Big Data - Oracle dostrzegł potencjał NoSQL. BerkeleyDB to teraz Oracle NoSQL Enterprise do gromadzenia danych surowych, które mają być dalej przefiltrowane przez Oracle Hadoop lub obrobione przez Oracle R (wersja środowiska R dostosowana do współpracy z Exadata/Exalytics).
Gwiazdami konferencji byli: Michał Kostrzewa (ma dobre założenie, że audytorium to IT, kadra zarządzająca i biznes), Marek Martofel (profesjonalny, doświadczony, techniczny), Marcin Kozak (prawdziwy ewangelista, działkę Sun DSEE zamienił na bezpieczeństwo) oraz Jurek Owsiak (20 lat WOŚP i Oracle-a). Brakowało mi Waldka Kota (BEA). Grzegorz Świątek z PW EE zadał ciekawe pytanie: czy skoro na Oracle Solaris i Oracle Unbreakable Linux mamy tak samo nazywający się Oracle VM 3.0, to czy w przyszłości platformy te będzie można łączyć. Pytanie jednak pozostało bez odpowiedzi, a było bardzo uzasadnione w kontekście newsów o portowaniu ZFS-a i DTrace na Linuksa.
Wiceprezes Oracle Application Product Marketing Folia Grace (której amerykańskiego angielskiego słuchało się z przyjemnością, po przedmówcy Francuzie) zwróciła uwagę na istotny trend: za moment proporcje rynków established/emerging będą 50/50. Duże korporacje muszą zmieniać strategię i orientować się także na małych klientów.
Konferencja dla niektórych wymagała poświęceń - na jej rzecz z firmowego wyjazdu integracyjnego zrezygnowali koledzy z działek Unix, Capacity i BSCS. Ja jestem aspołecznym typem i integruję się tylko w ramach EAI :)

czwartek, października 27, 2011

Cięcia etatów w polskim Microsofcie?

Oszczędzają na tłumaczu portalu wsparcia technicznego. Ale obciach.

niedziela, października 23, 2011

Wzór na priorytet projektu

p = 0,3 x 'czy jest ważny' + 0,3 x 'czy długo czeka' + 0,3 x 'czy niewielkim nakładem pracy można go skończyć' + 0,1 x 'czy PM-ka jest fajna'

Tibco BW bez deploymentu

Co jest potrzebne do uruchomienia projektu BW wyjętego z SVN-a? Kopia bwengine.tra z dodanymi trzema linijkami (tibco.repourl, Hawk.Enabled, name) i zmodyfikowaną jedną (tibco.env.APP_ARGS=-p plik.tra):

KISS HA




Dlaczego wyszukiwarka Google nie pada tak jak od czasu do czasu chmury? Bo zamiast klastra używają grida. Po co stawiać na active/standby skoro można mieć bardziej niezawodne active/active, do tego taniej. Google polega na dużej liczbie redundantnych i z założenia zawodnych węzłów (wewnętrznie używają nawet patcha pozwalającego na działanie sprzętu na częściowo uszkodzonych pamięciach RAM).

Wróćmy jednak do obrazków i frameworka Solaris SMF, służącego do zarządzania usługami. SMF jest w stanie zapewnić, że proces zdefiniowany w usłudze w przypadku awarii zostanie wznowiony. SMF obsługuje zależności między usługami. W przypadku lokalnego klastra Tibco możemy zdefiniować wirtualne usługi typu baseline-domain, od których będą zależeć konkretne adaptery i brokery. Wtedy wyłączenie lub włączenie domeny będzie włączać lub wyłączać całą grupę komponentów danej domeny.

Do zastosowań active/active wcale nie jest potrzebny Veritas Cluster ani Sun Cluster, SMF z powodzeniem daje radę.

sobota, października 22, 2011

Partycjonowanie w VMware ESXi

~ # partedUtil "getptbl" /vmfs/devices/disks/mpx.vmhba32\:C0\:T0\:L
gpt
19457 255 63 312581808
1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0
8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
2 1843200 312580095 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0

~ # partedUtil setptbl /vmfs/devices/disks/mpx.vmhba32\:C0\:T0\:L0 gpt "1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B 0" "5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 0" "6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 0" "7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 0" "8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 0" "2 2097152 310378496 AA31E02A400F11DB9590000C2911D1B8 0"
gpt
0 0 0 0
1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B 0
5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 0
6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 0
7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 0
8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 0
2 2097152 310378496 AA31E02A400F11DB9590000C2911D1B8 0

piątek, października 21, 2011

Wypolerowane Unity (w Ubuntu 11.10)



Canonical zatrudnia niezłych specjalistów od HCI. Dobrze wybrnęli z ikonką power+settings (prawy górny róg, poprzedni kolorowy komputer to było semantyczne nadużycie). Mignięcie jasnego flesza przy robieniu zrzutu ekranu jest miłe. Pozostał jeden problem: sterowniki do kart graficznych; na kartach ATI nadal można obserwować nieoczekiwane artefakty. Przy obecnym trendzie dużej rodzielczości na małym ekranie (1600x900 przy 14'', co daje zazwyczaj niezdrowe dla oczu DPI powyżej 100) Ubuntu ma większy rozmiar czcionek niż Windows 7/8 i umie je ładnie skalować, co jest dużym plusem. Nie trzeba używać  ClearType Tunera, żeby uzyskać prawie krystalicznie czysty rendering czcionek.

Wielkość przekątnej ekranu w pikselach dzielona przez wartość w calach daje DPI ekranu. Wartość 130 pod Windows powoduje, że trzymamy nos przy samym ekranie. W przypadku tabletów (150 DPI) nie jest to problem, ale dla laptopa już tak - co można zauważyć patrząc na sylwetkę użytkownika.

sobota, października 15, 2011

The American Dream

Firma, która z sukcesem stworzyła Uniksa na Big Iron. Marzeniem młodych inżynierów było pracować w Sun-ie. Zone-y, ZFS, DTrace były innowacyjnymi pomysłami. OpenSolaris i OpenJDK były wydarzeniami, które odbiły się szerokim echem w branży IT. Sun w dużym stopniu wspierał środowisko Gnome (poprzez Java Desktop System). Ludzie z tej firmy jako pierwsi z branży zaczęli prowadzić blogi. Sun był otwarty. Dali społeczności darmowy serwer aplikacyjny i darmowe ESB. Od czego zaczęła się rewolucja 3D (Compiz) na linuksowym desktopie? Od projektu Sun Looking Glass.



Oracle drastycznie zmienił kierunek, z czym wielu pracowników fioletowej korporacji nie mogło się pogodzić. Odeszło wielu wartościowych ludzi, którzy stworzyli potęgę techniczną Sun Microsystems. Jak bez nich będzie rozwijał się komercyjny i zamknięty Solaris? Architekt infrastruktury, podejmując w tym momencie strategiczne i długoterminowe decyzje, widząc duże przyśpieszenie RedHata (patrz Cluster Suite, High Availability Add-On), ma poważne wątpliwości którą opcję wybrać.
Obecnie dewelopmentem Javy kieruje Henrik Stahl (BEA JRockit). Co do koncepcji, to dobrze, ale co do jakości wydań to Java 7.0 ze słynnym już Segmentation Fault ma jakość niektórych wersji JRockita...

Volkswagen Polo sedan



Vento na rynki rozwijające się przyłapane w Warszawie na trasie na Terespol. Auto miało premierę w 2010 roku w Indiach. Na Ukrainie sprzedawane jest od tego roku jako Polo sedan.

Kupujący nową Jettę zamawiają wersję bez oznaczeń i mówią sąsiadom, że mają Passata...

wtorek, października 11, 2011

SPARC z x86 nie ma szans

Za wskaźnik wydajności przyjmujemy benchmark XML xalancbmk (reprezentatywny dla ESB):

8 wątków SPARC (IV+ 2.1GHz/2): 81.5 = base
128 wątków SPARC (T2 1.45GHz/16):  154 = 1.9x base
128 wątków SPARC (T3 1.65GHz/16): 157 = 1.9x base
256 wątków SPARC (T3 1.65GHz/32): 313 = 3.8x base
512 wątków SPARC (T3 1.65GHz/64): 607 = 7.5x base
24 wątki Intel (Xeon 2.53GHz/12): 299 = 3.7x base
24 wątki Intel (Xeon 3.06GHz/12): 357 = 4.4x base
80 wątków Intel (Xeon 2.4GHz/40) : 1020 = 12.5x base

Wszystkie procesory SPARC za wyjątkiem najnowszego T4 nie mają spekulatywnego wykonywania kodu (out of order execution). Przy OOE procesor czekając na sprowadzenie komórki pamięci do rejestru wykonuje następny kawałek kodu lub dwa kawałki (if-else) - daje to spory przyrost wydajności eliminując puste cykle. T4 z częstotliwością 3GHz będzie sporo lepszy od poprzedników, ale i tak będzie droższy i mniej wydajny od Intela. T3 per core ma podobną ilość pamięci cache L2 co Intel (384/256KB), ale Intel ma 30MB cache L3 per socket.

Twierdzenie, że w SPARC-ach jest lepsza diagnostyka i zarządzanie sprzętem niż w x86 nie jest do końca prawdziwe - Intel ma AMT (hmm, chyba wcześniej widzieli OpenBoot PROM u konkurencji).

Intel Westmere-EP z szybkim zegarem i Westmere-EX są dostępne od wiosny tego roku.

sobota, października 08, 2011

VMware i Android


Jako system gościa instalujemy Windows (z włączonym zdalnym pulpitem RDP), a na nim VMware viclient. Dla RDP zestawiamy tunel. Na Androidzie instalujemy PocketCloud.


czwartek, października 06, 2011

Sorry chłopaki, nie mogłem się powstrzymać

niedziela, października 02, 2011

SUSE 12.1 na poważnie z Btrfs

Nowy Gnome 3.0 jest mniej ergonomiczny niż ten dostosowywany przez SUSE od kilku wersji skończywszy na 11.4. Jedno trzeba przyznać: tyle wersji a grafik nadal daje radę tworzyć na najwyższym poziomie i nie kończą mu się pomysły.

sobota, października 01, 2011

VMWare ESXi 5.0 i ATI SB600 AHCI

Standardowo dyski AHCI są niewidoczne, bo kontroler nie jest na liście wspieranego sprzętu. Workaround: montujemy pierwszą partycję FAT16, mv sata-ahc.v00 sata-ahc.tgz, gunzip sata-ahc.tgz, mcedit sata-ahc: zamieniamy "pci,id=1002:4390" na "pci,id=1002:4380", gzip sata-ahc, mv sata-ahc.gz sata-ahc.v00. Reboot.

piątek, września 30, 2011

Pomidorowa Jest Najsmaczniejsza

wtorek, września 27, 2011

Ksiądz Sowa redaguje serwis wyborczy

'Duchowni w ogóle nie powinni pisywać do "Gazety Wyborczej" - medium występującego przeciw wartościom chrześcijańskim' - ks. Tadeusz Isakowicz-Zaleski