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

Wenzlaff.de – Rund um die Programmierung
mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Blender, KI, Statistik, Krypto und Blockchain
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
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
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.
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)
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
Erst Macports installieren und dann mit
sudo port install maven3
die Installation starten. Dann wie im Installationsfenster beschrieben, maven 3 als default setzen.
Wichtig ist noch, das im ~/.m2/settings.xml das Lokale Repository angegeben wird. Dabei darf das Lokale Verzeichnist nicht
mit ~ gesetzt werden, sondern es muss der komplette Pfad angegeben werden, sonst laufen die Eclipse Plugins nicht richtig.
In
~/.bash_profile
noch:
export M2_HOME=/opt/local/share/java/maven3
export PATH=${M2_HOME}/bin:${PATH}
setzen.
Die Terminal App starten und mit einem Editor die
~/.bash_profile (evl. kontrollieren .profile, .bashrc, /etc/profile )
Datei um den folgenden Eintrag ergänzen:
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
Nach dem restart der Terminal App kann es mit:
echo $JAVA_HOME
getestet werden ob der Eintrag richtig gesetzt wurde.
Auch muss jetzt in jedem Verzeichnis mit:
java -version
die Java Version ausgegeben werden.
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.
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
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.
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 🙂
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){…
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
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?
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
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 Callableimplementieren 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
3.0 erschienen.
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.
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