Blogs:JaroslavTulach:Daily Life
From APIDesign
Daily Life Blog
MineSweeper 3.0 for Your iOS Device. The Christmas Thriller Edition!
In September 2015 I decided to update the MineSweeper on AppStore to version 3.0. With a great pleasure I can announce that now, on December 18, 2015 the version is alive! Why it took so long?
Well, Apple's itunesconnect website is unusable - it isn't enough to upload new version of your application and press button Request Review. The user interface is completely messed up and hidden to make the process as obscure as possible. As a result MineSweeper was laying on the AppStore for six weeks before I found the right address (also pretty hidden) to complain at and was explained what is wrong.
Then, of course, the usual reject. This time it was due to Using images that resemble(!) Apple logo - yes, the MineSweeper is using Safari and iOS icon (check the on-line version). But these icons were present in the previous AppStore version as well. And version 2.3 was approved! Clearly the whole review process suffers from the human factor of the reviewer. What some reviewers find appropriate isn't appropriate for others.
How can I know this is a human factor? Because the new version of the MineSweeper of iOS comes with three translations - English, Czech and German (thanks to Toni) - and I am sure the reviewers checked just the English one. If the check was automatic - e.g. some scan through the binary - my submission might have been rejected again. Thankfully it wasn't. It is great we made it before Christmas, as next week the whole AppStore team is going for a vacation...
Here are the changes against standard MineSweeper source code to make the application releasable on the AppStore this time: https://github.com/jtulach/minesweeper/compare/9fc7970496a...0d6984c73
Enjoy version 3.0 of Fair MineSweeper on AppStore. Visit https://itunes.apple.com/us/app/fair-minesweeper/id903688146 to play fair!
--JaroslavTulach 05:07, 18 December 2015 (UTC)
OracleLabs in Prague is Hiring!
OracleLabs has a team in Czech Republic and is looking for new candidates to expand it. Innovation is feeding us, but that doesn't mean you have to be a scientist. We have enough clever people - we need also somebody to work!
In case you are interested in conquering the world with the fastest (J)VM on the planet backed by a strong tooling (based on NetBeans) write to me.
--JaroslavTulach 07:44, 7 October 2015 (UTC)
Can Java Speed Ruby up? Yes, ten times!
Speed of Ruby has never been great. There were many attempts to improve it, but none delivered on its promise. All failed, but one! JRuby implementation running on top of JVM spiced with a bit of Truffle and Graal is in fact ten times faster than standard Ruby version.
Watch this video to see how can Java and its virtual machine help those other poor and slow languages!
--JaroslavTulach 12:28, 2 October 2015 (UTC)
Speaking at JDD in Krakow
I'll be speaking at JDD in Krakow in middle of October. In case you have a Java related message to deliver to the JDD galaxy, leave it here. I'll do my best to deliver it.
I enjoyed Krakow JDD conference in 2013 and based on my experiences I wrote the languages essay. Now I am invited to speak at JDD 2015 about Truffle and Graal and while there I am also going to do a workshop about DukeScript.
If you have a message that I should share with visitor's in Krakow, leave it here:
<comments/>
--JaroslavTulach 09:31, 25 September 2015 (UTC)
Truffle Debugging in NetBeans 8.1
Debugging any Truffle language is now quite easy in NetBeans 8.1! Check the video:
--JaroslavTulach 14:10, 11 September 2015 (UTC)
HTML/Java version 1.2.1 has been Released!
Cross platform UI library called HTML/Java API (which is developed by the NetBeans project) is proud to announce that version 1.2 has just been released on Maven central. See javadoc to find out what is new in this version!
The project is also glad that binaries of the new HTML/Java version 1.2 are now included in forthcoming NetBeans 8.1 release making it easy to develop wizards as well as components and dialogs in a cross-platform manner (e.g. able to run in NetBeans platform applications, IDE, Eclipse RCP, plugin-less browser and thanks to adoption by DukeScript project also on iOS and Android).
HTML/Java API is the heart of Java that is written once, and displayed everywhere!
--JaroslavTulach - HTML/Java inventor 06:16, 2 September 2015 (UTC)
Design with Truffle. Get Debugger for Free!
Truffle - a modern way to write AST interpreters - gives you not only speed, but also debugger for free:
The picture shows NetBeans debugger stopped in middle of simple language (an artificial language used for demo purposes) method. NetBeans knows nothing about simple language (that is why syntax coloring is missing), but as NetBeans understands the Truffle AST, it can still provide enough valuable information in the debugger.
Please note that the name of the method is properly recognized and shown on top of the stack. Variables a and b and their values are properly shown as well.
Designing your own language? Do you want to spend time writing a debugger? If not, use Truffle and you'll get your debugger for free!
--JaroslavTulach 16:04, 24 June 2015 (UTC)
JavaScript is a New Assembly Language
Ever felt JavaScript is your carrier path? Well, maybe you should re-think you future! JavaScript is just another assembly language!
--JaroslavTulach 21:02, 5 April 2015 (UTC)
NetBeans History: University Beginnings
The original name of the project was Xelfi and it started at MatFyz faculty of Charles University in middle of 90-ties. However it was so successful that it had to turn into something as successful as NetBeans. In case you are satisfied with your IDE, consider reading about its root...
--JaroslavTulach 16:04, 20 March 2015 (UTC)
Can Real Threads be Brought to JavaScript?
What it would take to bring Java like threads into JavaScript (via Bck2Brwsr VM)? Here is my [[1]]!
--JaroslavTulach 09:52, 22 January 2015 (UTC)
Bck2Brwsr @ 0.13 Released
Bugfix release of Bck2Brwsr 0.13 is out and it powers another classical game: fifteen. Give it a try!
--JaroslavTulach 09:27, 12 January 2015 (UTC)
Bck2Brwsr @ 0.12 Released
Bck2Brwsr 0.12 has been released. What is new?
Libraries can be pre-compiled and published as Maven artefacts (see Bck2BrwsrLibraries how to). The Knockout4Java Maven archetype has been modified to use the precompiled version of Bck2Brwsr rt. jar emulation library and HTML/Java APIs:
$ mvn archetype:generate \ -DarchetypeGroupId=org.apidesign.html \ -DarchetypeArtifactId=knockout4j-archetype \ -DarchetypeVersion=1.1.2 \ -Dbck2brwsr=true # answer few questions... $ cd nameofyourproject # run on desktop $ mvn process-classes exec:java # run in a browser $ mvn -Pbck2brwsr clean package bck2brwsr:show
Supporting Bck2BrwsrBlobURLs so one can display images available as in JAR resources.
Happy Year 2015 and please help me get Java Bck2Brwsr!
--JaroslavTulach 21:53, 1 January 2015 (UTC)
Wrap Your JAR as OSGi Bundle via Maven Easily!
Not all artifacts in a Maven repository are packaged as OSGi bundles. Yet, some systems (like for example the Bck2Brwsr ahead-of-time compiler) require JAR to contain OSGi meta-data. Luckily there is a simple way to turn any JAR into OSGi bundle by creating a simple Maven project. Here is the sample pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion>4.0.0</modelVersion> <groupId>your.group.id</groupId> <artifactId>jar-id</artifactId> <version>1.0-SNAPSHOT</version> <packaging>bundle</packaging> <!-- we want to produce an OSGi bundle --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <repositories> <!-- we are wrapping a JAR from NetBeans Maven repository --> <repository> <id>netbeans</id> <name>NetBeans</name> <url>http://bits.netbeans.org/maven2/</url> </repository> </repositories> <dependencies> <!-- specify the dependency you want to wrap as OSGi bundle --> <dependency> <groupId>org.netbeans.external</groupId> <artifactId>nb-javac-api</artifactId> <version>RELEASE80</version> <!-- we need the dependency only during compilation --> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>3.3.0</version> <extensions>true</extensions> <configuration> <instructions> <!-- export the packages that should be externally accessible --> <Export-Package>javax.*</Export-Package> <!-- list other packages that should be included in your bundle --> <Private-Package>com.sun.*</Private-Package> </instructions> <Embed-Dependency>*;scope=provided</Embed-Dependency> </configuration> </plugin> </plugins> </build> </project>
And that is all! After building the project, you'll get an OSGi bundle that contains all the classes from the specified dependency found in exported and private packages. Just copy the above text into pom.xml file and in its directory execute yourself:
$ mvn package $ unzip -l target/jar-id-1.0-SNAPSHOT.jar # shortened ... 4539 2014-02-14 11:52 com/sun/source/util/Trees.class 125 2014-02-14 11:52 com/sun/source/util/package-info.class 5109 2014-02-14 11:53 javax/annotation/processing/AbstractProcessor.class # ...shortened $ unzip -p target/jar-id-1.0-SNAPSHOT.jar META*MAN* Manifest-Version: 1.0 Bnd-LastModified: 1417267436493 Build-Jdk: 1.8.0_25 Bundle-ManifestVersion: 2 Bundle-Name: jar-id Bundle-SymbolicName: your.group.id.jar-id Bundle-Version: 1.0.0.SNAPSHOT Created-By: Apache Maven Bundle Plugin Export-Package: javax.annotation.processing;uses:="javax.lang.model,java x.tools,javax.lang.model.element,javax.lang.model.util";version="1.0.0. SNAPSHOT",javax.lang.model.util;uses:="javax.annotation.processing,java x.lang.model,javax.lang.model.element,javax.lang.model.type";version="1 .0.0.SNAPSHOT",javax.lang.model;uses:="javax.lang.model.element";versio n="1.0.0.SNAPSHOT",javax.tools;uses:="javax.lang.model.element,javax.an notation.processing,javax.lang.model";version="1.0.0.SNAPSHOT",javax.la ng.model.type;uses:="javax.lang.model.element,javax.lang.model";version ="1.0.0.SNAPSHOT",javax.lang.model.element;uses:="javax.lang.model.type ,javax.lang.model";version="1.0.0.SNAPSHOT" Import-Package: javax.annotation.processing,javax.lang.model.element,jav ax.lang.model.type,javax.lang.model.util,javax.tools Tool: Bnd-1.50.0
Wrap your JAR's into OSGi bundles and let Bck2Brwsr obfuscate them effectively per library - see the Bck2BrwsrLibraries howto!
Converting Truffle
I've just converted Truffle to OSGi bundle with following simple script. As I was interested only in PolyglotEngine class, I exported just the single package:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>truffleosgi</artifactId> <groupId>org.apidesign.demo</groupId> <packaging>bundle</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.oracle.truffle</groupId> <artifactId>truffle-api</artifactId> <version>0.22</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>3.3.0</version> <extensions>true</extensions> <configuration> <instructions> <!-- I am interested only in PolyglotEngine --> <Export-Package>com.oracle.truffle.api.vm</Export-Package> <!-- list other packages that should be included in your bundle --> <Private-Package>META-INF.*,com.*</Private-Package> </instructions> <Embed-Dependency>*;scope=provided</Embed-Dependency> </configuration> </plugin> </plugins> </build> </project>
--JaroslavTulach 13:07, 29 November 2014 (UTC)
Duke Choice Award
DukeScript has been awarded a Duke Choice Award! Here is picture of Toni Epple and me holding the Duke Choice Award on Sep 28, 2014:
Long live Java and HTML on every device (iOS, Android and co.)!
--JaroslavTulach 17:37, 29 September 2014 (UTC)
Play MineSweeper to Become iOS, Android, JavaFX & co. Developer
Since Sep 15, 2014 the MineSweeper NetBeans integration can be used as a starting point to develop own DukeScript applications. Just press the Develop button and a new project wizard will be opened as following picture shows:
--JaroslavTulach 10:57, 15 September 2014 (UTC)
JavaOne2014: Need Speakers for My Session!
JavaOne2014 is around the corner and my sessions have been scheduled. I start with a BOF on Monday evening called Virtually Inside-Out! - it is going to be discussion between authors of alternative JVMs. So far we are two: I have mine Bck2Brwsr and Niklas has RoboVM.
Don't you know a developer working on own JVM who will be at JavaOne2014? If so, please tell him to contact me and stop by! I plan to make the BOF a lively chat (how did you implemented lambdas?, how did you implemented defender methods?), but in case we don't have a topic to talk about, I am ready to explain why value classes should not be in JVM and why InvokeDynamic is a completely stupid idea. Anyone from JDK team to defend these proposals?
On Tuesday morning Toni and me will continue with DukeScript tutorial. In case you use Java and want to learn how to code for iOS, Android, JavaFX and browsers, stop by. We will help you create your first application that is written once and displayed anywhere!
I'll finish on Tuesday noon talking about API Design checklist. I'd like to name at least ten things one should check for, but so far I have about two. Don't you have any idea what could be in such checklist? If so, please talkback!
--JaroslavTulach 18:56, 10 September 2014 (UTC)
Develop in NetBeans and Deploy to AppStore
Minesweeper for iOS has been published. First iBrwsr powered DukeScript application has been deployed to AppStore. If you own an iPad or iPhone, give it a try: https://itunes.apple.com/us/app/fair-minesweeper/id903688146
And don't forget you can use NetBeans to develop such applications yourself! Install DukeScript NetBeans support.
--JaroslavTulach 15:29, 21 August 2014 (UTC)
Develop in NetBeans and Deploy to GooglePlay
Minesweeper for Android has been published. First DlvkBrwsr powered DukeScript application has been deployed to GooglePlay. Give it a try: https://play.google.com/store/apps/details?id=org.apidesign.demo.minesweeper
And don't forget you can use NetBeans to develop such applications yourself! Install DukeScript NetBeans support.
--JaroslavTulach 05:17, 31 July 2014 (UTC)
Japanese Translation is Real
Cover of Japanese translation of TheAPIBook. I am amazed, the book is about 30% shorter, yet is seems to contain all the content of the original one!
Great work Yoshiki!
--JaroslavTulach 06:51, 17 July 2014 (UTC)
Bck2Brwsr Revision 0.9 is Released!
Version 0.9 eliminates useless stack assignments. Instead of doing
var stI0 = lcI0; var stI1 = lcI1; var stI0 = stI0 + stI1; return stI0;
the now generated code is
return lcI0 + lcI1;
which is shorter and more human readable. However I doubt the V8 virtual machine sees any benefits - I think the final native code remains the same. But at least the debugging of the generated JavaScript code is now easier - there is less Step Over invocations and it mimics more closely the original Java source.
Optimized the ahead-of-time compilation, so now the
http://xelfi.cz/minesweeper/bck2brwsr/
demo starts up instantly. I had to do it, because it was so embarrassing to see TeaVM to boot the same application so quickly: The initial delay is gone, and moreover it downloads necessary libraries in parallel and on background. Now we are ready for next step: share the libraries between different applications.
Can ObfuscatePerLibrary - e.g. each JAR gets compiled ahead-of-time into its own JavaScript file, which can be shared between many applications.
--JaroslavTulach 06:34, 10 June 2014 (UTC)
Podcast related to Japanese Translation
Japanese translation announcement: --JaroslavTulach 18:45, 2 June 2014 (UTC)Debug Mixed Java/JavaScript Applications
Before Nashorn (the JDK8 JavaScript engine) performing calls between Java and JavaScript was a pain. Especially when it came to debugging. But now, one can completely freely mix Java and JavaScript inside of a single thread and still be able to debug and inspect the slightest details of Java as well as JavaScript stack frames.
See video showing the power of the synergy between NetBeans 8.0 and Nashorn!
--JaroslavTulach 15:53, 20 February 2014 (UTC)
Japanese Translation of Practical API Design
The Japanese translation of my book has been in progress for several months. Recently I've been asked by Yoshiki to write a preface.
I wrote one and I tried to express how wonderful experience it had been to participate in the Japanese translation. I believe the Japanese version of my book will be great.
Thanks Yoshiki for your work. Dear (Japanese reading) readers, enjoy!
--JaroslavTulach 09:28, 27 January 2014 (UTC)
Unify Eclipse and NetBeans UI
I've managed to prototype a way to share UI between two rich client platforms. These days it is popular to use HTML, so I did it. However in addition to that I managed to remove all need for JavaScript. Design in HTML and code your application logic in Knockout4Java.
See how!
--JaroslavTulach 18:01, 21 December 2013 (UTC)
JavaFX for iOS via NetBeans
I am pleased to announce there is now a way to develop applications for iOS using your favorite language (I mean Java) and your favorite development IDE (I mean NetBeans).
With the help of Prague's JavaFX iOS team we now have a NetBeans plugin that helps anyone develop JavaFX based Java apps for iOS. Many thanks should also go to RoboVM guys for creating such easy to use Maven plugin.
--JaroslavTulach 12:42, 10 December 2013 (UTC)
API Design Guidelines
I have discovered a nice checklist of guidelines considered good for API design.
--JaroslavTulach 09:30, 2 December 2013 (UTC)
Cloud IDE for Kids
Scratch is getting better and better. If you have not done that yet, give it a try!
--JaroslavTulach 08:48, 2 December 2013 (UTC)
The Smallest Linux JDK
The profiles support is coming for JDK8. Not only it is coming, it works! In case you are searching for a small Java, give profiles a try. They are easy to start with.
--JaroslavTulach 15:12, 27 November 2013 (UTC)
DEW - Java Meets Web with Your Help!
I'm proud to announce DEW - the development environment for web (of course in Java). I am tired of observing JavaScript being on the rise while pretending it is more than just a script language. The real language is Java and it does quite well with HTML. Check DEW here: http://dew.apidesign.org/dew/ and you will not regret!
The more you fiddle with DEW and the more you alter (and save) the samples, the more we will help Java get Bck2Brwsr!
--JaroslavTulach 16:56, 28 October 2013 (UTC)
Maven and Bck2Brwsr 0.8
I've just updated instructions to use bck2brwsr 0.8 from command line. Me and Jonathan Fuerth also verified that the Bck2Brwsr Maven archetype can now be used in Eclipse.
Nothing can stop us from bringing Java Bck2Brwsr!
--JaroslavTulach 12:22, 29 September 2013 (UTC)
Use the Debugger, Stupid!
Debugger is a very useful tool. I greatly recommend it to everyone who asks stupid questions on mailing lists and reports vague bugs into bug tracking systems. If your application does not work: use the debugger! Read here to learn how.
--JaroslavTulach 09:17, 20 August 2013 (UTC)
Bck2Brwsr 0.7 Released!
Write applications once and deploy them to FXBrwsr as well as Bck2Brwsr:
- FXBrwsr with full debugging support and a demo
- Dual Twitter demo - single source code, dual deployment (watch the same demo)
- Lightweight, generic JSON <-> Java mapping: javadoc
- ProviderAPI and a TCK to bind to other technologies than Bck2Brwsr, Knockout.js and FXBrwsr: javadoc
- Follow naming convention -- now bck2brwsr-maven-plugin -- thanks to Miloš Kleint
--JaroslavTulach 07:50, 9 May 2013 (UTC)
Bck2Brwsr 0.6 is Released!
Now you can write your own real applications for browser in Java:
- Full featured demo Twttr demo
- Bck2Brwsr provides better binding of complex classes (defined by a special @Model) annotation
- The @Model classes can be obtained from a server via JSON and JSONP. Use @OnReceive annotation
- Browser testing harness has nicer output with UL and expandable LI
--JaroslavTulach 21:24, 14 April 2013 (UTC)
Older Blog Posts
--JaroslavTulach 21:00, 14 April 2013 (UTC)