https://vaadin.com/blog/-/blogs/vaadin-7-5-released
Und tutego hat auch ein Seminar dazu: http://www.tutego.de/seminare/java-schulung/Vaadin-Framework-Kurs.html
https://vaadin.com/blog/-/blogs/vaadin-7-5-released
Und tutego hat auch ein Seminar dazu: http://www.tutego.de/seminare/java-schulung/Vaadin-Framework-Kurs.html
Meine jrtf Bibliothek https://github.com/ullenboom/jrtf/blob/master/README.md ist jetzt auch im Maven-Verzeichnis zu finden: https://repo1.maven.org/maven2/com/tutego/jrtf/
Eine Diskussion unter https://brendaneich.com/2015/06/from-asm-js-to-webassembly/.
Java EE 7 Hands-on Lab gibt es hier: https://github.com/javaee-samples/javaee7-hol. Das ganze aufbereitet: https://htmlpreview.github.io/?https://github.com/javaee-samples/javaee7-hol/blob/master/docs/javaee7-hol.html. Das Tutorial ist von Arun Gupta, der sicherlich auf GitHub Erweiterungen gerne annimmt.
Zitat ZDNet:
„Oracle begründet die Verschiebung in einem Blogbeitrag zum einen mit Verzögerungen bei der Gründung der nötigen Expertengruppen. Zum anderen hätten die Spec Leads noch anderweitige Verpflichtungen, so dass sie sich nicht voll auf Java EE 8 konzentrieren konnten.“
Die 267 MiB voller Spaß und Freude gibt es hier: https://eclipse.org/downloads/packages/release/Mars/RC1.
Für den Suchfall mit Java RegEx gibt es noch eine Erweiterung, dass nämlich die Pattern-Klasse die Fundstellen nicht nur ermittelt, sondern sie auch durch etwas anderes ersetzen kann.
Beispiel: In einem String sollen alle Nicht-JVM-Sprachen ausgepiept werden:
String text = „Ich mag Java, Groovy und ObjectiveC und PHP.“;
Matcher matcher = Pattern.compile(„ObjectiveC|PHP“ ).matcher( text );
StringBuffer sb = new StringBuffer();
while ( matcher.find() )
matcher.appendReplacement( sb, „[PIEP]“ );
matcher.appendTail( sb );
System.out.println( sb ); // Ich mag Java, Groovy und [PIEP] und [PIEP].
Um mit dem Mechanismus „Suchen und Ersetzen“ zu arbeiten, wird zunächst ein Container vom Typ StringBuffer aufgebaut, denn in dem echten String kann Pattern die Fundstellen nicht ersetzen. (Leider ist ein StringBuffer nötig, die API akzeptiert keinen StringBuilder.) Erkennt der Matcher ein Muster, macht appendReplacement(…) zwei Dinge:
1. Die Methode füllt den Container mit allen Zeichen vom letzten Fund bis zur jetzigen Fundstelle auf. Beim ersten Aufruf ist das „Ich mag Java, Groovy und “, dann folgt „ und “.
2. In den StringBuffer können wir unsere Ersetzung, in diesem Falle „[PIEP]“, setzen.
So wächst der StringBuffer von Schritt zu Schritt. Nach der letzten Fundstelle setzt appendTail(…) das noch verbleibende Teilstück von der letzten Funstelle bis zum Stringende in den StringBuffer-Container.
Im Prinzip können wir in der while-Schleife mit matcher.group(…) auf das Fundstück zurückgreifen und es in die Ersetzung einbauen. Doch toll an appendReplacement(…) ist, dass der Ersetzungsstring ein $ enthalten darf – mit dem Problem, dass ein vorkommendes Dollar-Zeichen ausmaskiert werden muss –, der Zugriff auf die Suchgruppe bietet. Damit lassen sich sehr elegante Lösungen bauen. Nehmen wir an, wir müssen in einer Zeichenkette alle URLs in HTML-Hyperlinks konvertieren. Dann rahmen wir einfach jede Fundstelle in die nötigen HTML-Tags ein. In Quellcode sieht das so aus:
Listing 2.7: RegExSearchAndReplace.java, main()
String text = „Hi, schau mal bei http://stackoverflow.com/ “ +
„oder http://www.tutego.de/ vorbei.“;
String regex = „http://[a-zA-Z0-9\\\]+\\.[a-zA-Z]{2,3}(\\S*)?“;
Matcher matcher = Pattern.compile( regex ).matcher( text );
StringBuffer sb = new StringBuffer( text.length() );
while ( matcher.find() )
matcher.appendReplacement( sb, „<a href=\“$0\“>$0</a>“ );
matcher.appendTail( sb );
System.out.println( sb );
Der StringBuffer enthält dann zum Schluss „Hi, schau mal bei <a href=“http://stackoverflow.com/“>http://stackoverflow.com/</a> oder <a href=“http://www.tutego.de/“>http://www.tutego.de/</a> vorbei.“. (Der gewählte reguläre Ausdruck für URLs ist kurz, aber nicht vollständig. Für das Beispiel spielt das aber keine Rolle.)
Tipp: Die String-Methoden replaceAll(…) und replaceFirst(…) ersetzen direkt, und arbeiten im Hintergrund genauso. Zum Einsatz kommt die replaceAll(.,.)-Methode vom Matcher.
Hinweis: Der Ersetzungsausdruck „<a href=\“$0\“>$0</a>“ enthält mit $ Steuerzeichen für den Matcher. Wenn die Ersetzung aber überhaupt nicht mit $n auf das gefundene Wort zurückgreift, sollten die beiden Sonderzeichen \ und $ ausmaskiert werden. Auf diese Weise werden merkwürdige Fehler vermieden, wenn doch in der Ersetzung ein Dollar-Zeichen oder ein Backslash vorkommt. Das Ausmaskieren übernimmt die Methode quoteReplacement(…), sodass sich zum Beispiel Folgendes ergibt:
matcher.appendReplacement( sb, Matcher.quoteReplacement( replacement ) );
doppio (Ohne Lizenz). Komplette JVM in Typescript, also JavaScript. Siehe auch Demo
Jolokia (Apache 2). JMX-HTTP Bridge, die JSON nutzt
Metrics (Apache 2). Metriken erfassen und über Reporters (JMX, Console, …) melden
jmh (GPL v2). Verlässliche Benchmarks, siehe auch JMH Samples
Caliper (Apache 2). Java-Microbenchmarks-Bibliothek von Google, weniger perfekte Ergebnisse als jmh, doch mit Visualisierung
UndecoratorBis (Proprietäre Lizenz). Fensterrahmen von JavaFX-Anwendungen verändern
Java-Chronicle (Apache 2). Performant Daten (Messages) aus Dateien lesen und in selbige schreiben. Autor vom bekannten Vanillajava-Blog
gwt-jet (Apache 2). Erzeugt aus Sammlungen von JavaBeans automatisch GWT-Tabellen und schreibt Änderungen zurück, siehe Showcase
Typescript 4J (Lizenz unspezifiziert). Konvertiert Typescript-Programme in JavaScript-Programme, letztes Update schon etwas her
Apache Avro (Apache). Schnelles Serialisierungs-System
Für den Java 9 Compiler soll eine neue Option hinzukommen, der mit Hilfe von Meta-Daten prüft, ob ein Programm niedrigere Bibliotheken (Java 8, Java 7) nutzten soll. Details unter http://openjdk.java.net/jeps/247.
2015-12-10 Feature Complete 2016-02-04 All Tests Run 2016-02-25 Rampdown Start 2016-04-21 Zero Bug Bounce 2016-06-16 Rampdown Phase 2 2016-07-21 Final Release Candidate 2016-09-22 General Availability
http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-May/002172.html
So wie es Oracle schreibt: http://www.oracle.com/technetwork/java/javase/overview/index.html:
Coincident with the January 2015 CPU release users with the auto-update feature enabled will be migrated from Oracle JRE 7 to Oracle JRE 8. Also, please note the April 2015 CPU release will be the last Oracle JDK 7 publicly available update. For more information, and details on how to receive longer term support for Oracle JDK 7, please see the Oracle Java SE Support Roadmap.
https://www.youtube.com/watch?v=N1rihYA8c2M
https://www.youtube.com/watch?v=WZf0j4GUFYM
Nett gemacht, voll 80er, Code unter https://github.com/chriswhocodes/DemoFX.
Das waren die Vorbereitungen, jetzt können wir zum eigentlichen Java-Programm kommen. Zum Testen soll einfach nur die Orientierung (also der Winkel zur Kinect) in den Winkel einer 3D-Box übertragen werden – dreht man sich vor der Kinect, wird die Box sich mitdrehen. Gleichzeitig gibt es noch einen Text, sodass man den Winkel gleich ablesen kann.
Fertig sieht das so aus:
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.shape.Box; import javafx.scene.text.Text; import javafx.scene.transform.Rotate; import javafx.stage.Stage; import edu.ufl.digitalworlds.j4k.J4KSDK; import edu.ufl.digitalworlds.j4k.Skeleton; public class MovingBody extends Application { private final Box box = new Box( 200, 200, 200 ); private final Text text = new Text( 200, 200, "#" ); class SkeletonTracker extends J4KSDK { @Override public void onSkeletonFrameEvent( boolean[] skeletonTracked, float[] positions, float[] orientations, byte[] jointStatus ) { int skeletonId = 0; while ( !skeletonTracked[ skeletonId ] ) skeletonId++; Skeleton skeleton = Skeleton.getSkeleton( skeletonId, skeletonTracked, positions, orientations, jointStatus, this ); box.setRotate( (int) skeleton.getBodyOrientation() ); // reduce "noise" with (int) text.setText( "" + (int) skeleton.getBodyOrientation() ); text.setRotate( (int) skeleton.getBodyOrientation() ); } @Override public void onColorFrameEvent( byte[] colorData ) { } @Override public void onDepthFrameEvent( short[] depthFrame, byte[] playerIndex, float[] xyz, float[] uv ) { } } public MovingBody() { new SkeletonTracker().start( J4KSDK.SKELETON ); } @Override public void start( Stage primaryStage ) { Group root = new Group(); primaryStage.setScene( new Scene( root, 400, 400 ) ); primaryStage.show(); box.setTranslateX( 200 ); box.setTranslateY( 200 ); box.setTranslateZ( 200 ); box.setRotationAxis( Rotate.Y_AXIS ); root.getChildren().addAll( box, text ); } public static void main( String[] args ) { launch( args ); } }
RoboVM erlaubt es, Java-Anwendungen für iOS und auch Android zu compilieren.
Ankündigung unter http://robovm.com/robovm-1-0-released-commercial-licenses-a-look-under-the-hood/.
Gegenüber der alten Version:
- The debugger has received another round of updates. All JDWP functionality is now implemented.
- Support for RAM disk caches. This can help speed up the compilation and linking process on slow HDDs.
- Support for HFS+ file compression. All files put into the cache are now compressed, further speeding up the compilation process and reducing the amount of space used for the RoboVM cache.
- Initial project template and Maven archetype support.
- A new Eclipse project wizard, using the templates project
- Support for invoking tools via robovm.xml. We currently support the TextureAtlas tool, with more to come.
- Cleanup and simplification of Objective-C bindings, see the binding status page
Neu ist eine kommerzielle Lizenz:
Our commercial license scale with the size of your business, covering solo developers, startups, SMEs and big enterprises. Depending on your plan, you’ll get access to the following features and services:
- JDWP compliant debugger for both simulator and on-device debugging
- Improved crash reporting
- Private e-mail support, with and without SLA
- JavaFX support
- Hotfix support
- Alpha channel access to new commercial features
Schöne Neuerungen in GWT 2.8 und der kommenden Version GWT 3.0.
Folien unter http://gwtcreate.com/slides/. Google Inbox nutzt auch GWT und für iOS den Compiler J2ObjC. Cool! Siehe auch https://github.com/Sfeir/jhybrid.
http://www.oracle.com/technetwork/java/javase/8u40-relnotes-2389089.html.
Und es sind interessante Neuerungen dabei.
The endorsed-standards override mechanism and the extension mechanism are deprecated and may be removed in a future release. There are no runtime changes. Existing applications using the ‚endorsed-standards override‘ or ‚extension‘ mechanisms are recommended to migrate away from using these mechanisms. To help identify any existing uses of these mechanisms, the
-XX:+CheckEndorsedAndExtDirs
command-line option is available.
Grund dafür ist das neue Modulsystem,was in Java 9 kommt.
Und:
Starting with JDK 8u40 release, JavaFX controls are enhanced to support assistive technologies, meaning that JavaFX controls are now accessible. In addition, a public API is provided to allow developers to write their own accessible controls.
JDK 8u40 release includes new JavaFX UI controls; a spinner control, formatted-text support, and a standard set of alert dialogs.
Viele Bugs wurden gefixt: http://www.oracle.com/technetwork/java/javase/2col/8u40-bugfixes-2423829.html
Statische Schnittstellenmethoden erlauben eine neue Möglichkeit zur Deklaration der main(…)-Methode:
interface HelloWorldInInterfaces {
static void main( String[] args ) {
System.out.println( „Hallo Welt einmal anders!“ );
}
}
Das Schlüsselwort interface ist vier Zeichen länger als class, doch mit der Einsparung von public und einem Trenner ergibt sich eine Kürzung von drei Zeichen – wieder eine neue Möglichkeit zum Längefeilschen.
Mustache (Apache). Sehr performantes Mustache-Templating-System für Java, benötigt Java 8.
Capsule (EPL). “Dead-Simple Packaging and Deployment for JVM Apps”. Im Kern ein Fat-Jar-Builder. Ermöglicht auch ausführbare WARs und Capsules können in Docker-Images konvertier werden. Alaternativ: One-JAR.
Pegdown Doclet (GPL 3). Markdown in Javadoc-Kommentaren statt HTML nutzen, inklusive PlantUML und Syntax Highlighting mit highlight.js.
The Checker Framework (GLP 2/MIT). Hängt sich in den Java-Compiler und führt zusätzliche Typ-Prüfungen (Null-Pointer, SQL-Injections, …) durch. Funktioniert toll mit Java 8, da nun an jeder Deklaration eine Annotation erlaubt ist.
Gradle (Apache). Gradle ist Ant in Groovy 🙂