Einfaches Design
Eclipse hat einen Spaltenmodus oder Blockmodus
Eclipse hat seit der Version 3.5 eine Spaltenmodus in jedem Editor (auch XML) inklusive.
Per Taste aktivieren/deaktivieren mit: ALT + SHIFT + A in Windows, oder im Mac alt+cmd+A
Oder per Toolbar wie auf diesem Bild:
Namen in der Programmierung – Mindmap
Sicherheit Mindmap SSL – S/Mime
JUnit Test vs. Clean Code
Wie können in JAXB generierten Klassen automatich eine serializable UID hinzugefügt werden?
Um in jede generierten Klasse ein
private final static long serialVersionUID = 1L;
hinzuzufügen muss in der:
binding.xjb
Datei der folgende Eintrag ergänzt werden:
xjc:serializable uid="1"
Wie kann bei JAXB marshal verhindert werden das „ “ geschrieben wird?
Das geht mit der Property: Marshaller.JAXB_FRAGMENT
Wenn die auf true gesetzt wird, erscheint der XML Tag nicht mehr.
Hier ein komplettes Beispiel für die Serialisierung:
JAXBContext jaxbContext = JAXBContext.newInstance(Map.class);
Marshaller marshaller = jaxbContext.createMarshaller();
// Verhindern des tags:
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(freemindMap, outFile);
Kommentare im Quellcode
Update von Lion iMac OS X 10.7 und Mac BookAir OS X 10.6.8 auf Mountain Lion (Berglöwe)10.8!
1. Im App Store laden (ca. 30 min) (mit Gutscheinkarte von REWE -20% ) hat ca. 200 neue Features, siehe Apple Seite.
2. Installieren (ca. 35 min). „Update von Lion iMac OS X 10.7 und Mac BookAir OS X 10.6.8 auf Mountain Lion (Berglöwe)10.8!“ weiterlesen
Wie können Änderungen auf GitHub ergänzt werden?
Wenn man ein Projekt auf GitHub gefunden hat, wo man Änderungen bzw. Ergänzungen hochladen will, geht dies wie folgt.
Voraussetzung ist, dass man auf GitHub erfolgreich angemeldet ist. „Wie können Änderungen auf GitHub ergänzt werden?“ weiterlesen
Karotz sagt „Hallo Welt“ via Java und wackelt mit den Ohren
Explorer Plugin für Eclipse
Dieses Plugin darf nie fehlen, es bietet einen Explorer, Kopieren ins Clipboard, Öffnen einer Konsole usw. im Kontextmenü.
Die Update URL lautet http://basti1302.github.com/startexplorer/update/ und die
Homepage mit Doku liegt auf github.
Läuft auch mit Eclipse Juno.
Java Api für den Karotz
Natürlich kann der Karotz auch per Java angesteuert werden.
Mit dieser Karotz Java API kann leicht, innerhalb von ca. 1 Stunde per Java auf den Karotz zugeriffen werden.
Anleitung:
Nach dem download, einen Maven import nach Eclipse machen. Es werden 3 Projekte erstellt.
In der KarotzCLI
Klasse den API_DEFAULT und den SECRET_KEY_DEFAULT anpassen.
Die Install ID, Api Key und Secret Key bekommt man im Dashboard angezeigt, nachdem die eigene Anwendung erstellt wurde. Dazu ist es auch notwendig die descriptor.xml Datei entsprechend anzupassen und aus dem karotz/app
Verzeichnis in ein ZIP Archive zu packen und hochzuladen. Nur dann erhält man die Anwendungs bzw. die Install ID.
Dann im Karotz Projekt die POM auswählen, und ein install ausführen.
Dies erzeugt im karotz-cli/target
Verzeichnis das nötige jar.
In dies Verz. wechseln und auf der Kommandozeile folgendes eingeben:
java -jar karotz-cli-0.1-SNAPSHOT.jar -i Install id
Das Programm startet und der Client Prompt erscheint. Mit dem Kommando: led off „geht“ die Lampe des Karotz aus.
Hier das Log: „Java Api für den Karotz“ weiterlesen
Die 1. Version von Java von Oracle.
Das erste Java JDK 7u4 von Oracle mit 97 MB gibt es jetzt hier.
Ein doppelklick startet die Installation. Das Java JDK ist nach /Library/Java/JavaVirtualMachines/1.7.0.jdk
installiert.
In den Utilities -> Java Preferences
kann die Version eingestellt werden.
Hat das sich der Mac OS X einen Flashback Virus eingefangen?
Im Terminal kann man das schnell testen, einfach:
defaults read /Applications/Safari.app/Contents/Info LSEnvironment
eingeben und RETURN drücken und
defaults read ~/.MacOSX/environment DYLD_INSERT_LIBRARIES
und RETURN. Es muss wenn alles ok ist, jeweils folgende Antwort geliefert werden:
"The domain/default pair of (...) does not exist"
Java 7 Open-Book
Seit vorgestern ist der Klassiker in der neuen Version
„Java 7 – Mehr als eine Insel von Christian Ullenboom
Das Handbuch zu den Java SE-Bibliotheken“
als Open-Book, kostenlos im Netz erreichbar, also gleich bookmarken:
http://openbook.galileocomputing.de/java7/
»Ein klassisches Werk ist ein Buch, das die Leute loben, aber nie lesen.«
– Ernest Hemingway (1899–1961)
Welche Java Version gibt es für Mac OS X?
Eine gute Liste der Java Versionen gibt es hier. Oder das Orginal von Apple mit Java Code zur ermittlung der Version.
Die Java Version kann man im Terminal wie folgt ermitteln:
java -version
Es wird dann z.B. geliefert:
java version "1.6.0_29" Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11D50)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)
Umlaute in Java Programmen
Damit die Umlaute nicht nur auf Windows sondern auch auf dem Mac OS X richtig dargestellt werden, müssen sie als Unicode angegeben werden.
Zeichen Unicode
------------------------------
Ä, ä \u00c4, \u00e4
Ö, ö \u00d6, \u00f6
Ü, ü \u00dc, \u00fc
ß \u00df
Java Insel
Jetzt 146 Seite Online von der Java Insel mit den Kap. über Java 7 News und Reflections. Und das Buch in der Ver. 10 unter.
JDK 7 „Diamanten sind für immer“
In Java 7 gibt es jetzt den „diamond Operator“. Nun müssen bei generics keine Typen doppelt deklariert werden.
Hier ein Beispiel vorher und nachher:
List<Integer> liste = new ArrayList<Integer>(); // vor JRE 7
List<Integer> diamantListe = new ArrayList<>(); // ab JRE 7, ja Diamonds are forever
Java 7 ist DA!
So, jetzt ist Java 7 da. Was braucht man zum ausprobieren?
Eine Eclipse Version die Java 7 unterstützt. Das geht noch nicht mit Helios. Deshalb einen „Nightly Build“ herunterladen.
Dann über Update neue Software über diese URL den JDK 7 patch herunterladen.
Was dann noch fehlt ist das JDK 7 von Oracle.
In den Projekt Einstellungen unter Java Compiler die 1.7 auswählen und nun der erste Test.
In Java 1.7 sind jetzt Unterstriche (_) in Literalen möglich, um besser zu gliedern z.B.
1 2 3 4 5 6 7 8 9 10 11 12 |
public class TestJava7 { private static long telefonNummer_1 = 11_22_33_44L; private static double telefonNummer_2 = 11_22.3_3d; public static void main(String[] args) { System.out.println("Telefonnummer 1: " + telefonNummer_1); System.out.println("Telefonnummer 2: " + telefonNummer_2); } } |
Das Ergebnis:
Telefonnummer 1: 11223344
Telefonnummer 2: 1122.33
Weitere Neuerungen mit Beispielen wie „String in switch“ kommen hier dann demnächst.
Eclipse 3.7 da!
Ab jetzt gibt es eine neue Eclipse 3.7 Version genannt Indigo. Mal sehen was es neues gibt. Download über die Eclipse Seite.
Habe das Java Package geladen, und das erste Projekt ins Git Repo geschoben.
Die Home Variable war nicht gesetzt auf das User Verzeichnis, dann lief es.
Hier die EGit-Anleitung.
Maven, da musste ich in den Settings auch die setting.xml setzen, und im Pom einige Goals auskommentiern, da sie mit der neuen Version nicht zusammen passen.
Das Explorer-Plugin läuft auch unter Indigo, super.
Indigo scheint auch schneller zu laufen 🙂
Bedingungen einkapseln
Da boolesche Logik auf den ersten Blick schwer lesbar und zu verstehen ist,
können (sollten) Funktionen extrahiert werden um eine bessere Lesbarkeit zu erhalten.
Z.B.
if (sollGeloeschtWerden(timer)){…
ist besser als:
if (timer.isGueltige() && !timer.isAktuell() || timer > heute){…
Keine negativen Bedingungen verwenden
In if Abfragen verwendete Bedingungen immer positiv formulieren. Das ist besser zu verstehen.
Z.B.
if ( speicher.isLeer() )
ist besser als
if (!speicher.isNichtLeer() )
da pos. formuliert.
Also müsste die Überschrift „Positive Bedingungen verwenden“ heißen. Das wird dann mal später mal geändert. So heißt es immer, und bleibt für immer 😉
Cast von Integraler division zu double
Was wird hier ausgegeben? Also was ist der Inhalt der erg Variable?
int a = 5;
int b = 10;
double erg = a / b;
System.out.println(erg);
a) 0.5
b) 0.0
c) null
d) java.lang.ArithmeticException
„Cast von Integraler division zu double“ weiterlesen
Java Müll, Abfall, Kehricht oder Mist
Halte die Quelldateien sauber und frei von Müll, der da wäre …
- Default-Konstruktor ohne Implementierung
- Nicht benötigte Variablen
- Nicht aufgerufene Funktionen
- Kommentare die keine Informationen hinzufügen
Kennst Du noch weiteren trash?
JUnit mit ein assert pro Test
Die Regel, nur eine assert-Anweisung pro Testmethode zu verwenden, mag drakonisch klingen erleichtert aber die Übersicht (siehe Blog von Dave Astels).
Obwohl ich auch keine Angst habe von dieser Regel abzuweichen.
Was ist Eure Meinung? Wer testet ist feige?
IPhone
Cool, jetzt kann ich auch übers IPhone von überall posten 🙂 Und bearbeiten geht auch 😉 Und noch ein paar Plugins ergänzt ua. den Tweet Button.
Redundanter Kontext in Klassen
Es ist keine Gute Idee, wenn eine Anwendung z.B. „Welt Timer“ heißt,
jede Klasse mit dem Präfix „WT“ zu beginnen.
-In der IDE würde dann, wenn man „W“ und „Completion Key“ eintippt, eine lange Liste aller Namen erscheinen.
-Es währen immer 2 Zeichen redundanter und irrelevanter Code.
-Klassen sollen möglichst kurz sein, solange sie klar sind.
Wieviele Argumente sollte eine Methode haben?
Ideal ldt. Robert C. Martin (Clean Code, 2009) „ist null (niladisch).
Als nächstes kommt eins (monadisch), dicht gefolgt von zwei (dyadisch).
Drei Argumente (triadisch), sollte wenn möglich, vermieden werden.
Mehr als drei (polyadisch) erfordert eine sehr spezielle Begründung – und sollte dann trotzdem nicht benutzt werden.“
Das sehe ich auch so.
Und Ihr?
SwingWorker für Langläufer
Mit der SwingWorker Klasse, können in einem eigenem Thread einfach Swing-Gui Elemente aktualisiert werden ohne das langlaufende Prozesse die GUI blockieren.
z.B. kehrt die execute()
Methode sofort zurück. Es wird die doInBackground()
Methode aufgerufen, wenn die fertig ist,
kann das Ergebnis mit get()
in der „SwingWorker für Langläufer“ weiterlesen
TWNcid neue Version
Es gibt jetzt eine neue Version von
TWNcid und auch von der Java Schnittstelle. Hat jemand diese Schnittstelle schon in Verwendung?
Bei Heise auf Download Rang 529.
Threads mit asynchron Rückgabe über Callable
Um einen neuen Thread zu starten der ein Ergebniss asynchron liefert, gibt es seit Java 1.5 die Schnittstelle Callable
.
Was muss getan werden?
-Die Klasse mit dem Ergebniss muss Callable
implementieren und V call() throws Exception
überschreiben.
-Evl. im Konstruktor der Ergebniss Klasse Parameter mitgeben.
-Dann den Excecutor anlegen ExecutorService executor = Executors.newCachedThreadPool();
-Einen neuen Überwachungs Thread starten mit Future> erg = executor.submit(ergebnisKlasse)
.
Würde man Future> erg = executor.submit(u).get()
verwenden würde eine synchrone abarbeitung des Threads erfolgen. Das heißt es würde die weitere Bearbeitung solange geblockt, bis der Thread fertig ist.
-Mit erg.get(1, TimeUnit.SECONDS)
wird das Ergebnis des Threads geliefert oder aber wenn die angegebenen Zeit abgelaufen ist wird
eine TimeoutException
geworfen.
-Mit erg.isDone()
kann abgefragt werden ob der Thread fertig ist oder nicht
regulärer Ausdruck mit String.matches
In der String Klasse gibt es eine Fassaden Funktion matches
die nur die statische Funktion Pattern.matches
aufruft. Es kann so leicht mit regulären Ausdrücken mit Strings gearbeitet werden. Ein Beispiel:
String i = „Wer den Schaden hat, braucht für den Spott nicht zu sorgen“;
System.out.println(i.matches(„.*Schaden.*“));
Was wird ausgegeben? „regulärer Ausdruck mit String.matches“ weiterlesen
Maven
3.0 erschienen.
Wie sieht eine gute API aus?
Gem. Joshua Bloch „If in doubt, leave it out!“.
Das heißt soviel wie, nur Methoden in eine API aufnehmen, von denen man sicher ist, dass sie auch benötigt werden. Methoden für die man kein verwender hat, sollte man nicht mit aufnehmen. Den Neues kann man leicht
hinzufügen, Bestehendes aber nicht so leicht verändert oder entfernen. Also sich auf das konzentrieren, was
in den Anforderungen gebraucht wird. Sonst wird das System unnötig komplex.
Siehe diesen Video bei ca. 24 min.
Generische Methoden
Das einzig seltsame an generischen Methoden ist, das die Type Variable (hier T) vor dem return Typ der Methode deklariert werden muss.
Hier ein Beispiel mit der getKlassenname Methode, die für alle Objekte den Klassennamen als String zurück gibt.
public class GenericMethods {
public static < T > String getKlassenname(T t) {
return t.getClass().getName();
}public static void main(String[] args) {
System.out.println(GenericMethods.getKlassenname(new Integer(1)));
System.out.println(GenericMethods.getKlassenname("String"));
System.out.println(GenericMethods.getKlassenname(new ArrayList
()));
}
}
Wie sieht das Ergebnis aus? „Generische Methoden“ weiterlesen
Java Client und Server Beispiel
Auch wer sich nicht das aktuelle Javamagazin 9/10 geholt hat, kann jetzt auf der Seite des Javamagazins unter Quellcodes:
http://it-republik.de/jaxenter/java-magazin-ausgaben/Tomcat-7-000409.html den Java Code für einen Client und Server kostenlos laden und lokal ausprobieren (ist natürlich auf auf der beiligenden CD-ROM drauf).
Läuft auch ohne AVR-NET-IO Board.
Java Quiz
Heute mal ein kleines Java Quiz. Schaut Euch mal diese AussenKlasse an, die eine innere Klasse (Innen) in einer Methode definiert hat:
public class AussenKlasse {
private final String aussenVar = "aussenVar";
public void aussenMethode() {
final String innenMethodeVar = "innenMethodeVar";
class Innen {
private final String innenVar = "innenVar";
public Innen() {
printInnen();
}
public void printInnen() {
System.out.println("aussenVar=" + aussenVar);
System.out.println("innenMethodeVar=" + innenMethodeVar);
System.out.println("innenVar=" + innenVar);
}
}
new Innen();
}
public static void main(String[] args) {
AussenKlasse a = new AussenKlasse();
a.aussenMethode();
}
}
Was ist richtig?
1. Die Klasse läßt sich nicht compilieren, da Klassen nicht in Methoden definiert werden dürfen.
2. Es gibt eine ClassCastException.
3. Es wird die printInnnen Methode ausgeführt.
4. Es wird folgendes auf System.out ausgegeben:
aussenVar=aussenVar
innenMethodeVar=innenMethodeVar
innenVar=innenVar
5. Es wird folgendes auf System.out ausgegeben:
aussenVar=
innenMethodeVar=innenMethodeVar
innenVar=innenVar
6. Es gibt eine NullPointerException
Lösung: „Java Quiz“ weiterlesen
Artikel im Java Magazin veröffentlicht
Im aktuellen Java Magazin 9.2010 habe ich einen Artikel über die Java-Netzwerkprogrammierung mit dem AVR-NET-IO-Board veröffentlicht.
Auf der beiligenden CD-Rom oder im Download-Bereich kann ein Java Emulator geladen werden. So können Java Programme auch ohne das AVR-NET-IO-Board getestet werden.
Lesen, lesen, lesen
Wieviel soll ein Software-Entwickler lesen?
„Wir schlagen daher vor, pro Jahr wenigstens 6 Fachbücher zu lesen. Ferner sollten Periodika regelmäßig gelesen werden und darunter verstehen wir neben Fachzeitschriften auch Blogs.“
Quelle: www.clean-code-developer.de
JUnit – assertEquals
Was ist richtig?
...
String testString = testobjekt.getTestwertAlsString();
// a:
assertEquals("expected", testString);
// oder
// b:
assertEquals(testString, "expected");
„JUnit – assertEquals“ weiterlesen
Umlaute beim marshal von XML mit JAXB 2.0
Beim serialisieren von Objekten mit JAXB 2.0 in XML muss das Encoding gesetzt werden, sonst fehlen
die deutschen Umlaute. Dies geht so:
JAXBContext ctx = JAXBContext.newInstance(new Class[] { Exporter.class });
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
marshaller.marshal(this, new FileWriter(file));
Java und Rechnen
Was wird hier ausgegeben?
int dreizehn = 013;
int hundert = 100;
System.out.println(dreizehn + hundert); „Java und Rechnen“ weiterlesen
Ncid Java Client für Easy-Box 802 von Vodafon
Jetzt neue Version 0.1.2 veröffentlicht mit Datei export im TXT und XML Format „Ncid Java Client für Easy-Box 802 von Vodafon“ weiterlesen
String concat vs. StringBuffer
Heute ein kleiner Test. Was gibt folgender Code aus?
String text = "Ich habe ";
text.concat("Hunger!");
System.out.println(text);
„String concat vs. StringBuffer“ weiterlesen
Eine Anmerkung (annotationen)
Seit Java 1.5 gibt es die Annotation (Anmerkung, Beifügung, Hinzufügung).
Java Klassen, Methoden… können z.B. mit @Override zur Strukturierung gekennzeichnet werden.
Wie schreibe ich aber eigene Annotation? Ganz einfach. „Eine Anmerkung (annotationen)“ weiterlesen
Balking (sperrt) Pattern
Der Balking-Pattern kann verwendet werden, wenn nur ein Objekt eine Aktion starten darf, das in einem bestimmten Zustand ist. Alle anderen weiteren Aufrufe, werden solange ignoriert, bis die Aktion abgeschlossen wurde.
Ein Beispiel zum ansteuern einer Schnittstelle „Balking (sperrt) Pattern“ weiterlesen
String „Fri Feb 05 17:15:59 CET 2010“ in Date Objekt umwandeln
Soll der String, der von einen Date.toString()
Methode geliefert werden wieder in ein Date
Objekt umgewandelt werden, geht dies mit dieser Methode. „String „Fri Feb 05 17:15:59 CET 2010“ in Date Objekt umwandeln“ weiterlesen