Frickelblog

28. March 2010

Sinn und Unsinn von E-Mail- und Link-Disclaimern

Filed under: Sonstiges — frickelblog @ 12:47
Tags: ,

Wieder eine Mail erhalten mit dem zweifelhaften Text

Diese E-Mail und alle angehängten Dateien enthalten streng vertrauliche Informationen und sind lediglich für den/die in der Adressleiste genannte(n) Person(en) bestimmt. Sollte diese E-Mail bzw. deren Anhänge an Dritte und/oder nicht in der Adressleiste genannte Personen gelangen,  [...]

Ich hab’ diesem Disclaimern ja noch nie wirklich vertraut. Ein Artikel bei heise (Disclaimer: Unnötiger Ballast für E-Mails) bestätigt die Vermutung, dass diese Disclaimer bei uns in Deutschland nicht wirksam sind. – Ebenso wie diese widersinnigen Distanzierungen von Links:

Mit Urteil vom 12. Mai 1998 hat das Landgericht Hamburg entschieden, daß man durch die Ausbringung eines Links [...]

Auch hier gibt es eigentlich diverse Seiten, die erklären, dass das Urteil vom LG Hamburg eben genau das nicht tut, was die Links versprechen: und zwar den Seitenbetreiber schützen. Mehr Informationen gibt es unter anderem auf diesen Seiten:

18. March 2010

Wegpunkte mit JXMapKit zeichnen

Filed under: Swing — frickelblog @ 12:12
Tags: , , , , , ,

Im Artikel “Erste Schritte mit JavaX JXMapKit” habe ich schon kurz beschrieben, wie man mit NetBeans und SwingX-WS schnell und einfach eine Kartendarestllung á la GoogleMaps in Java bauen kann.

Wenn man nicht nur eine Karte anzeigen sondern auch Punkte einzeichnen will, hat man die Möglichkeiten, per jXMapKit.setAddressLocation(new GeoPosition(lat, lon)); die Koordinaten setzen, zeichnen und die Karte dorthin zentrieren. Allerdings wird die Karte damit auch immer gleich zentriert und vor allem kann man nur einen einzelnen Punkt setzen.

Mehrere Wegpunkte setzt man mithilfe des WaypointPainters:

Set set = new HashSet(); 
WaypointPainter waypointPainter = new WaypointPainter(); 
waypointPainter.setWaypoints(set); 
set.add(new Waypoint(47.76098, 11.55932)); 
jXMapKit.getMainMap().setOverlayPainter(waypointPainter); 
repaint();

Das repaint() am Ende sollte immer erfolgen, wenn neue Punkte in das Set gesetzt werden, damit die Änderung auch sofort sichtbar ist. Andernfalls muss man die Karte etwas verschieben um ein repaint zu erzwingen. Will man jetzt noch die Darstellung der Wegpunkte verändern, muss man sich noch mit dem WaypointRenderer beschäftigen.

13. March 2010

Java Heap-Implementierung / Avoid too much sorting II

Filed under: Java,Performance — frickelblog @ 19:32
Tags: , ,

Im Artikel Avoid too much sorting habe ich ja schon kurz skizziert, dass man es generell vermeiden sollte seine Daten unnötig oft zu sortieren, weil das einfach (je nachdem wie oft der entsprechende Code aufgerufen wird) ziemlich in die Rechenzeit gehen kann.

Manchmal muss man seine Daten aber eben sortiert halten. – Dann sollte man sich aber überlegen, ob man wirklich die ganzen Daten sortieren muss, oder ob es nicht einfach reicht, immer das kleinste/größte Element einer Menge zu bekommen. Ein gutes Beispiel ist zum Beispiel der altbekannte Dijkstra-Algorithmus. Dort benötigt man in jeder Iteration z.B. den Weg mit den bisher kleinsten Kosten.

Das schreit ja schon nach Sortieren. Bzw. eigentlich sollte einem da gleich die Heap-Datenstruktur einfallen, da dort alle Operaionen maximal in O(log n) erledigt sind, und nicht (wie beim Sortieren) in bis zu O(n²). Das schöne daran ist, dass es das in Java auch schon gibt, da heißt es nur nicht Heap (da man dabei vermutlich zu sehr an die Speicherverwaltung denken könnte), sondern PriorityQueue.

Wenn man jetzt aber Objekte sortieren will die nicht per se Comparable sind, benötigt man noch eine kleine Comparator-Implementierung mit einem SimpleEntry, damit man einem beliebigem Objekt auch seine Kosten zuweisen kann. Klingt jetzt recht aufwändig – ist es aber bei weitem nicht:

import java.util.AbstractMap.SimpleEntry;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Test {
    public static void main(String[] args) {
        PriorityQueue<SimpleEntry> heap =
                new PriorityQueue<SimpleEntry>(10, new FooCmp());
        heap.add(new SimpleEntry(1d, new Foo(1)));
        heap.add(new SimpleEntry(5d, new Foo(2)));
        heap.add(new SimpleEntry(2d, new Foo(3)));
        while (!heap.isEmpty()) {
            System.out.println(heap.poll().getValue().i);
        }
    }
}

class FooCmp implements Comparator<SimpleEntry> {
    @Override
    public int compare(SimpleEntry o1, SimpleEntry o2) {
        return Double.compare(o1.getKey(), o2.getKey());
    }
}

class Foo {
    int i;
    Foo(int i) { this.i = i; }
}

Theme: Customized Rubric. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: