This feed contains pages in the "java" category.

Bereits Mitte April wurde das erste, experimentelle Release von Paxle veröffentlicht. Paxle ist ein modulares Suchmaschinen-Framework, das bereits alles mitbringt, um eine eigene Suchmaschine zu betreiben. Mögliche Anwendungsbereiche wären beispielsweise als Intranetsuchmaschine im lokalen Netz, Desktopsuche auf dem eigenen Rechner oder auch als Suchportal im Internet mit spezifischen Themen.

Paxle wird mit Java unter Verwendung von Osgi für die Modularität entwickelt. Dadurch lassen sich auch zentrale Kompenenten wie Crawler, Parser und Indexer einfach austauschen bzw. erweitern. Mehr Informationen sowie Downloads finden sich auf der Webseite sowie im Projektwiki.

Golem, ProLinux, Symlink sowie einige Blogs berichten ebenfalls.

Posted Thu May 7 19:56:15 2009 Tags: java

Bei ein wenig Javaprogrammieren bot es sich an, Rekursion zu nutzen. Unerwarteterweise schmiss Java schon bei einer Rekursionstiefe von etwa 130-140 einen Stackoverflowerror. Das hat dann recht schnell den Spieltrieb geweckt, so kam folgendes Codeschnippselchen raus:

public class Rekursion {
    public static void main(String[] args) {
        System.out.println(test(0));
    }

    public static int test(int n) {
        System.out.println(n);
        return test(++n);
    }
}

Raus kam folgendes:

$ java Rekursion
0
1
2
[snip]
6882
Exception in thread "main" java.lang.StackOverflowError
    at java.lang.String.(String.java:637)
    at java.lang.Integer.toString(Integer.java:308)
    at java.lang.Integer.toString(Integer.java:116)
    at java.lang.String.valueOf(String.java:2932)
    at java.io.PrintStream.print(PrintStream.java:547)
    at java.io.PrintStream.println(PrintStream.java:686)
    at Rekursion.test(Rekursion.java:7)

Das kann Python doch bestimmt besser dachte ich mir, folgendes entstand:

def test(n):
    n+=1
    print n
    return test(n)
print test(0)

Raus kam das hier:

$ echo -e "def test(n):\n\tn+=1\n\tprint n\n\treturn test(n)\nprint test(0)" | python
1
2
3
4
5
6
...
999
Traceback (most recent call last):
  File "", line 5, in 
....
  File "", line 4, in test
RuntimeError: maximum recursion depth exceeded

Also Python kann zwar nicht mehr, aber nur weil es nicht will, also bringen wir es dazu, zu wollen :)

$ echo -e "import sys\nsys.setrecursionlimit(1000000)\ndef test(n):\n\tn+=1\n\tprint n\n\treturn test(n)\nprint test(0)" | python
1
2
3
4
5
6
7
8
...
20953
Segmentation fault
$

Aber offenbar wird Python dann ein wenig störrisch und verabschiedet sich komplett. Der Vollständigkeit halber bringt man Java auch nochmal dazu, ein wenig mehr zu wollen:

$ java -Xss128m Rekursion
0
1
2
3
....
2520128
2520129
2520130
2520131
Exception in thread "main" java.lang.StackOverflowError
    at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:517)
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)
    at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
    at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
    at java.io.PrintStream.write(PrintStream.java:476)
    at java.io.PrintStream.print(PrintStream.java:547)
    at java.io.PrintStream.println(PrintStream.java:686)
    at Rekursion.test(Rekursion.java:7)

Da kommt Java dann schlussendlich aber erheblich weiter. Allerdings wirft Python (sofern sich der Interpreter nicht komplett verabschiedet) einen weitaus spezifischeren und daher auch leichter fangbaren Fehler als Java. Trotzdem bleibt in diesem Falle als Ergebnis 1:0 für Java. (Probiert wurde das ganze auf einem Standard Ubuntu 8.04, Python: Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52), Sun Java: Java(TM) SE Runtime Environment (build 1.6.0_06-b02))

Posted Fri Aug 22 18:00:29 2008 Tags: java

Für manche Dinge muss man einfach ein UML-Diagramm erstellen, obwohl man es für den eigentlichen Zweck (der Planung des ganzen im Vorraus) garnicht braucht. Für einen solchen Fall habe ich ein Pythonscript zusammengeschrieben, dass die Javaquellen durchforstet und daraus den Quelltext für ein MetaUML-Diagramm erstellt.

Das ganze ist nur halbautomatisch, weil man für die Positionierung selbst sorgen muss. Beim ersten Start wird eine Datei, die standardmäßig positions.inc.mp heißt erzeugt. Diese Datei kann man dann bearbeiten, um die Positionierung zu verfeinern, sie wird bei den folgenden Durchläufen automatisch eingebunden und nicht überschrieben.

Desweiteren werden einige Annahmen bezüglich der Formatierung des Javaquellcodes getroffen, die vielleicht nur für meinen Code zutreffen, so zum Beispiel, dass die Definition einer Funktion oder Klasse bis zum { in einer Zeile steht usw. Zum ersten Testen sollte es reichen, die Pfade zum Quellcode anzupassen, mit etwas Glück sollte dann halbwegs valider Quellcode für MetaUML rausfallen, den man dann noch durch mpost oder mptopdf schickt und anschließend eine PostScript- oder PDF-Datei erhält

Hier also das Machwerk (WTFPL). Über Links zu verbesserten oder strukturierteren Versionen in den Kommentaren würde ich mich natürlich freuen :)

Update: Inzwischen verwende ich für solche Sachen UML Graph, welches Dateien für die Verwendung mit Graphiz erzeugt.

Posted Tue Feb 5 22:12:34 2008 Tags: java