Thema der Woche: Java Sicherheit und Angriffe
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, Februar 23, 2010.Zur Vorbereitung
- Suche über die Nutzung von Escape Sequences \uxxxx im Internet und wo sie im Java-Programmcode überall genutzt werden können.
- Lies über die Methode exec() von Runtime und den ProcessBuilder.
- Lies über den Klassenlader und Klassenladehierarchien.
- Mit der Java Compiler API lässt sich ein Java-Programm aus einem anderen Java-Programm heraus übersetzen. Wie sieht die API aus? Seit wann gibt es sie?
http://www.blackhat.com/presentations/bh-usa-09/WILLIAMS/BHUSA09-Williams-EnterpriseJavaRootkits-PAPER.pdf ist ein schöner Artikel, wie Entwickler den Quellcode kompromittieren können, um “böse” Sachen anzustellen. Zwar ist die Information über den Java-Compiler, den der Tomcat nutzt, nicht korrekt, aber Jeff Williams fasst wunderbar verschiedene Angriffsfälle zusammen.
Lies den Text und beantworte folgende Fragen:
- Welcher Annahme im Programm bei “Abusing the JSP Compiler” wird gemacht? Ist das Beispiel realistisch?
- Wie lässt es sich verhindern, dass man private Attribute auslesen kann? Lässt sich das in der Praxis realisieren?
- Was ist BCEL? Seit wann und warum integriert das JDK BCEL?
- Gibt es Unternehmen (in Deutschland), die Code Audits durchführen? Auch von bekannten Open-Source Libraries?
Wer weiter Interesse an dem Thema hast, kann sich http://www.blackhat.com/presentations/bh-usa-09/WEBER/BHUSA09-Weber-UnicodeSecurityPreview-SLIDES.pdf anschauen.
Labels: Die wöchentliche Dosis Java
Thema der Woche: “Sicheres” Programmieren
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, Januar 20, 2010.Studiere im Artikel http://java.sun.com/security/seccodeguide.html die Guidelines 0 bis 5.
Gib für alle einzelnen Tipps ein alternatives Beispiel. (Aufgabe für 2 Wochen.)
Labels: Die wöchentliche Dosis Java
Thema der Woche: MVC/MVP
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, Dezember 16, 2009.Lies die Einträge
- http://de.wikipedia.org/wiki/Model_View_Presenter
- http://blogs.infragistics.com/blogs/todd_snyder/archive/2007/10/17/mvc-or-mvp-pattern-whats-the-difference.aspx
und skizziere kurz die Unterschiede zwischen den beiden Gui-Pattern MVC und MVP.
Skizziert http://www.c-sharpcorner.com/UploadFile/OVZh/Introducing_MVCSharp_framework03062008064516AM/Images/Untitled-2.gif den Unterschied? Was hat das allen mit Testen zu tun?
Das MVP ist weiterhin gültig, aber der Name hat sich etwas verändert. Erkläre das am Beispiel des Diagramms http://geekswithblogs.net/dchristiansen/archive/2007/12/07/microsoft-patterns-and-practices-team-release-the-model-view-presenter.aspx.
Schreibe ein Beispielprogramm.
- Eine Maske soll nach dem Benutzernamen und Passwort fragen.
- Ein Fake-Login-Service soll eine bekanntes Username/Passwort-Pärchen authentifizieren. Sind die Werte korrekt, soll eine einfache Meldung erscheinen und der Dialog geschlossen werden.
- Schreibe einen JUnit-Testfall
Labels: Die wöchentliche Dosis Java
Thema der Woche: Ladebalken über dem Textfeld
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, November 11, 2009.Mit JXLayer (https://jxlayer.dev.java.net/) lassen sich beliebige Swing-Komponenten mit anderen Swing-Komponenten (oder Zeichnungen) auf eine Ebene legen und somit interessante Effekte und Lösungen entwerfen.

- Schreibe eine kleine Swing-Anwendung mit einem Textfeld und einer Schaltfläche. Wird die Schaltfläche gedrückt soll ein Web-Server kontaktiert und die Daten von dort geladen und in das Textfeld gesetzt werden.
- Das Laden soll künstlich verzögert werden. Schreibe einen eigenen ThrottleReader, der den FilterReader erweitert und deine künstliche Verzögerung einführt.
- Beim Laden soll nun ein (indefinite) Fortschrittsbalken mit JXLayer über dem Textfeld erscheinen, der dann ausgeblendet wird, wenn der Text geladen wurde.
- Überlege, wie sich der Fortschnitt des Fortschrittsbalken bestmöglich an der Anzahl geladenen Zeichen festmachen lässt.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Checked Excpetion vs. Unchecked Exception
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Oktober 19, 2009.Java unterscheidet Checked von Unchecked Excecption.
- Wie unterscheiden sich die Klassenbeziehungen?
- Finde je 5 Klassen für Checked und Unchecked Excecptions und erkläre, warum sie Checked oder Unchecked sind.
- Das Konzept von Checked Exception ist umstritten und viele andere Sprachen unterscheiden hier nicht. Lies http://www.octopull.demon.co.uk/java/ExceptionalJava.html und extrahiere die Kernthesen.
- Was ist das Projekt Lombok und http://projectlombok.org/features/SneakyThrows.html? Wo bringt der Ansatz Probleme in der Praxis?
Labels: Die wöchentliche Dosis Java
Thema der Woche: Programmieren mit einem bisschen Geo
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, September 02, 2009.Die Klasse Locations soll beliebig viele Location-Objekte speichern können. Dazu ist eine addLocation()-Methode nötig, die einen Ort als String mit einer Location annimmt und in eine intern Datenstruktur übernimmt. addLocation() soll überladen sein, dass man einmal den Ort über ein Location-Objekt bestimmt und einmal über Longitude und Latitude. Eine toString()-Methode soll angeben, wie viele Orte enthalten sind. Eine Methode Location findLocation(String location) soll die Location für einen Ort zurückgeben. Schreibe eine Methode List
Schreibe eine Klasse LocationApplication mit einem main(). Füge einige Location-Objekte ein und teste die Bereichsabfrage.
Eine Klasse LocationRepository soll zwei statische Methoden enthalten: Locations loadLocations() und void saveLocations(Locations locations). Die Methoden sollen Locations aus einer Text-Datei lesen und schreiben können. Nutze dazu beliebige Geokoordinaten. Das Dateiformat kann frei bestimmt werden.
Passe die Methode within() an, so dass die Liste sortiert ist nach dem Abstand zum Anfrageort. Schreibe dazu einen DistanceComparator
Modelliere mit NetBeans eine grafische Oberfläche, mit zwei Reitern (JTabbedPane). In dem ersten Reiter soll man drei Textboxen haben für Ort, Longitude, Latitude und einen „Hinzufügen“ Button. Damit sollen neue Orte dem Locations hinzugefügt werden. Auf dem zweiten Reiter soll der Anwender Abfragen vornehmen können. Eine Eingabezeile für ein Ort (oder Longitude, Latitude) und Radius soll zu max. 10 Ergebnissen führen.
Zusatzaufgabe: Installiere Google Earth. Bei einer Bereichsabfrage erzeugte eine KML-Datei mit allen Ergebnissen. Diese Datei soll beim Start von Google Eath als Startparameter mitgegeben werden. Externe Programme startet man mit dem ProcessBuilder. Die Insel gibt ein Beispiel für diese Klasse.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Repository-Pattern in DDD und DAO
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, Juli 31, 2009.Zur Abstraktion von Zugriffen auf konkreten Datastores (oft eine relationale Datenbank) haben sich DAOs (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html) etabliert. Im Domain Driven Design (DDD) gibt es etwas, das so aussieht wie ein DAO, und zu großer Diskussion in der Community führt.
- Wiederhole http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
- Lese über das Repository-Pattern im DDD: http://dddstepbystep.com/wikis/ddd/blogged-the-repository-pattern.aspx
Lassen sich hier schon Unterschiede herausstellen?
Verfolge den “Streit” über den Unterschied zwischen Repos/DAO in den Blogs
- http://blog.hibernate.org/Bloggers/RepositoryPatternVsTransparentPersistence (initiiert vom Hibernate-Mitarbeiter Christian Bauer, der zum Teil sehr ruppig schreibt und reagiert)
- http://ziobrando.blogspot.com/2008/01/domain-driven-design-in-java.html, http://ziobrando.blogspot.com/2008/01/domain-driven-design-in-java_18.html, http://ziobrando.blogspot.com/2008/01/domain-driven-design-in-java_21.html
Fragen:
- Was sagt Eric Evans zu der Diskussion? Kann ein Repo als DAO implementiert sein?
- Stehen Repo und DAO beide auf der Ebene vom Domain-Model?
- Warum sagen Kritiker, dass Repos eine zusätzliche (unnötige) Zwischenschicht sind?
- Einige EJB-Advocates injizieren gerne bei Java EE 5 Anwendungen den Entity-Manager in den DAO bzw. sehen den EM als DAO selbst, den man dann in Session-Beans injiziert. Ist das ein Design im Sinne von DDD?
Optional. Wie sieht Paginierung aus? http://tech.groups.yahoo.com/group/domaindrivendesign/message/5795
Labels: Die wöchentliche Dosis Java
Thema der Woche: Stripes, ein einfaches Web Presentation Framework
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Sonntag, Juli 26, 2009.Die Listen http://java-source.net/open-source/web-frameworks und http://de.wikipedia.org/wiki/Liste_von_Webframeworks geben eine fast unendliche Aufzählung von Web-Frameworks an. Selbst bin ich ein Freund (je nach Anwendungsfall) von GWT, JSF 2.0 und Stripes.
Stripes is a presentation framework for building web applications using the latest Java technologies. The main driver behind Stripes is that web application development in Java is just too much work! It seems like every existing framework requires gobs of configuration. Struts is pretty feature-light and has some serious architectural issues (see Stripes vs. Struts for details). Others, like WebWork 2 and Spring-MVC are much better, but still require a lot of configuration, and seem to require you to learn a whole new language just to get started.
Stripes fällt die Kategorie der Action-orientierten Frameworks, wie Struts oder Spring MVC. Ein Front-Controller nimmt den Request entgegen und delegiert auf eine ActionBean-Klasse, die den Seitenfluss auf eine andere Zielseite steuert.
Aufgaben:
- Spiele das Beispiel http://www.stripesframework.org/display/stripes/Quick+Start+Guide mit der Lieblings-IDE durch
- Lies http://cosminaru.ro/blog/downloads/Stripes-TJUG.pdf oder http://www.chariotsolutions.com/slides/pdfs/ete2009-GettingStartedStripesFramework.pdf
- Überfliege die freien Kapitel vom “Standardbuch” http://www.pragprog.com/titles/fdstr/stripes.
- Verstehe das Beispiel unter http://weblogs.java.net/blog/simongbrown/archive/2006/03/comparing_webap_9.html und wiederhole die JSTL
- Wirf einen Blick auf Beispiele mit “Clean URLs”: http://greggbolinger.blogspot.com/2008/01/stripes-15-feature-clean-urls.html, http://www.devx.com/Java/Article/39199/1954 oder http://blog.carbonfive.com/2009/02/java/stripes-a-succesful-first-project.
- Welche Aufgaben nimmt http://www.mongus.com/Topics/Web%20Development/Stripernate/ ab?
Trivia: Frederic Daoud ist der Autor vom Standard-Stripes Buch “Stripes: ...and Java Web Development Is Fun Again”. Frederic und seine Frau Nadia haben ein zweites Kind bekommen und es Ruby genannt.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Effective Java
3 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, Juli 03, 2009.Gehe die verfügbaren Informationen durch:
- Online-Version der ersten Auflage
- Aus der 2. Aufgabe ist das Generics-Kapitel frei verfügbar: http://java.sun.com/docs/books/effective/generics.pdf
- developers.sun.com/learning/javaoneonline/2007/pdf/TS-2689.pdf
- http://sites.google.com/site/io/effective-java-reloaded
- http://jaoo.com.au/brisbane-2009/file?path=/jaoo-sydney-2009/slides/JoshuaBloch_KeynoteEffectiveJavaStillEffectiveAfterAllTheseYears.pdf
- Warum ist es schwierig, eine perfekte equals()-Methode zu schreiben?
- Welche Vorteile bieten immutale Objekte? Was hast das mit defensiven Kopien zu tun?
- Wo hören die Wertebereiche von float und double auf?
- Konstruiere ein Szenario, bei dem das wait() in einer if-Anweisung fehlschlägt und nur eine Schleife gültig ist.
- Finde Informationen, ob über enum ein Singleton wirklich 100% korrekt ein Singleton ist und nur exakt ein einziges mal in der JVM ist.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Pull-Parser/StAX
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Juni 08, 2009.Nicht immer können und müssen Objektgraphen von XML-Dateien – entweder pur als XML-DOM, oder gemappt über etwa JAXB – im Speicher gehalten werden. Muss nur einmal eine XML-Datei abgelaufen werden (natürlich können in diesem einen Durchlauf dann der XML-DOM aufgebaut werden), kann gut ein Pull-Parser eingesetzt werden.
- Lies Serielle Verarbeitung mit StAX
- Warum kann ein Pull-Parser schnell als Push-Parser (SAX) arbeiten?
- Verstehe im Groben http://jira.codehaus.org/secure/attachment/28197/StaxBuilder.java.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Speicherverwaltung, Memory-Leaks
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Mai 25, 2009.Lies das online-Kapitle http://java.sun.com/developer/Books/javaprogramming/bitterjava/bitterjavach06.pdf über Speicherprobleme.
Lies http://java.sun.com/javase/6/docs/api/java/lang/ref/package-summary.html und insbesondere http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html.
Aufgaben: Suche aus http://www.koders.com/default.aspx?s=phantomreference&btn=&la=Java&li=* ein Beispiel für PhantomReference. Dokumentiere, warum hier PhantomReference eingesetzt wird und keine andere Lösung exisitiert.
Was für Ergänzungen bieten die Google Collections mit den folgenden Klassen?
- FinalizablePhantomReference
- FinalizableReference
- FinalizableReferenceQueue
- FinalizableSoftReference
- FinalizableWeakReference
Labels: Die wöchentliche Dosis Java
Thema der Woche: Domain Driven Design (DDD)
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Mai 18, 2009.Lies
- http://www.infoq.com/articles/ddd-in-practice
- http://www.martinfowler.com/bliki/AnemicDomainModel.html
Wirf einen Blick auf die Tools, die das erste Dokument aufführt:
Aufgabe: Schreibe zu jedem Tool einen Satz, der das Tool definiert und das Einsatzgebiet erklärt.Labels: Die wöchentliche Dosis Java
Thema der Woche: Interface Design
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Mai 11, 2009.Ließ von http://www.artima.com/interfacedesign/contents.html die öffentlich zugänglichen Kapitel.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Micro-Benchmarks
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Mai 04, 2009.Ließ zunächst die folgenden Artikel
- http://wikis.sun.com/display/HotSpotInternals/MicroBenchmarks
- http://www.ibm.com/developerworks/java/library/j-jtp02225.html
- http://www.azulsystems.com/events/javaone_2002/microbenchmarks.pdf
Versuche dann mit http://jetm.void.fm/index.html die Frage zu klären, wie groß der Unterschied ist, wenn man Threads für eine Aufgabe per Hand startet oder aus einem Thread-Pool holt.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Gof-Pattern-Wiederholung
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Sonntag, April 26, 2009.- Wiederhole die Gof-Pattern von http://www.cmcrossroads.com/bradapp/javapats.html#Part2.
- Gehe die fundamentalen Pattern unter http://www.mindspring.com/~mgrand/pattern_synopses.htm#Dynamic%20Linkage ab.
- Nenne zwei Nachteile, die Vererbung gegenüber Assoziation hat.
- Gibt es seit Java 5 eine Alternative zu Marker-Interfaces? Wie sieht diese aus? Nenne Beispiele.
- Implementiere mit http://commons.apache.org/chain/ ein einfaches Beispiel, bei dem auf der Basis der ersten Bytes einer Grafikdatei eine Meldung auf dem Bildschirm erscheint, um welchen Bildtyp es sich handelt.
- dom4j nutzt mehrere Flyweight-Klassen (http://dom4j.org/dom4j-1.6.1/apidocs/org/dom4j/tree/package-summary.html). Diskutiere, ob das Fliegengewicht-Klassen nach dem Gof-Prinzip sind.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Matcher-Append-Replacement und Pig Latin
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, April 20, 2009.Die Pattern/Matcher erlauben nicht nur das Suchen und Ersetzen, sondern bieten noch weitere interessante Möglichkeiten.
- Teste das Beispiel unter http://www.java2s.com/Code/Java/Regular-Expressions/MatcherappendReplacement.htm.
- Lies http://www.devarticles.com/c/a/Java/Introduction-to-the-Javautilregex-Object-Model/8/.
- Lies aus http://java.sun.com/javase/6/docs/api/java/util/regex/Matcher.html die Dokumentation von appendReplacement(), appendTail().
- Evaluiere, ob man einen http://en.wikipedia.org/wiki/Pig_Latin –Konverter mit diesen speziellen Methoden einfach schreiben kann.
Lösungen sind wieder gerne willkommen.
Labels: Die wöchentliche Dosis Java
Thema der Woche: NIO-Buffer
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, April 13, 2009.Java nutzt für Objekte den Heap-Speicher, kann aber Bytes auch in sogenannten direkten Puffern speichern. Das kann sehr effizient sein, da Kopieroperationen zwischen dem Heap-Speicher und dem internen Speichern vermieden werden.
- Lies Programming With Buffers
- Verstehe Position, Limit, Capacity und flip(), reset(), rewind()
- Zeichne eine UML-Diagramm mit den Unterklassen von java.nio.Buffer und finde die Unterschiede
- Kopiere eine Datei mit der NIO Klasse FileChannel. Nutze geschickt transferFrom(). Folge erst danach der Diskussion unter http://www.javalobby.org/java/forums/t17036.html
- Studiere http://www.java2s.com/Code/Java/Regular-Expressions/AgreplikeprogramusingNIObutNOTLINEBASED.htm.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Java™ 6u10 - Java6u13
2 Kommentar(e). Veröffentlicht von Christian Ullenboom am Sonntag, März 29, 2009.- Lese die Neuerungen von 6u10 in eine Präsentation http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6649.pdf?cid=925772 und http://java.sun.com/developer/technicalArticles/javase/java6u10/
- Stelle das Look and Feel von NetBeans auf Nimbus um.
- Schreibe eine Java-Applet und teste die Java-Script Bibliothek zum Einbinden.
- Lese http://java.sun.com/javase/6/webnotes/6u11.html
- Lese http://java.sun.com/javase/6/webnotes/6u12.html
- Lese http://java.sun.com/javase/6/webnotes/6u13.html
Labels: Die wöchentliche Dosis Java
Thema der Woche: Vernünftige Oberflächen, UI-Guidelines
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, März 16, 2009.Dass es unsinnige und schwer verständliche Gui-Oberflächen geht ist spätestens dann klar, wenn man sich folgendes Beispiel anschaut:

Besorge die UI-Guidelines und blättere
- Mac OS X: http://developer.apple.com/ue/
- Windows XP/Windows Vista: http://msdn.microsoft.com/en-us/library/aa511440.aspx
- Java Look And Look Interface Guidelines: http://java.sun.com/products/jlf/
Lese anschließend
- http://www.useit.com/alertbox/ok-cancel.html
- http://www.asktog.com/Bughouse/10MostWantedDesignBugs.html
Labels: Die wöchentliche Dosis Java
Thema der Woche: OSGi
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, März 09, 2009.Zentrale Merkmale der Java-basierten OSGi-Service-Plattform sind das dynamische Einführen, Aktualisieren und Entfernen von Service-Anwendungen zur Laufzeit. Lese das Tutorial http://www.theserverside.com/tt/articles/content/OSGiforBeginners/article.html und führe die Beispiele praktisch durch. (Das mit JSR 277: Java Module System bitte vergessen, denn das ist tot.) Lese anschließend http://en.wikipedia.org/wiki/OSGi#OSGi_Tutorial und finde einige Unterschieden zwischen http://en.wikipedia.org/wiki/Knopflerfish, http://en.wikipedia.org/wiki/Apache_Felix und http://en.wikipedia.org/wiki/Equinox_OSGi.
Labels: Die wöchentliche Dosis Java
Thema der Woche: JUnit 4.x
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Sonntag, März 01, 2009.Dass JUnit 4 auf Annotationen baut, ist bekannt (Kurzeinführung). Weniger bekannt sind die anderen Features, die es zu Erarbeiten geht:
- Überfliege die Neuerungen http://junit.sourceforge.net/README.html
- Was ergibt assertEquals( 1, new Long(1) );?
- Was macht @RunWith?
- Wie stellt man Filters und Sorters ein? Wozu sind sie nützlich und was steckt im Paket org.junit.runner.manipulation?
- Was ist und wie setzt assumeThat() sie um? Was ist das Hamcrest-Projekt und was für Hamcrest Erweiterungen gibt es?
- Was ist eine Theorie?
- Wie schreibt man parametrisierte Tests?
Labels: Die wöchentliche Dosis Java
Thema der Woche: Abdecker
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, Februar 24, 2009.Bei der Codeabdeckung geht es darum herauszufinden, wie viel Programmcode ein Test (etwa von JUnit) abläuft. Wirf einen Blick auf
- http://java-source.net/open-source/code-coverage
- http://cobertura.sourceforge.net/
- http://www.eclemma.org/
- http://coverlipse.sourceforge.net/
Schreibe einen eigenen Testfall mit JUnit und suche eine Apache-Commons-Bibliothek mit Testfällen aus und lasse ein Coverage-Tool laufen.
http://www.atlassian.com/software/clover/ ist ein kommerziellen Tool. Finde heraus, was Clover im Gegensatz zu den freien Tools für Vorteile hat.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Pfuschen erwünscht
3 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, Februar 17, 2009.In der C-Welt gibt es bisher Wettbewerbe für das verpfuschteste Programm (http://www.ioccc.org/). Unter Java gibt es bisher diesen Obfuscated Contest nicht. Aufgabe: Schreibe nach den offiziellen C-Pfusch-Regeln
- To write the most Obscure/Obfuscated [C] program under the rules below.
- To show the importance of programming style, in an ironic way.
- To stress [C] compilers with unusual code.
- To illustrate some of the subtleties of the [C] language.
- To provide a safe forum for poor [C] code. :-)
ein Java-Programm. Beispiel:
class _{static long _
(long __,long ___) {
return __==0 ?___+ 1:
___==0?_(__-1,1):_(__
–1,_(__, ___-1)) ; }
static {int _=2 ,___
= 2;System.out.print(
"a("+_+','+___+ ")="+
_ (_, ___)) ;System.
exit(1);}}//(C)tutego
Ich bin gespannt auf das beste (also schlechteste) Java-Programm...
Labels: Die wöchentliche Dosis Java
Thema der Woche: HTTP Header
3 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, Februar 10, 2009.- Installiere das Firefox-Plugin https://addons.mozilla.org/en-US/firefox/addon/3829 um die HTTP-Header mitzulesen.
- Welche HTTP-Header beim Request und beim Response werden ausgetauscht? http://en.wikipedia.org/wiki/List_of_HTTP_headers gibt eine kurze Erklärung.
- Wie kann man über JSTL und in einem Servlet auf die Header zugreifen?
- Zur Optimierung sollte man den Cache nutzen. Lese http://www.mnot.net/cache_docs/ und verstehe den Expires-Header
- Lies http://www.onjava.com/pub/a/onjava/2004/03/03/filters.html und http://www.agimatec.de/blog/2008/05/caching-mittels-http-header/ und setzte den Filter praktisch um.
Labels: Die wöchentliche Dosis Java
Thema des Monats: Programmieraufgaben / JavaBLOG Pause
5 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, Dezember 10, 2008.Aufgabe 1
Brainfuck (http://de.wikipedia.org/wiki/
$ 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: Die wöchentliche Dosis Java
Thema der Woche: SwingX
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, Dezember 02, 2008.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.
- Lies über das Angebot der Webseite http://swinglabs.org/, http://swinglabs.org/projects.jsp
- Verfolge die Präsentationen unter http://swinglabs.org/docs.jsp
- Lade das SwingX-Jar und binde es ein. Hole http://swinglabs.org/hudson/job/SwingX%20Continuous%20Build/javadoc/index.html?org/jdesktop/swingx/package-summary.html vor.
- Nutze in einem Beispiel JXDatePicker, JXMonthView, JXHyperlink, JXImagePanel, JXMultiSplitPane, JXStatusBar, JXTreeTable
- Was unterschiedet JXTable, JXTree, JXList von den Standard Swing-Komponenten?
- Entwickle ein Beispiel mit Klassen aus org.jdesktop.swingx.autocomplete
- Was ist die Aufgabe von org.jdesktop.swingx.action?
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
- http://forums.java.net/jive/thread.jspa?threadID=52665&tstart=0
- http://www.pushing-pixels.org/?p=758
Labels: Die wöchentliche Dosis Java
Thema der Woche: Das XML-Modell XOM
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Oktober 20, 2008.XOM (http://www.xom.nu/tutorial.xhtml) ist ein XML-Modell von Elliotte Rusty Harold, welches eine Alternative zu DOM, aber auch zu moderneren XML-Modellen JDOM und dom4j ist.
- Lies die Einführung unter http://www.xom.nu/tutorial.xhtml und implementiere Beispiele
Um die Philosophie hinter dem Design zu verstehen, hat Elliotte Rusty Harold mit Bill Venners auf artima ein Interview geführt.
- In Part I: What's Wrong with XML APIs, Harold discusses the five styles of XML APIs and the problems with data-binding XML APIs.
- In Part II. The Good, the Bad, and the DOM, Harold discusses the problems with the DOM API, and the design lessons he learned from DOM.
- In Part III. A Design Review of JDOM, Harold discusses the problems with the JDOM API.
- In Part IV. Lessons Learned from JDOM, Harold discusses the design lessons he learned from the JDOM API.
- In Part V. Design Principles and XOM, Harold discusses the API design principles that guided the design of XOM.
Aufgabe: Gehe mit XOM und XPath an das XML-Ergebnis einer REST-Abfrage http://www.flickr.com/services/api/flickr.places.findByLatLon.html und gib nur die place_url aus.
http://acs.lbl.gov/nux/ lässt sich als Erweiterung von XOM verstehen. Was macht NUX genau?
Labels: Die wöchentliche Dosis Java
Thema der Woche: Sun Certified Java Programmer (SCJP)
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Samstag, Oktober 11, 2008.The Sun Certified Java Programmer (SCJP) exam is the entry level Java exam and is a prerequisite to a number of the other Java-related certifications. SCJP 6, designated CX-310-065 by Sun, was released in December 2007. It is designed to have a fairly detailed test of basic knowledge of the essentials of the Java programming language. It tests looping constructs and variables, and does not cover specific technologies such as GUI creation, Web or network programming. It is assessed through an automatically administered multiple-choice test system and consists of 72 questions which the candidate has 210 minutes to answer. At least 47 questions are needed to be correct to pass (around 65%). The SCJP 5 exam tests a candidate on knowledge of declarations, access control, object orientation, assignments, operators, flow control, assertions, string handling, I/O, parsing, formatting, generics, collections, inner classes, threads and the JDK toos (Quelle: http://en.wikipedia.org/wiki/Sun_Certified_Professional).
Zur Vorbereitung auf den SCJP gibt es im Netz viele Fragen, die denen aus dem SCJP sehr ähnlich sind. Auch wer kein SCJP machen möchte, sollte sich mit dem Thema beschäftigen, da es doch das tiefe Verständnis der Sprache Java schärft (weniger den Bibliotheken oder dem Design von großen Anwendungen!)
- http://faq.javaranch.com/view?ScjpMockTests
- http://www.javadeveloper.co.in/scjp/scjp-mock-exams.html
- http://www.javadeveloper.co.in/scjp/scjp-simulator.html
- http://certificationking.net/sun.html
- http://www.javaprogrammingworld.com/
- http://www.jchq.net/mockexams/exam1.htm
- http://www.examulator.com/phezam/question.php
- http://www.wickedlysmart.com/SCJPStudyGuide/Java_5_SCJPquestions.html
Labels: Die wöchentliche Dosis Java
Thema der Woche: Continuous Integration mit Hudson
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, September 24, 2008.Lies zunächst http://martinfowler.com/articles/continuousIntegration.html von Martin Fowler über die Motivation von CI in der Softwareentwicklung.
In den letzten Monaten hat sich das Hudson zu einem Publikumslieblig entwickelt. Studiere die folgende Präsentation:
(Hudson stammt vom Kohsuke Kawaguchi, der eine ganze Reihe sehr interessanter Projekte bei Sun macht, etwas JAXB oder auch https://com4j.dev.java.net/. Wer ein Podcast von ihm und Husdon hören möchte: http://blogs.sun.com/glassfishpodcast/entry/episode_007_interview_with_kohsuke)
Blättere ein wenig auf den Seiten unter http://hudson.gotdns.com/wiki/display/HUDSON/Meet+Hudson. Falls ein Projekt mit CSV- oder SVN-Zugriff verfügbar ist teste Hudson.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Refactoring
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Sonntag, August 24, 2008.Refactoring von Code ist eine wichtige Aufgabe von Entwicklern neben der Neuentwicklung von Programmcode. Die Pflege und Aufarbeitung darf natürlich nicht zum Selbstzweck werden, aber langlebige Software muss zwingend für immer die Kriterien Wartbarkeit und Erweiterbarkeit bewahren und gut dokumentiert und verständlich sein.
Den größten Einfluss auf das Thema Refactoring hat das Refactoring-Buch von Martin Fowler, der auf seiner Webseite das Prinzip Refactoring, Refactoring-Tools und News auflistet.
Martin Fowler hat mir erlaubt, seinen Refactoring-Katalog auf Deutsch zu übersetzen: http://www.tutego.com/java/refactoring/catalog/. Gehe kurz über alle Refactorings.
Moderne IDEs erlauben von Haus aus das Refactoring von Code. Im Fall von Eclipse finde zu jedem unterstützten Refactoring ein Beispiel und lasse es von Eclipse umbauen:
- http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickassist.htm
- http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/ref-menu-refactor.htm
Labels: Die wöchentliche Dosis Java
Thema der Woche: Rich Internet Applications mit OpenLaszlo und ZK
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Freitag, Juli 11, 2008.Statt wie bei vielen Java Web-Frameworks HTML-Seiten in das Zentrum zu stellen, gehen moderne RIA (Rich Internet Applications)-Frameworks einen anderen Weg. Im Mittelpunkt stehen dort XML-Dateien, die die View beschreiben, angereichert mit JavaScript für die Interaktion und das Ansprechen von Services in der Middle-Tier. Drei der bekannten Frameworks sind:
- OpenLaslo. http://www.openlaszlo.org/, http://de.wikipedia.org/wiki/OpenLaszlo,
- Flex. http://www.adobe.com/de/products/flex/
- ZK. http://www.zkoss.org/
Verschaffe einen Eindruck über die Frameworks mit dem Demos http://www.zkoss.org/demo/, http://www.openlaszlo.org/showcase, http://www.webspiders.com/flex/.
http://www.openlaszlo.org/lps4/laszlo-explorer/index.jsp?lzr=dhtml bietet unter "Laszlo in 10 Minutes " einen Editor auf der einen Seite und eine Ansicht auf der anderen, so dass man über dem Editor, eigene Programme in der Mini-IDE schreiben kann. Entwickle auf diese Weise einen Umrechner von Euro in Dollar.
Installiere den OpenLaszlo Server (http://www.openlaszlo.org/lps4/docs/installation/). Setze den Euro/Dollar-Umrechner in das Verzeichnis. Schreibe eine einfache JSP (oder echten Web-Service über Java 6 wer will; angelehnt an http://rscreeney.wordpress.com/2006/09/19/laszlo-simple-web-service/), die als Service den aktuellen Umrechnugskurs liefert, worauf das eigene OpenLaslo-Programm zurückgreift. (Wer möchte, kann die Lösung gerne hier als Kommentar reinsetzen.)
Labels: Die wöchentliche Dosis Java
Thema der Woche: Collection-API-Erweiterungen
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Mittwoch, Juni 25, 2008.Die Java-Collection API bietet grundlegende Sammlungen, aber es gibt immer noch Bedarf an mehr. Drei Bibliotheken stechen hier besonders raus:
- http://code.google.com/p/google-collections/
- http://commons.apache.org/collections/
- http://javolution.org/
Lese etwas über die Projekte. Beantworte folgende Fragen:
- Welche neuen Datenstrukturen enthalten Google Collections?
- Welche Autoren arbeiten an Google Collections?
- Welchen Sinn ergeben folgende Szenarien: new ReferenceMap(WEAK, STRONG), new ReferenceMap(WEAK, WEAK), new ReferenceMap(STRONG, STRONG)?
- Was kann man mit der Apache-Klasse ExtendedProperties machen?
- Wofür sind die Typen in org.apache.commons.collections.functors nötig und wie verwendet man sie ? Haben Transformer damit etwas zu tun?
- Warum spricht Javolution an vielen Stellen von "hard real-time compliant"?
- Bewerte den Benchmark http://javolution.org/doc/benchmark.html.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Collection-API
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Juni 16, 2008.Die Collection-API enthält grundlegende Sammlungen für Listen, Kellerspeicher, Assoziativspeicher. Gehe über alle Operationen der folgenden Schnittstellen:
- http://java.sun.com/javase/6/docs/api/java/util/Collection.html
- http://java.sun.com/javase/6/docs/api/java/util/List.html
- http://java.sun.com/javase/6/docs/api/java/util/Queue.html
- http://java.sun.com/javase/6/docs/api/java/util/Set.html
- http://java.sun.com/javase/6/docs/api/java/util/Map.html
Finde je ein Beispiel für keySet(), retainAll(), toArray(), headSet().
Welche Implementierungseigenschaften haben die folgenden Klassen:
- http://java.sun.com/javase/6/docs/api/java/util/HashSet.html
- http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html
- http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html
- http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html
- http://java.sun.com/javase/6/docs/api/java/util/concurrent/PriorityBlockingQueue.html
- http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html
- http://java.sun.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArraySet.html
- http://java.sun.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
- http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentSkipListSet.html
- http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html
- http://java.sun.com/javase/6/docs/api/java/util/HashMap.html
- http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html
- http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html
- http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html
- http://java.sun.com/javase/6/docs/api/java/util/WeakHashMap.html
Fülle eine WeakHashMap mit sovielen neuen java.awt.Point-Objekten, bis es einen OutOfMemoryError gibt. Fange diesen ab und gib die Größe der WeakHashMap aus.
Laufe zum Verständnis der Implementierung folgende Szenerien im Debugger ab:
- Ein Element wird in die HashMap eingefügt, dann erfragt.
- In eine LinkedList bzw. ArrayList werden einige Elemente eingefügt, dann nach ihrer Position erfragt und gelöscht.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Google Web Toolkit (GWT)
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, Mai 26, 2008.Das Google Web Toolkit (GWT) ist ein Web-Framework, mit einem interessanten Ansatz. Statt HTML-Seiten in den Vordergrund zu setzen, schreibt man Gui-Anwendungen in Java mit einer in AWT/Swing bekannten Art (Komponenten/Container und Listener) und lässt diese Anwendung von einem Compiler in JavaScript übersetzten. Die ganze Gui wird somit Teil des Web-Browers. Für den Teil, der nicht im Browser läuft, also die gesamte Geschäftslogik und Datenbank, gibt es eine RCP-Schnittstelle.
Schaue drei Beispiele für die Möglichkeiten von GWT an.
- http://gwt.google.com/samples/KitchenSink/KitchenSink.html
- http://www.gwt-ext.com/demo/ (Der Quellcode der Beispiele ist verlinkt. Hier sollte man auch einen Blick drauf werfen.)
- http://extjs.com/explorer/
Um etwas mehr vom Hintergrund zu verstehen, kann man http://www.maximilien.org/presentations/2006/AJAX_and_GWT_Public_07052006.pdf lesen.
Wer praktisch spielen möchte, kann GWT+Eclipse+Plugin nach dem folgenden Blog-Eintrag installieren. Mehr über die Gui-Komponenten erfährt man in einem Kapitel des Hanser-Verlags (Übersetzung von GWT in Action): Widgets (deutsch).
Labels: Die wöchentliche Dosis Java, GWT
Thema der Woche: Bug-Finder
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Donnerstag, Mai 15, 2008.Bei jedem Software-Projekt sollte die Qualität über einen langen Zeitraum konstant hoch sein. Insbesondere bei wechselnden Team-Mitgliedern kommen aber schnell Inkonsistenzen in die Sourcen und die Qualität leidet. Code-Analyse Tools versuchen aufgrund bekannter Fehler-Pattern genau diese Schwachstellen zu finden. In Java gibt es eine ganze Reihe von Tools. So führt http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java auf:
- Bandera — analyzer for Java
- Checkstyle — analyze Java and apply coding standard
- Classycle — analyze Java class cycles and class and package dependencies (Layers)
- FindBugs — an open-source static bytecode analyzer for Java (based on Jakarta BCEL).
- Jlint — for Java
- PMD (software) — a static ruleset based Java source code analyzer that identifies potential problems.
- Soot — A Java program analysis and compiler optimization framework
Für einige Produkte gibt es Eclipse-Plugins. Teste FindBugs in Eclipse/NetBeans. Studiere die Bugs/Schwachstellen, die FindBugs automatisch finden kann.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Datum und Zeit
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Donnerstag, Mai 08, 2008.An der Datum/Zeit-API wird schon ewig rumgemeckert, und jetzt soll es wirklich gut werden. Lies zunächst die API-Dokumentation der zentralen Standard-Klassen:
- Date
- DateFormat
- SimpleDateFormat
- Calendar
- GregorianCalendar
Was sind die Argumente der Kritiker?
- http://justinsomnia.org/2007/05/dates-and-java-suck/
- http://robsanheim.com/2006/03/13/top-five-worst-apis-in-java/
- http://vafer.org/blog/20041128172956 (Java Dates and other crap)
Eine hervorragende Open-Source-Biblitohek ist http://joda-time.sourceforge.net/. Was macht Joda-Time anders/besser?
Die https://jsr-310.dev.java.net/ möchte endlich eine tolle Datums/Zeit-API in das Standard-Java Version 7 bringen. Was unterscheidet Joda-Time von JSR 310?
Labels: Die wöchentliche Dosis Java
Thema der Woche: Inversion Of Control/Dependency Injection
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, April 14, 2008.Komponenten müssen in irgendeiner Weise auf Dienste (Services) zurückgreifen. Diese Dienste könnte entweder in die Komponenten injiziert werden oder eine Komponente bezieht den Dienst über eine zentrale Service-Factory. Vergleiche die Ansätze Service-Locator und IoC (Spring-Beispiele).
Spring ist nicht der einzige IoC-Container. Verschaffe einen Überblick über
- http://code.google.com/p/google-guice/
- http://hivemind.apache.org/
- http://tapestry.apache.org/tapestry5/tapestry-ioc/
Ob nun IoC grundsätzlich die Beste Lösung ist, oder ob nicht eine einfache Zentrale reicht, ist Thema von http://lateralprogramming.wordpress.com/2008/04/07/why-use-spring-if-you-have-a-hashmap-at-hand/.
Aufgabe:
- Welcher fundamentale Unterschied hat Google Guice gegenüber Spring?
- Frage Google Trends, wie sich die beiden IoC-Framwork sich in letzter Zeit entwickelt haben.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Apache Commons
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, April 07, 2008.Die Apache-Group hat mit ihren vielen Projekten irgendwann bemerkt, dass sie einige Dinge immer wieder programmieren. So ist nach und nach http://commons.apache.org/ entstanden, ein Projekt, welches viele Hilfsklassen implementiert.
- Verschaffe einen groben Überblick über alle Projekte von http://commons.apache.org/, wofür sie da sind und sie leisten.
Vertiefe in http://commons.apache.org/io/ und http://commons.apache.org/lang/ und schaue in die Typbeschreibung jeder Klasse/Schnittstelle.
- Programme eine Beispielprogramm, bei dem die toString()-Methode generisch über ToStringBuilder aufgebaut wird.
- Schreibe ein paar Demos, die Funktionen aus StringUtils, WordUtils nutzen.
- Kopiere eine Datei von einer Stelle zur anderen.
- Nutze passende Klassen/Funktionen aus org.apache.commons.io.filefilter um in einem Vergleiche alle Dateien zu finden, die (älter ein als gewisses Datum sind UND über einer gewissen Größe liegen) ODER (auf eine bestimmte Dateiendungen, wie doc oder rtf, enden).
Labels: Die wöchentliche Dosis Java
Thema der Woche: Bytecode und Obfuscator
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, März 31, 2008.Wie jeder weiß, produziert der Java-Compiler in der Regel Bytecode. Um eine Vorstellung davon zu bekommen, sollte man lesen
- http://en.wikipedia.org/wiki/Java_bytecode
- http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html
Dann je nach Wunsch weitere Kapitel aus der Java Virtual Machine Specification; da ist aber jede Waschmaschine spannender.
Java Bytecode lässt sich disassemblieren, etwa mit javap. Hier sollte man ein Beispiel ausprobieren.
Um den Bytecode unansehnlich zu machen, lässt sich ein Obfuscater einsetzten. Teste die Möglichkeiten von http://proguard.sourceforge.net/ an einem Beispiel.
Labels: Die wöchentliche Dosis Java
Thema der Woche: PDF-Dokumente
3 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, März 25, 2008.PDF ist ein Standard-Dokumentenformat geworden, an dem man nicht vorbeikommt.
- http://en.wikipedia.org/wiki/Portable_Document_Format. Ist die PDF-Spezifikation offen oder geschlossen? Konzipiert Adobe oder ein Gremium weitere Versionen?
Java bietet eine Reihe von Bibliotheken an, die PDF-Dokumente verfassen und darstellen. Bekannter sind:
- http://www.lowagie.com/iText/
- http://www.jpedal.org/
- https://pdf-renderer.dev.java.net/
- http://www.adobe.com/products/acrviewer/acrvdnld.html
Was sind Bibliotheken zum Anzeigen und Erstellen? Welche Einschränkungen sind bekannt? Was kann man mit http://djproject.sourceforge.net/ns/ machen?
Erstelle mit iText aus den Kurzbeispielen http://itextdocs.lowagie.com/tutorial/ eine PDF mit Absätzen, einfachen Tabellen und Bildern. Zeige die PDF mit dem https://pdf-renderer.dev.java.net/ an.
Microsoft versucht mit dem XPS-Standard (http://en.wikipedia.org/wiki/XML_Paper_Specification) eine Alternative zu etablieren. Gibt es dazu irgendwelche Java-Bibliotheken?
Labels: Die wöchentliche Dosis Java
Thema der Woche: Unicode und Kodierungen
2 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, März 17, 2008.Java verarbeitet Zeichen (bisher) intern in 2-Byte Unicode. Gespeichert werden Daten aber in der Regel in UTF-8 oder, für uns in Europa, in Latin-1. Thema der Woche ist Unicode und die Umkodierungen. Am Anfang sollen The Ten Commandments of Unicode von Elliotte Rusty Harold stehen:
- I am Unicode, thy character set. Thou shalt have no other character sets before me.
- Thou shalt carefully specify the character encoding and the character set whenever reading a text file.
- Thou shalt not refer to any 8-bit character set as “ASCII”.
- Thou shalt ensure that all string handling functions fully support characters from beyond the Basic Multilingual Plane. Thou shalt not refer to Unicode as a two-byte character set.
- Thou shalt plan for additions of future characters to Unicode.
- Thou shalt count and index Unicode characters, not UTF-16 code points.
- Thou shalt use UTF-8 as the preferred encoding wherever possible.
- Thou shalt generate all text in Normalization Form C whenever possible.
- Thou shalt avoid deprecated characters.
- Thou shalt steer clear of the private use area.
Da schließen sich nun einige Fragen an, die es zu klären gilt:
- Was ist der Unterschied zwischen ASCII, Unicode 2 und Unicode 4?
- Was ist ein Code-Point? Welche Funktionen in Java 5 sind wegen Unicode 4 hinzugekommen? Welche beiden Funktionen zum Zugriff auf ein Zeichen gibt es? Resultieren daraus Performance-Unterschiede?
- Was ist eine Kodierung? Wie wird sie in Java bestimmt? Durch einen String oder durch eine Klasse?
- Welchen Funktionen/Konstruktoren der Java Klassenbibliothek nehmen eine Kodierungskennung entgegeben? Nenne mehrere Wege, wie man Strings/Byte-Felder umkodiert.
- Gibt es XML-Parser in Java, die Unicode 4 unterstützten? Was sagen die Autoren von XML-Parsern zu Unicode 4?
- Warum kann es beim Datenbankzugriff auf Textspalten Probleme geben? Gibt es dokumentierte Probleme/Lösungen?
Auch neu: tutego's Clip-Art Seite. Links zu weiteren Clip-Art Sammlungen (ohne die lästigen Popup-Menüs) sind willkommen.
Labels: Die wöchentliche Dosis Java
Thema der Woche: Reguläre Ausdrücke
0 Kommentar(e). Veröffentlicht von Christian Ullenboom am Dienstag, März 11, 2008.Reguläre Ausdrücke vereinfachen die Abfragen an Strings radikal. Lese zunächst zur Einleitung
Anschließend sollte man die die API-Doku lesen:
- http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html
- http://java.sun.com/javase/6/docs/api/java/util/regex/Matcher.html
In einer Code-Suchmaschine kann man nun einige Beispiele für Pattern-Nutzung ablesen:
Mehr Beispiele (allerdings auch mit Perl-RegEx, die Java nicht unterstützt) gibt die Seite
Hier sollte man sich ein paar Beispiele anschauen.
Zum Schluss eine Übung: Schreibe einen RegEx-Ersetzer, der aus einem Satz mit der "Basic text formatting" Regel der Wiki-Syntax (http://wiki.splitbrain.org/wiki:syntax) HTML erzeugt. Also soll aus
**bold**
folgendes werden:
<b>bold</b>
Labels: Die wöchentliche Dosis Java
Thema der Woche: Java 5 und Java 6
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Samstag, März 01, 2008.Java 5 ist mittlerweile weit verbreitet, und Entwickler sollten auf der einen Seite die neuen Spracheigenschaften kennenlernen, auf der anderen Seite sich mit dem Update der Bibliotheken beschäftigen. Als Startlinks gelten:
- http://www.tutego.com/java/java-1.5-neuigkeiten.htm
- http://www.tutego.com/java/java-6-mustang-news.htm
Von jeder neue Klasse und Schnittstelle sollte man zumindest den API-Kopf gelesen haben. Besonderes Augenmerk sollten Entwickler auf Generics legen. Hier gilt hervorzuheben das Tutorial http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf. Die Begriffe
- Generischer Typ
- Typparameter
- formalter Typparameter
- parametrisierter Typ
- Typargument
- Wildcard-Typ
- Bounded Wildcard
- upper bound, lower bound
- generische Methode
- unchecked Warnung
- erasure
- Wildcard capture
- multiple bound
solle man sofort einordnen und beschreiben können.
Jeder Entwickler sollte insbesondere alle Anwendungen von Generics bei der Utility-Klasse Collections verstehen:
static<T> booleanaddAll(Collection<? super T> c, T... a)static<T> intbinarySearch(List<? extends Comparable<? super T>> list, T key)static<T> intbinarySearch(List<? extends T> list, T key, Comparator<? super T> c)static<E> Collection<E>checkedCollection(Collection<E> c, Class<E> type)static<E> List<E>checkedList(List<E> list, Class<E> type)static<K,V> Map<K,V>checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)static<E> Set<E>checkedSet(Set<E> s, Class<E> type)static<K,V> SortedMap<K,V>checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)static<E> SortedSet<E>checkedSortedSet(SortedSet<E> s, Class<E> type)static<T> voidcopy(List<? super T> dest, List<? extends T> src)static booleandisjoint(Collection<?> c1, Collection<?> c2)static<T> List<T>emptyList()static<K,V> Map<K,V>emptyMap()static<T> Set<T>emptySet()static<T> Enumeration<T>enumeration(Collection<T> c)static<T> voidfill(List<? super T> list, T obj)static intfrequency(Collection<?> c, Object o)static intindexOfSubList(List<?> source, List<?> target)static intlastIndexOfSubList(List<?> source, List<?> target)static<T> ArrayList<T>list(Enumeration<T> e)static<T extends Object & Comparable<? super T>> Tmax(Collection<? extends T> coll)static<T> Tmax(Collection<? extends T> coll, Comparator<? super T> comp)static<T extends Object & Comparable<? super T>> Tmin(Collection<? extends T> coll)static<T> Tmin(Collection<? extends T> coll, Comparator<? super T> comp)static<T> List<T>nCopies(int n, T o)static<T> booleanreplaceAll(List<T> list, T oldVal, T newVal)static voidreverse(List<?> list)static<T> Comparator<T>reverseOrder()static<T> Comparator<T>reverseOrder(Comparator<T> cmp)static voidrotate(List<?> list, int distance)static voidshuffle(List<?> list)static voidshuffle(List<?> list, Random rnd)static<T> Set<T>singleton(T o)static<T> List<T>singletonList(T o)static<K,V> Map<K,V>singletonMap(K key, V value)static<T extends Comparable<? super T>> voidsort(List<T> list)static<T> voidsort(List<T> list, Comparator<? super T> c)static voidswap(List<?> list, int i, int j)static<T> Collection<T>synchronizedCollection(Collection<T> c)static<T> List<T>synchronizedList(List<T> list)static<K,V> Map<K,V>synchronizedMap(Map<K,V> m)static<T> Set<T>synchronizedSet(Set<T> s)static<K,V> SortedMap<K,V>synchronizedSortedMap(SortedMap<K,V> m)static<T> SortedSet<T>synchronizedSortedSet(SortedSet<T> s)static<T> Collection<T>unmodifiableCollection(Collection<? extends T> c)static<T> List<T>unmodifiableList(List<? extends T> list)static<K,V> Map<K,V>unmodifiableMap(Map<? extends K,? extends V> m)static<T> Set<T>unmodifiableSet(Set<? extends T> s)static<K,V> SortedMap<K,V>unmodifiableSortedMap(SortedMap<K,? extends V> m)static<T> SortedSet<T>unmodifiableSortedSet(SortedSet<T> s)
PS: Beginne bei <T>/<E> bzw. <K,V>, dann <?> und dann den restlichen. max/min sind dann die Generics-"Bonbons".
Wer danach die Nase von Generics immer noch nicht voll hat, beginnt http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html zu lesen. Das ist die umfangreichste Quelle zu dem Thema im Netz.
Labels: Die wöchentliche Dosis Java

