Archive

Archive for December, 2011

Ankündigung: Anstehendes Ende dieses Blogs…

30/12/2011 2 comments

Tja Leute. Ich habe heute mein Horoskop gelesen, und die Sterne lügen nicht.

Das große Postillon Horoskop für 2012

Leider bin ich vom Sternzeichen Löwe, das heißt… naja… ihr könnts ja nachlesen…

War auf jeden Fall schön diesen Blog zu schreiben. Aber vielleicht geht’s ja weiter. Eventuell gibt’s da oben (oder unten, wir werden sehen) ja auch mittlerweile Internetanschluss. Falls ja werde ich euch natürlich berichten was euch irgendwann mal dort erwarten wird. Falls es keinen Internetanschluss gibt…. Macht’s gut, und danke fürs lesen…

Euer Matze

Advertisements
Categories: Miscellaneous

Tools: Mozilla Aurora 11

28/12/2011 2 comments

Mozilla hat mit dem Aurora 11 eine, meiner Meinung nach, sehr schöne Version herausgebracht. Ich bin bisher noch nicht dazu gekommen ihn komplett zu testen, aber eine Funktion ist mir direkt ins Auge gefallen. Im Paket der Web-Developer Tools gibt es im Untersuchen-Werkzeug eine 3D-Funktion. Damit kann man sich seine Seite in 3D anschauen. Alle Elemente werden als Box gestapelt angezeigt. Dadurch kann man sehr intuitiv und einfach bestimmte Konstrukte und Elemente genauer anschauen, ohne sich durch Code durchwühlen zu müssen oder zu hoffen dass man mit der Maus das richtige Element erwischt, was besonders bei stark geschachtelten Konstrukten schwierig und zeitaufwändig sein kann. Natürlich beinhaltet das Paket nicht alle Funktionen die man mit dem Firebug oder den Web Development Tools (das Plugin) hat, aber als Ergänzung definitiv zu empfehlen.

Hier ein Screenshot als erster Eindruck von der Funktion:

Allgemein kann ich diese Version bisher sehr empfehlen, alle Plugins welche ich, privat oder auf der Arbeit, verwende, funktionieren problemlos in der neuen Version. Auch fällt die allgemeine Performance positiv auf. Das ist natürlich nur mein rein subjektiver Eindruck.

Bekommen kann man die Version hier.

Categories: Tools Tags: , , , , ,

XSnippet: ViewEntries ohne repeat-control in XPage durchloopen

20/12/2011 3 comments

Hallo,

ich hatte heute ein kleines Problem. Die Lösung habe ich als XSnippet veröffentlicht und werde ich hier etwas genauer erklären:

Problem war das folgende:

Ich hatte ein kleines Modul, welches die Bilder von diversen Mitgliedern einer Community anzeigen sollte. Das ganze sollte auch immer zufällig passieren, also dass ich an jeder Position immer andere Mitglieder sehen würde. Leider war es aufgrund der Struktur und des Aufbaus des Moduls nicht möglich ein repeat-control zu verwenden. Daher folgender Lösungsansatz:

Speichere einen Iterator im Hintergrund und greife an jeder benötigten Stelle mit iterator.next() darauf zu.

Ich habe das mal ausprobiert, und siehe da, es funktioniert und ist performanter als gedacht.

Im DataContext der XPage (so etwas wie eine lokale Variable einer XPage, auf welche ich einfach per SSJS zugreifen kann) compute ich meinen Iterator, so zum Beispiel:

var tempTreeMap:java.util.TreeMap = new java.util.TreeMap();
var tempColl:NotesViewEntryCollection = allActiveUsers.getAllEntries();
var tempEntry:NotesViewEntry = tempColl.getFirstEntry();
var tempCollection:java.util.Collection = null;

while (tempEntry != null) {
tempTreeMap.put(@Unique(), tempEntry.getDocument());
tempEntry = tempColl.getNextEntry(tempEntry);
}

tempCollection = tempTreeMap.values();
return tempCollection.iterator();

Somit liegt schonmal ein Iterator im Hintergrund. Nun kann ich in jedem verwendeten image-control mit iterator.next() darauf zugreifen und mir das Dokument holen, welches in der dazugehörigen TreeMap liegt um mir die URL des Bildes zu berechnen.

Natürlich muss abgefangen werden ob es noch ein nächtes Element im Iterator gibt auf welches ich zugreifen möchte, um diese kleinen hässlichen Null-Pointer Exceptions zu vermeiden.

Hier das Snippet:
XSnippets

Stolperfalle: view.getEntryCount()

16/12/2011 1 comment

Mal wieder eine kleine Stolperfalle.

Situation war folgende: In einer Anwendung gibt es so etwas wie eine Community, jeder kann Fragen einstellen, diese können kommentiert werden usw. Das ganze soll in verschiedenen Gruppen ablaufen. Nun kann man sich entscheiden ob man die Frage öffentlich (für alle Gruppen sichtbar) oder privat (nur für meine Gruppe sichtbar) einstellen will.

Dazu musste es eine Ansicht geben, wo ich hin und her schalten kann, welche Kategorie ich sehen will.

Dazu habe ich den Viewnamen meiner Datasource berechnen lassen, je nach URL-Parameter um entsprechend die View mit den öffentlichen Dokumenten oder die mit den privaten Dokumenten abzufragen.

Auch musste innerhalb meines Codes abgefragt werden ob sich ein Dokument in der View befindet was angezeigt werden kann, um hässliche Null-Pointer Exceptions zu vermeiden.
Die Lösung dafür war denkbar einfach: myView.getEntryCount()

Damit habe ich abgefragt ob die Anzahl der Einträge 0 ist oder nicht und habe entsprechend die jeweiligen Blöcke angezeigt.

Nun habe ich mir noch jemanden zu testen  , der leider eine Null-Pointer Exception an dieser Stelle bekommen hat. Mit ein paar Printouts fiel uns auf, dass getEntryCount() bei ihm nicht 0 zurückgibt, obwohl es das hätte tun müssen.

Lange Rede kurzer Sinn: getEntryCount() ignoriert sämtliche Lese- und Autorenfelder. Bzw. wird der Befehl wahrscheinlich mit den Rechten des Servers ausgeführt, welcher die Dokumente scheinbar sehen darf.

Die bessere Lösung ist es myView.getFirstDocument() == null abzufragen. Dort bekommt man nur die Dokumente auf die man zugreifen darf.

Stolperfalle: Recycling

Gestern hatte ich mal wieder eine schönes “Feature” gefunden.

Aufgefallen ist dass eine XPage mit einer Null-Pointer Exception abgestürzt ist. Scheinbar war eine View-Datasource, dessen erstes Dokument ich mir holen wollte, nicht vorhanden.

Einige print-outs ergaben dass der Code mehrmals durchlaufen wird, was bei XPages, welche Editable Areas (Callbacks) benutzen, häufiger zu beobachten ist. Allerdings war die View bei Durchlauf 1 bis 3 noch vorhanden, beim 4. Durchlauf hatte es dann geknallt.

Nach vielen Hin und Her testen stand dann die Ursache fest. Ich hatte in einem Custom Control etwas eingebaut, wo auf eine Funktion in einer SSJS-Scriptlibrary aufgerufen wurde. In dieser Funktion wurde eine View referenziert und später wieder recycled. Normalerweise wäre hier kaum ein Zusammenhang zu erkennen. Aber, die Methode und meine XPage benutzten die gleiche View. Scheinbar ist es so, dass Designelemente nicht mehrfach referenziert werden.

D.h. wenn ich an vollkommen unterschiedlichen Stellen z.b. die gleiche View referenziere und auch nur eine davon recycle, dann werden alle Referenzen auf dieses Designelement gelöscht und es regnet entsprechende Null-Pointer Exception.

Die Lösung dieses Problems war denkbar einfach: Wir nahmen einfach das recycling aus dem Code. Normalerweise muss man auch nicht recyclen, da Domino das im Grunde selbst kann. Lediglich bei großen Schleifen wo viele Dokumente durchgeloopt werden sollte man über recycling nachdenken. Auf jeden Fall muss man aber darauf achten wie ich Designelemente referenziere um mir nicht den Ast abzusägen auf dem ich sitze.

%d bloggers like this: