Thema des Monats: Programmieraufgaben / JavaBLOG Pause

Anders als bei den üblichen kleinen Beispielen für eine bestimmte API und Technologie sollen nun drei Aufgaben zur Auswahl stehen. Jeder kann nach Lust, Zeit und Laune eine/jede Aufgabe lösen.

Aufgabe 1

Brainfuck (http://de.wikipedia.org/wiki/Brainfuck) und Ook! (http://de.wikipedia.org/wiki/Ook!) sind einfache Turing-vollständige Sprachen, für die sich sehr leicht Interpreter in Java schreiben lassen. Für Brainfuck gibt es mittlerweile sogar eine IDE: http://hardtware.de/products/brainfuck.php. Die Aufgabe ist, unter Java 6 einen eleganten Compiler zu bauen, der aus einem Brainfuck- oder Oak!-Programm ein ausführbares Java-Programm in Form einer .class-Datei generiert. Der Aufruf kann so aussehen:



$ java BrainfuckC Application.bf

Successfully generated Application.class

$ java Application


Aufgabe 2


Gegeben ist eine potenziell sehr große ASCII-Datei mit Ganzzahlen im Wertebereich +-1000000, die durch Leerzeichen, Tab oder Return getrennt sind. Über die Datei soll eine Statistik gefahren werden, sodass am Ende die größte und kleinste Zahl sowie die maximale Teilsumme ausgegeben wird. Gesucht ist das schnellste Programm.



$ java Stat numbers.txt

Min: 3, Max: 199933, Maximale Teilsumme 4785



PS: Die maximale zusammenhängende Teilsumme von zum Beispiel

{-18,5,-3,9,4,-12} ist 5 + -3 + 9 + 4 = 15.


Aufgabe 3

Microsoft PowerPoint kann Folien im XML-Format speichern. Dazu verwendet Microsoft Zip-Dateien mit der Endung pptx. Im Zip-Archiv befindet sich ein Order ppt/slides und jede PowerPoint-Folie liegt dort als XML-Datei vor. Schreibe ein Swing-Programm, mit dem man einfache Text-Folien darstellen kann. Der Rückgriff auf beliebige Java-OpenSouce-Bibliotheken ist ausdrücklich gewünscht.

Lösungen können gerne in dem Blog gepostet werden (oder Verweise auf die Lösungen).

Blog-Pause

In den letzten Wochen gab es keine Posts, da ich auf den Philippinen, Brunei und Indonesien (ja, auch Java) war. Nach der Reise habe ich interessante Java-Neuigkeiten in den Blog nachgetragen. Nun wird es voraussichtlich für einige Wochen wieder keine weiteren Einträge geben, da ich nach Afrika fliege und Namibia, Südafrika, Swaziland, Lesotho, Botswana, Zambia, Mozambique, Malawi, Tansania, Kenia, Ruanda besuchen werde. Wollen wir hoffen, dass dies hier nicht der letzte Blog-Eintrag ist ;)

Labels:

Apache Jackrabbit 1.5

Jackrabbit (http://jackrabbit.apache.org/) ist eine Implementierung der Content Repository API (JSR 170/JSR 283). (Bei dem JCR geht es darum, Datenquellen eines CR unter einer einheitlichen API anzusprechen. Die Anfrage werden mit XPath getellt.) Wichtige Neuerungen zählt http://www.apache.org/dist/jackrabbit/RELEASE-NOTES-1.5.0.txt auf. Zwei Sachen finde ich besonders interessant:
  • The standalone Jackrabbit server component. The runnable jackrabbit-standalone jar makes it very easy to start and run Jackrabbit as a standalone server with WebDAV and RMI access.
  • Simple Google-style query language. The new GQL query syntax makes it very easy to express simple full text queries.
Die aktuelle Version geht also deutliche Schritte in Richtung der neuen Version JSR-283. http://www.magnolia-cms.com/home.html ist ein bekanntes CMS, welche auf den Jack-Hasen setzt.

Labels:

SpringSource und Groovy/Grails und SpringSource mit Adobe

SpringSource (http://www.springsource.com/) macht große Schritte. Zum einen durch den Aufkauf von G2one (http://www.g2one.com/), die sich der Beratung von Weiterentwicklung von Groovy und Grails verschrieben haben:
SpringSource,
the maker of the Spring framework have just announced they are acquiring G2One, Inc.,
the Groovy/Grails company. You can learn more about this announcement here:
Nun arbeitet SpringSource auch mit Adobe zusammen und Flash näher an Spring zu setzen. Das Spring-Framework integriert dazu BlazeDS (http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/), eine unter LGPL stehende Remoting- und Messaging-Technologie. Mit BlazeDS kann Flex auf Java-Methoden auf der Serverseite zugreifen, so wie es auch JavaScript über DWR (http://directwebremoting.org/) kann. Die Ankündigung zur Zusammenarbeit:
  • http://www.springsource.com/node/1077

Labels:

Android GUI-Builder

Google Android kann Guis entweder ausprogrammiert oder deklarativ über eine XML-Datei beschreiben. Nun gibt es mit DroidDraw (http://www.droiddraw.org/) einen einfachen Gui-Builder für die Android Cell Phone Platform als Java-Applet. Tutoials unter http://www.droiddraw.org/tutorial.html gehen ein komplettes Beispiel durch.

Labels:

XStream mit JSON-Serialisierung

XStream (http://xstream.codehaus.org/) ist neben
XmlBeans einer der bekanntesten XML-Serialisierer. Nun haben die Entwickler die Bibliothek erweitert, dass XStream auch als XML-JSON-Serialisierer (http://xstream.codehaus.org/json-tutorial.html) arbeitet. Die Methodenamen sind mit toXML() und fromXML() zwar nicht so passend, aber der Aufruf dennoch einfach:
Product product = new Product("Banana", "123", 23.00);
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("product", Product.class);
System.out.println(xstream.toXML(product));

Der andere Weg:


String json = "{\"product\":{\"name\":\"Banana\",\"id\":\"123\"" +
",\"price\":\"23.0\"}}";
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("product", Product.class);
Product product = (Product)xstream.fromXML(json);
System.out.println(product.getName());

Labels:

Grammatikalische Struktur vom Java-Programm visualisieren

JavaFX 1.0 offiziell veröffentlicht

http://upload.wikimedia.org/wikipedia/en/4/4a/JavaFXCup200x230.pngSun hat Anfang Dezember 2008 JavaFX veröffentlicht. Es ist als Alternative zu MS Silverlight und Flash + Flex für Rich Internet Applications gedacht. Einige Links dazu:

Zentrale Punkte von JavaFX 1.0 sind: (Zitiert von http://blogs.sun.com/javafx/entry/javafx_1_0_is_live)

  • Fast and easy to use 2D graphics
  • PerspectiveTransform for 3D effects
  • KeyFrame animation
  • Video and Audio support using both native and cross-platform codecs
  • Swing Integration
  • XML & JSON web services
  • Pixel-filters and visual effects with GPU hardware acceleration
  • CSS styling (more on that later)
  • Windows XP+ and Mac 10.4+ support with Linux & Solaris in the works (more on that later too)
  • The new JavaFX Script language with binding and animation built in, running 10->20x faster than Javascript
  • Visually rich applets that you can drag to your desktop and save for later
  • Integration with Photoshop and Illustrator
  • Access to the world's huge library of Java code and APIs
  • A new website with docs, tutorials, and tons of BSD licensed sample code and as a nice bonus:
  • A sneak-peek beta of JavaFX on mobile devices

Der Punkt Support with Linux & Solaris in the works macht sicherlich nicht jeden in der Community glücklich, aber gut...

Sun hat die schöne Seite http://javafx.com/ aufgebaut, um mehr über JavaFX zu lernen. Die NetBeans IDE 6.5 bringt volle Unterstützung für JavaFX (http://www.netbeans.org/features/javafx/index.html) mit. Für Eclipse gibt es bisher keine große Unterstützung.

http://www.netbeans.org/images/v6/5/screenshots/javafx.png

http://www.reportmill.com/jfx/ bringt passend ein Tool auf Markt. Zentrale Elemente sind (Zitiert von der Webseite):

  • Powerful Visual Designer
  • Animation, Illustration and Page Layout
  • Video, Sound and Image Effects
  • Drag & Drop Application Components
  • JDBC and POJO Data Binding
  • HTTP Form Generation and Binding
  • Navbar Generation, Page Transitions
  • Graphs, Charts, Tables and Reports
  • Full Featured Player/Document Reader
  • Extension Plugins with Internet Directory

http://www.reportmill.com/jfx/JFXBScreenShotFull.jpg

Labels:

Groovy-Eclipse Plugin mit Refactoring Unterstützung

Ein Studentenprojekt der HSR University of Applied Sciences Rapperswil, Institute for Software hat dem Groovy-Eclipse Plugin Refactoring Möglichkeiten beschert:

http://docs.codehaus.org/download/attachments/104562862/groovy-eclipse-refactoring.png

Zu den Refactorings zählen

  • Extract Method
  • Inline Method
  • Rename Local
  • Rename Method
  • Rename Class
  • Rename Field

Ein neuer Formatter gehört ebenfalls zum Tool.

Labels:

JBoss 5 ist fertig + Application Servers 2008 Rankings

Nach 3 Jahren gibt es nun (endlich) den JBoss 5 AS. Einige Meldungen und Meinungen dazu:

JBoss 5 taucht aber (noch) nicht als zertifizierter Java EE 5 Container unter http://java.sun.com/javaee/overview/compatibility.jsp auf, obwohl http://sacha.labourey.com/2008/09/15/jboss-as-is-now-ee5-certified/ davon berichtet.

Unter http://www.theserverside.com/news/thread.tss?thread_id=51008 wird der EDC report - "Application Servers 2008 Rankings" (http://www.evansdata.com/reports/viewRelease_download.php?reportID=20) diskutiert. Die Kommentare sind lesenswert. Der Download des Papers verlangt ein Login, ist aber ansonsten frei.

Labels: ,

Inselraus: getContextClassLoader() vom Thread

Entwickler von Java-Enterprise-Applikationen haben oft damit zu kämpfen, dass immer der falsche Klassenlader eine Klasse bezieht und die Typen dann nicht zusammenpassen. In unserem Beispiel mit dem statischen Initialisierungsblock ist gut zu erkennen, dass durch das zweimalige Laden die Laufzeitumgebung auch zweimal die Anweisungen ausführt. Hätten wir Singletons definiert, würden ihre statische Anfragemethoden unterschiedliche, nicht kompatible Objekte liefern, obwohl es laut Defini-tion eines Singletons der Fall sein müsste. Allgemein gesprochen: Besonders Fabrikfunktionen liefern bei mehreren Versionen der Klasse unterschiedliche Objekte, die nicht zusammenpassen. Zwei Lösungen gibt es hier: Zum einen bekommen die Fabrikfunktionen einen Klassenlader, in dessen Kontext sie die Klassen erzeugen können, oder sie nutzen den Klassenlader, der mit einem Thread ver-bunden ist.

Jeder Thread ist mit einem Klassenlader assoziiert, der standardmäßig mit dem Standardklassenlader identisch ist. getContextClassLoader() auf dem Thread-Objekt bezieht diesen Klassenlader:

Listing 8.13    com/tutego/insel/lang/ThreadClassLoader.java, main()
ClassLoader loader = Thread.currentThread().getContextClassLoader();
System.out.println( loader );  // sun.misc.Launcher$AppClassLoader@a12a00
loader = ThreadClassloader.class.getClassLoader();
System.out.println( loader );  // sun.misc.Launcher$AppClassLoader@a12a00

Soll der assoziierte Klassenlader geändert werden, bewerkstelligt dies setContextClassLoader().

Labels:

Inselraus: Ein flexibles Tabellenlayout mit JGrid

Eine JTable ist zwar eine einfache Komponente, doch schon in der HTML-Tabelle gibt es Eigenschaften, die die JTable nicht abbilden kann: Zellen, die über mehrere Zeilen und Spalten gehen. Hier ist einiges an Programmieraufwand nötig, der jedoch für diejenigen unnötig ist, die auf die freie Komponente JGrid zurückgreifen. Die Swing-Komponente gehört zu Pepper (http://jeppers.sourceforge.net/), einer Komponente für Tabellenkalkulationen, die sogar eine Formelauswertung ähnlich Excel versteht. Pepper selbst untersteht zwar der GPL, doch JGrid ist LGPL und lässt sich somit in eigene kommerzielle Anwendungen einbinden.

http://openbook.galileocomputing.de/javainsel7/bilder/jgrid.gif

PS: tutego bietet nun auch ein GWT-Seminar an:

Labels:

Thema der Woche: SwingX

Die Anzahl Swing-Komponenten ist nicht besonders groß und seit dem Swing in Java 1.2 fest eingeführt wurde, hat sich wenig an Swing verändert. Im Laufe der Zeit sind diverse Projekte mit Zusatzkomponenten und Swing-Erweiterungen entstanden, wobei SwingX (http://swinglabs.org/) zu den bekannteren gehört.

SwingX wurde in den letzten Tagen mit mehr Aufmerksamkeit bedacht, seit dem Sun angekündigt hat, dass SwingX-Projekt nicht mehr zu unterstützten. Zusammen mit diversen Blog-Einträgen ergibt sich der Eindruck, dass Swing für Sun keine besondere Rolle spielt, sondern Sun stattdessen Geld und Entwicklerkapazität in JavaFX steckt. Lese dazu

Labels:

Neuer Java Decompiler

Jad (http://www.kpdus.com/jad.html) gehört immer noch zu den Klassikern der Java-Decompiler. Nun gibt es etwas neues, den “Java Decompiler” (http://java.decompiler.free.fr/). Mit dem Screenshot der Gui sieht das schon mal vielversprechend aus.

Labels:


Suche

Willkommen!

In diesem Blog schreibe ich über aktuelle Entwicklungen in Java, Softwareentwicklung im Allgemeinen, Open-Source, JavaScript, neue Eclipse-Plugins und Neuerungen im Buch ›Java ist auch eine Insel‹.

Mein Foto
Name: Christian Ullenboom
Standort: Hannover, Niedersachsen, Germany

Ich bin Christian Ullenboom und Autor des Buches ›Java ist auch eine Insel‹. Seit 1997 schule ich als Java-Tutor Themen wie Java SE, EJB 3, Hibernate, JSP/Servlets. Sun ernannte mich 2005 zum ›Java-Champion‹.

Feed hinzufügen

  • AddThis Feed Button


XML