Reverse PathIterator

Ein PathIterator ist in Java eine elegante Möglichkeit, alle Knoten und Kanten einer Form zu iterieren. Was dem eingebauten PathIterator leider fehlt, ist die Möglichkeit, die Form umgekehrt zu iterieren.

Nach eingem Suchen bin ich auf die tolle Klasse ReversePathIterator von caff.de gestoßen: Reverse PathIterator, mit Quelltext und allem. Sehr praktisch, zumal er sich vollkommen transparent statt des Originals nutzen lässt.

| Comments (0) »

24-Apr-06


Haufenweise: Bulk Insert, Update, Delete

Bulk Methoden in PL/SQL sind praktisch und schnell. Auch recht einfach anzuwenden. Allerdings ist mir in Oracle 9.2.0.6 ein sehr komisches Verhalten aufgefallen:

DECLARE
  TYPE id_table IS TABLE OF NUMBER;
  objekt_ids id_table;
BEGIN
    SELECT id
    BULK COLLECT INTO objekt_ids
    FROM   irgendwas
    WHERE  irgendwasanderes = 'wasweißich';
 
    FORALL idx IN objekt_ids.first .. objekt_ids.last
      DELETE FROM table1 WHERE objekt_id = objekt_ids(idx);
 
    FORALL idx IN objekt_ids.first .. objekt_ids.last
      DELETE FROM table2 WHERE objekt_id = objekt_ids(idx);
 
    -- ...
END;

Das Beispiel ist jetzt natürlich erstmal sinnlos, ist aber auch egal. Der Haken an der Sache: Das BULK COLLECT INTO Statement wirft keine NO_DATA_FOUND Exception, wenn die Ergebnismenge leer ist (im Gegensatz zu einem normalen SELECT INTO). Nichts desto trotz ist object_ids danach eine korrekt initialisierte Zusammenstellung.

War die Ergebnismenge leer, gibt es trotzdem eine Exception. Und zwar eine INVALID_NUMBER. Aus irgendeinem Grund laufen die forall Schleifen, auch wenn die virtuelle Tabelle leer ist.

Deshalb gilt für BULK Methoden: Abfragen, ob die Indextabellen leer sind!

DECLARE
  TYPE id_table IS TABLE OF NUMBER;
  objekt_ids id_table;
BEGIN
  IF(objekt_ids.COUNT > 0)THEN
    SELECT id
    BULK COLLECT INTO objekt_ids
    FROM   irgendwas
    WHERE  irgendwasanderes = 'wasweißich';
 
    FORALL idx IN objekt_ids.first .. objekt_ids.last
      DELETE FROM table1 WHERE objekt_id = objekt_ids(idx);
 
    FORALL idx IN objekt_ids.first .. objekt_ids.last
      DELETE FROM table2 WHERE objekt_id = objekt_ids(idx);
 
    -- ...
  END IF;
END;

| Comments (2) »

24-Apr-06


Search and replace

In den meisten “neueren” und höheren Programmiersprachen gibt es eine Stringmethode, die “Suchen und ersetzen” implementiert oder wenigstens Bibliotheken, die so etwas können.
Applescript kann das nicht.

Um auf Planet-Punk.de meine iTunes Charts ohne LastFM präsentieren zu können, brauchte ich aber genau sowas:

on searchAndReplace(s, r, t)
	set d to text item delimiters
	set text item delimiters to s
	set t to t's text items
	set text item delimiters to r
	tell t to set t to beginning & ({""} & rest)
	set text item delimiters to d
	return t
end searchAndReplace

Diese kleine Funktion sucht im Text t nach s und ersetzt jedes Vorkommen durch r.

Zack und schon ‘nen Bug im Code Snippet Plugin für WP gefunden…. Zeile 28 der AppleScript Datei für GeSHi ist falsch:

Statt

'QUOTEMARKS' => array('"',"'"),

darf sie nur

'QUOTEMARKS' => array('"'),

lauten. Wenn man nicht alles selber macht…

| Comments (0) »

23-Apr-06



WordPress 2.0.x, Safari und der Visual Rich Editor

Ein passender, erster seitenspezifischer Eintrag:

Nachdem ich gerade ohne Probleme WordPress 2.0.2 mit dem wundervollen Tiger Style Administration Panel von Steve Smith eingerichtet habe, muss ich mich direkt drüber ärgern, dass auch dort im Safari unter Mac OS X der Default Visual Rich Editor von WordPress nicht angezeigt wird.

Anscheinend führt der Visual Rich Editor im Safari direkt zu einem Totalabsturz. Leider funktionieren selbst die Quicktags nicht im Safari bzw. die Buttons erscheinen erst gar nicht.

Das allerdings kann man leicht ändern: Man braucht nur die Datei admin-functions.php im Verzeichnis wp-admin wie folgt anpassen:

Read the complete article »

| Comments (0) »

22-Apr-06