Impressions: Ibiza – pdb docks
View from the docks in pdb
Click to enlarge
Building complex queries in Key/Value ecosystems
In the last few years I have had to deal with complex systems and their issues like the C10K Problem, hard to scale infrastructures, asynchronous transaction handling in heterogeneous environments and above all else – Database performance issues. Simple solutions are available for most bottlenecks, but deciding how and where to place the state in an distributed environment can be really hard.
Google introduced Map Reduce, which offers a kind of standardization. The basic idea of divide and conquer (D&C) has existed for years, but there were no standardized APIs to execute higher level tasks. Google invented its own filesystem (GFS), in which data is stored in a distributed system and in memory for performance benefits. They also implemented an interface for the distributed storage called Bigtable which uses MapReduce for query entries. This is also built upon the Google File System.
Several groups of NoSQL Databases emerged. They followed the principle of Bigtable with eventually consistent and distributed storage. The concept behind an in-memory storage and distributed system is a trade-off between consistency and availability. The aim of this is to enforce strong consistence only where it’s required. Such Projects include Project Voldemort (Persistent), Hazelcast (Non-Persistent) and Scalaris (Non-Persistent).
When we have to work without SQL, a number of other problems arise; How do we build a search system? How do we execute complex queries? A big subset of the issues can be covered by merge-joins. I really recommend taking a look at: Building Scalable, Complex Apps on App Engine.
Formstabile Kontaktlinsen
Nachdem ich seid mehreren Jahren weiche Kontaktlinsen trage (zuletzt Bausch + Lomb PureVision Toric Hydrogel), beschloss ich auch formstabile Linsen auszuprobieren. Mit den B+L Linsen bin ich jahrelang zufrieden gewesen. Es gab lediglich einen Fall in dem eine defekte Linse dazu geführt hat, dass sich mein Auge entzündet hat (in einigen Jahren mit den Kontaktlinsen). Als Hersteller der form-stabilen Linsen meiner Wahl zeichnete sich Menicon heraus.
Hier eine kurze Zusammenfassung meiner Eindrücke:
- War die Anpassung der Kontaktlinsen schmerzhaft? Nein, lediglich unangenehm. Man könnte es mit einer neuen Uhr mit Metallarmband vergleichen. Es dauert einfach bis man sich daran gewöhnt hat.
- Merkt man eine fundamentale Differenz zu den weichen Linsen? Ja, sobald Staub oder Dreck ins Auge kommt. Sofort schmerzt das Auge stark und das Problem muss durch Heraus-tränen des Fremdkörpers oder durch entfernen und reinigen der Linse gelöst werden. Ansonsten wird das Auge bei extremen Tragezeiten nicht so stark gerötet wie mit verschiedensten weichen Linsen-typen.
- Und was bedeutet das für den Alltag? Zum einen achtet man aufgrund der hohen Kosten pro Linse stark darauf jede Öffnung im Bad zu verschließen sobald man mit den Linsen zu Werke ist. Während die weichen Linsen als Wegwurf-Produkt Akzeptanz gefunden haben und man sich bei genügend Vorrat keine Sorgen machen musste eine Linse zu verlieren. Zu wieder aller Gerüchte: Herausfallen tut die Linse nicht plötzlich.
- Wo bekomme ich die Linsen her? Die Linsen, Pflegemittel und Reiniger beziehe ich vom Augenarzt mit einem monatlichen Liefervertrag der ~33 € kostet. Darin waren auch Nachkontrollen und die Behälter / Starterpakete enthalten.
- Reisen machen keine Probleme? Doch, nahezu alle Pflegemittel sind in Gefäßen >100ml abgepackt. Für Vielflieger und Geschäftsreisende die oft nur mit Handgepäck unterwegs sind ist das natürlich nicht akzeptabel. Jedoch werden anfangs “Starterpakete” übergeben die kleine Flaschen unter 100ml haben die für über eine Woche ausreichend Lösung / Reiniger enthalten. Mit einer sterilen Spritze kann man Lösung entnehmen und diese Gefäße wieder-befüllen (Achtung, ich übernehme keine Verantwortung für eventuelle gesundheitliche Schäden). Die Starterpackete haben einen unverhältnismäßig hohen Preis wenn man für jede Reise ein neues anschafft, daher sehe ich von solch einer Lösung ab.
Falls ich noch einmal weiche Kontaktlinsen Tragen werde, schaue ich mir Menicon PremiO an. Das Konzept einer zwei Wochen Linse finde ich auch recht interessant, da sich bei den weichen Linsen mit der Zeit alles erdenkliche im Flüssigkeitsfilm absetzt.
Interessante Artikel und Informationen / Tipps:
- Proteinablagerungen
- Menicon Z Material
- Auf der Linse sind nach dem Abnehmen zwei Bläschen, ist das Normal? (Ja)
Reinigung / Lösung und Pflege:
Als Reiniger nutze ich i-clean (siehe 1. Proteinablagerungen) zur täglichen Säuberung. So weit ich weiß, ist es der Nachfolger von Miraflow. Dazu die gewöhnliche Menicon Lösung.
Mein Fazit: Es hat sich gelohnt. Ich werde auf Dauer bei form-stabilen Kontaktlinsen bleiben.
JEE Project Setup with Gradle, Spring and JAX-WS integration
What I’m going to cover in this sample implementation:
- JAX-WS 2.2 Standard conform implementation
- Spring 3.0.5 Integration due SpringBeanAutowiringSupport
- Generic JPA 2.0 DAO with Hibernate as persistence provider
- Gradle 1.x as Build tool
- MTOM Transport for medium-size attachments
- Generic SLF4J logging with jcl and jul to log4j
- JUnit Testing with Spring Integration
- Generic Class for Services due DRY principles
Download the example here.
Run the example using: gradle jettyRun on the console. You should see something like:
INFO - <In-Memory Content Repository started...>
INFO - <Product Service started...>
INFO - <Product Service WS-* Endpoint started...>
The sample contains a simple domain with a few objects (Category, Product and Item) where Item is an generic byte[] abstraction item to store contents in a JCR compliant repository like Apache Jackrabbit. In the example it’s just in a Memory table to store Binary attachments. The Repository can be changed by implementing Repository<byte[]> with custom functionality.
Test the sample using SoapUI:

Ensure that Enable MTOM and Force MTOM are enabled. If other transports are available, SoapUI only uses MTOM if the attachment exceeds a specified size. Enforce this transport model to test the webservice.
The services are deployed at the following URL: “http://localhost:8080/shoppingEngine/services/product” . Append “?wsdl” to read the WSDL (during “add project” in SoapUI).

