Java desktop links of the week, March 12

Howdy folks! Big news this week, so let’s just get into it.

  • The big news this week was the announcement by Oracle that JavaFX is to be removed from the JDK from 11 onwards. This was covered in InfoWorld, and in a blog post and white paper by Oracle. In addition to JavaFX being moved to a module that is not shipped with the JDK, there were other Java client announcements made at the same time: Java Web Start and Applet technologies will also be removed from JDK 11 and future releases, and Swing / AWT, being a part of the Java SE spec, will continue to be supported through to 2026. For those of you forgetting the new release plan, JDK 11 is scheduled for release in September of this year. I have received a huge number of emails from people wondering what this means for JavaFX. The answer is – it is now in the hands of the community, with companies like Gluon stepping up to take on the load. You can choose to look at this optimistically (faster releases, easier contributions from community, etc) or cynically (another area that Oracle has abandoned and left the community in charge) – for me, I will write a blog post adding more detail about this as soon as possible.
  • Eric Canull has posted code to GitHub for a JavaFX-based sorting animation app.
  • Pedro Duque Vieira has updated his FXRibbon project to clean up API, etc.
  • Christoph Nahr has posted about Windows GUI DPI scaling in 2018.

Build Spring Boot 2.0 apps with Azure Starters and new VS Code extensions

I’ve said it elsewhere but my new role at Microsoft often places me at the end of a very powerful firehose, and I see a lot of cool stuff going by! Today is no exception – Microsoft has announced full support for Spring Boot 2.0 in the Spring Boot Starters for Azure. In addition to this, there is an updated Spring extension for Visual Studio Code, which allows you to build production-ready apps and easily deploy them to the cloud.
For more details, you should check out the blog post by Yitao Dong.

Java Engineering at Microsoft: Interview with Reiley Yang

Today I have another post in my Java / Azure interview series, this time with Reiley Yang. I met Reiley recently as we were both visiting the Microsoft Shanghai offices at the same time, and I learned more about what he is doing in the area of remote Java debugging with Azure. So, please, enjoy! 🙂

Hi Reiley – can you please introduce yourself to everyone?
Hey, I’m Reiley Yang. I started my career 12 years ago as a C/C++ developer (working on the low level stuff, C Runtime Libraries, compilers, debuggers, etc.), and later worked on different technologies and platforms. My hobbies include working on personal IoT projects, piano playing, woodwork, yard work, and cooking.

You and I met each other recently when we were in Shanghai at the same time, but you’ve been based out of Microsoft HQ in Redmond for some time now. You said you moved from Shanghai partially because you’re a keen piano player but couldn’t easily play piano in Shanghai without annoying your neighbours. Now that you have a bit more space in Redmond, I wondered if any of your piano music was recorded and online?
I do have some recordings, more for myself when I try to see what can be improved, I never published them though. I am a big fan of Chopin and J.S. Bach’s keyboard music. I hope that one day I could play all their works 🙂

When did you start working at Microsoft?
I started in 2006, then quit and worked in a start-up company, and re-joined Microsoft in 2011.

If I recall correctly you previously worked on C++ compilers and the like, and today you find yourself working on Java debugging on Azure. That’s quite a big change! Could you talk more about what you do at Microsoft today, and how you came to be working on Java at Microsoft?
Sure! I started working on the C++ runtime libraries and compilers. Later there was a need to improve the C++ / CLI debugger, which requires knowledge and experience from compiler, so I started to work on debuggers. Since then I’m always connected with debuggers and debugging.

There has been a long history between Microsoft and Java, and Microsoft was not doing well in the Java area in the early years. Now we have put tremendous amount of effort into making Microsoft technologies available for Java developers, and we want Microsoft tools and services to stand out in terms of Java support.

Debugging services in the cloud is hard, we’re experimenting with cloud debugging support for Java, and will add other language support in the future. Here’s a diagram outlining how things go together (click to see a bigger version):

As I understand it, remote debugging is still a proof of concept and you’re still seeking community feedback. How should developers test this functionality, and how should they provide feedback?
We have documented the steps, which explains the steps to debug Java-based Azure Functions in the cloud, and we use GitHub to track issues and collect suggestions.

The scope of the work required for remote debugging is considerable – the debugger must be part of the JVM, it must be exposed through a port in the app service, there must be tooling written that can communicate with this debugger, VS Code will provide a visual interface for remote debugging, etc. It seems like your work cuts across a number of different layers – it must be difficult to line everyone up and get a shared vision of this feature. On top of this, Microsoft has engineering teams in a number of different geographies – how does working on something so complex across so many layers in many geographies work?
There is no magic 🙂

Yes there has been ongoing communications among different teams, the conversations are all based on the BI data and customer feedback. When you put the customers’ requirement in front of the table, you’re more easily to get support from your partner teams.

The VS Code team is in Zurich, Azure Application Platform and Azure Functions team are in Redmond, the Java Debugger team is in Shanghai. Some of the team members need to fight against the jetlag and travel abroad, and some need to switch their working hours so we can have conference meetings across the ocean.

[Jonathan Note: There is a blog post on using VS Code to debug Java applications that might be of interest to readers, as well as a recent article on the latest improvements].

What does a normal day look like for you? Are you able to dive deeply into coding, is there a lot of planning / communication required?
I actually spend a lot of time with customers.

One big difference in the last couple years at Microsoft is the faster release cadence. In the old days, we used to have new release every 3 years, and now it is 3 weeks. We’ve keep a close eye on the feedback from our users, the number of downloads, error reporting, etc. This gives us chance to bring new features to the market as soon as possible, and we can adjust the direction / priority based on the results.

Thanks so much for your time! Do you have any other final words that you want to share with the community?
Yes, I would love to hear how people are using Content Assist / IntelliSense while writing in Java.

What are the most annoying things and what are the features you would love to have. My team is thinking to make improvements in this area, let us know what you would love to have 🙂

We’re looking for crazy ideas that push Content Assist / IntelliSense to a new level using machine learning and AI.

Take one example – developers would spend a considerable amount of time searching for code samples and follow common patterns while using certain API, we want to see whether developers would find it helpful if the IDE could help to generate a code snippet based on the API being used.

Another example is the async feature in Java, will people feel excited if there is a tool to automatically convert sync code to async, or vice versa?

[Jonathan Note: Please leave any feedback you might have for Reiley as a comment below, or else feel free to email me and I will forward it on to Reiley].

Thanks Reiley!

Java desktop links of the week, March 5

Some good links this week – enjoy! 🙂

Azure Cosmos DB async Java SDK now available and open sourced

There are a lot of Java SDKs being released by Microsoft these days, and here’s another: the Azure Cosmos DB folks have released version 1.0.0 of their asynchronous Java SDK, and at the same time they have open sourced the SDK repo! There is a getting started application ready for people to sink their teeth into, and the artifacts are already up in Maven Central. Finally, the team has released a benchmark tool, and they said to me that they could reach 43,000 document inserts per second (on a 16 CPU core Ubuntu VM) for documents of 1KB size in gateway mode.

For those unfamiliar with Cosmos DB, check out the Azure Cosmos DB introduction. In summary, “Azure Cosmos DB is Microsoft’s globally distributed, multi-model database. With the click of a button, Azure Cosmos DB enables you to elastically and independently scale throughput and storage across any number of Azure’s geographic regions. It offers throughput, latency, availability, and consistency guarantees with comprehensive service level agreements (SLAs), something no other database service can offer.” From there you can find quick start documentation for SQL, MongoDB, Graph, Table, and Cassandra.