Angular 2.0 Syndrome
Who remembers Angular these days anyway? I do. But mostly as a synonym for a total failure of maintaining a framework ! -- JaroslavTulach 05:18, 24 August 2025 (UTC)
APIDesign - Blogs
Who remembers Angular these days anyway? I do. But mostly as a synonym for a total failure of maintaining a framework ! -- JaroslavTulach 05:18, 24 August 2025 (UTC)
Is it better to implement filter & co. functions as builtins or better to code them in the same language? What are the pros and cons? Is there a good balance? -- JaroslavTulach 10:36, 10 January 2025 (UTC)
There is a difference between MarketingVersion and engineering approach to versioning. Hear why: read more ... -- JaroslavTulach 05:26, 11 June 2023 (UTC)
Do not expose DeepHierarchy of classes when designing an API! -- JaroslavTulach 05:39, 24 September 2022 (UTC)
Do you like record or other modern Java language features? Would you like to use them on older JDKs? Then read about Frgaal - the retrofit compiler for Java. -- JaroslavTulach 07:10, 23 April 2022 (UTC)
It always helps when maintainers of a library or framework feel the pain of using it themselves. Then they become more open to address limitations of their own design. It's not users of (even of some obscure feature of) a library that shall "feel some pain every time they use it, to keep the usage as limited as possible". The maintainers should feel the pain. That helps them to get more Pragmatic…
Seven years ago, in 2014 I wanted to unify UI of various IDEs around HTML (see below). However the motivation to do so was never compelling enough. Using Swing (or SWT ) is more natural. Finally, in 2021 we found good enough reason: VSCode and its NetBeans based extension! Since December 10, 2021 it is real: one can code HTML UI in Java and display it in VSCode as well as NetBeans . See PR-3349 .…
For a while I ignored my Bck2Brwsr project, which I used to love, but recent back and forth shifts attracted me again to the area of Java and JavaScript interop. Originally I was hoping for a superior transpiler being created, but when I realized the goal isn't to cooperate, but compete, I decided to bring Bck2Brwsr transpiler into the 2021 age : it is still very restriced JVM, but it does support…
Thanks to our DirectAction - e.g. organizing a vote without a common consent - it has been decided that as of 2021 Apache projects can distribute GPLwithClassPathException components in their complementary binaries! -- JaroslavTulach 06:38, 19 July 2021 (UTC)
The Genetics of an API design comes with own surprises: APIs shall not be copied, but only re-implemented. That's the paradox of copying an API! -- JaroslavTulach 06:29, 29 June 2021 (UTC)
Including GradleWrapper .properties in each Gradle project follows the best practices : If you want to be sure your Gradle projects build in a year or two then make sure to always include the GradleWrapper and exactly specify the Gradle version! -- JaroslavTulach 11:31, 22 June 2021 (UTC)
Do you want to run your application on JDK8 , but use JDK11 APIs? That's traditionally done with a reflection. But there is a better way ! -- JaroslavTulach 06:17, 16 February 2021 (UTC)
ScienceOfAPIDesign is possible and can be almost as sharp as the most accurate science of all times - geometry. To achieve such sharpness it is better/easier/more useful to focus on binary compatibility in Java rather than source compatibility. Enhancing language can mitigate many issues, but regular library designers (mere mortals) can't change their language. We can only learn what advises the…
I took a part in a tweetting about incompatibilities related to CharSequence.isEmpty() over the weekend and I asked myself a simple question: Is it possible to add a default method in a 100% binary compatible way? The newly written post provides the answer. Yes, adding default methods to interfaces in a 100% binary compatible way is possible at the end! -- JaroslavTulach 06:10, 30 September 2020…
Micronaut brings compile time annotations to enterprise Java programmers. That's great! -- JaroslavTulach 04:56, 22 July 2020 (UTC)
Helidon MP implements the MicroProfile specification based on various other standard JavaEE subspecifications including CDI . Getting Weld (the reference CDI specification) running on top of NativeImage is particularly tricky. Not only Weld dynamically scans for various annotations, but it also dynamically emits bytecode for its helper classes during runtime. Solving this required more insight…
At the end of May 2020 the GitHub guys announced a Malware attacking developer machines via NetBeans Ant based projects. Read more ... -- JaroslavTulach 15:31, 2 June 2020 (UTC)
PALO ALTO, Calif. - Oct. 20, 1999 - Sun Microsystems, Inc. today announced it has acquired NetBeans Ceska republika a.s., a Czech Republic joint stock company (NetBeans), by means of an asset purchase. NetBeans is a leading developer of cross-platform Java-based integrated development environments (IDE). NetBeans IDE products combined with products from Sun's acquisition of Forte Software, Inc.,…
My first blog post on medium - Improving performance of GraalVM native images with profile-guided optimizations is out. It rounds up my last few months efforts as the -Dgraal.PGOInstrument option is what I have been intermitently working on for at least last year . -- JaroslavTulach 08:47, 30 August 2019 (UTC)
Graal.js version 19.0.0 has been integrated as the default scripting engine into Apache NetBeans 11.1. Read more ... -- JaroslavTulach 14:37, 7 June 2019 (UTC)
SafariOnline now hosts TheAPIBook . No more warez downloads!? I had a presentation for my colleagues about GraalVM . GraalVM is about speed , but also about APIs . As a consequence some of my colleagues asked, why TheAPIBook isn't available for Oracle at https://my.safaribooksonline.com/ - I didn't know, but was curious to find out as well. I sent a note back in April to Apress . Why my Practical…
Time to recap as four years ago, on May 1st, I joined OracleLabs. What has happened during last year? I had fun with collecting profiles for further optimizations. I have fixed my first CVE and make Truffle meta-secure. I turned Java into Universal language . Read more about my FourthGraalAdventures ... -- JaroslavTulach 05:50, 1 May 2019 (UTC)
Designing an API that shall last? Then Never update tests ! The need to update tests is a sign of an incompatible change. -- JaroslavTulach 04:05, 24 January 2019 (UTC)
Nashorn , the so far default JavaScript engine of JDK got deprecated in JDK11 . What are you going to do? Freak out? Jump out of the window? Switch to Rhino ? Give up on Java completely and use NodeJS ? No, use Graal.js ! Here is how : Don't hesitate and make the switch! Apache NetBeans has just switched today! -- JaroslavTulach 19:34, 23 January 2019 (UTC)
Go is great. Are you seeking a low level OS language? Heard about Go & its benefits? Convinced, or just interested, and still searching? If the latter: Have you considered Java ? Because OracleLabs GraalVM NativeImage turns Java into a system language! Read about this alternative to Go . -- JaroslavTulach 13:21, 1 October 2018 (UTC)
Fighting with deadlocks is hard in normal code. In case of APIs it is even harder. Yet, the advice is simple Never hold a lock when calling a foreign code . See the typical example rewritten to be deadlock -free in the dedicated deadlock page. -- JaroslavTulach 07:11, 2 August 2018 (UTC)
Ten years ago, on July 29, 2008, the Practical API Design book was published. Isn't that a date to remember and celebrate? Yeah, it certainly deserves at least a little note. Many things has changed over the last ten years ... The language that I used for most of the examples, Java , is no longer as popular as it used to be. It is no longer taught at basic university courses. It is no longer the…
After few months the newest version of Bck2Brwsr VM is here. It contains: Fast emulation of long numbers based on scala.js one - thanks Sébastien! Gradle tasks - see howto New maven tutorial It was quite a fun to write Gradle tasks together with Maven and build them by Maven . Get started with README . Enjoy. -- JaroslavTulach 04:02, 1 June 2018 (UTC)
Stefan asked who shall be responsible for integration in the MultiGitRepository setup? Should there be an integration guy ? No, its 21st century and we know how to use Git , right? The right tool is called pull request! As such fire your integration guy ! -- JaroslavTulach 07:50, 22 May 2018 (UTC)
Turns out that one gets very useful MultiGitRepository#Appendix_A:_Local_Collaboration_Area : the master branch in each slave repository of the MultiGitRepository setup is in fact the best place for team members to collaborate without publishing the changes to the final integration destination. -- JaroslavTulach 10:54, 4 May 2018 (UTC)
Let me introduces MultiGitRepository - aka Git on steroids to you. I have seen a lot of confusion when it comes to working with multiple repositories and keeping them in orchestration, but I believe it is not that complex. Everything we learned about distributed version controls applies. However this time it has to be applied on a completely new level! Master your MultiGitRepository in few easy…
Using Default Listener Methods is perfectly fine! Those who remember my recent arguments against using DefaultMethods in APIs maybe the surprised by this statement, but it has to be made. Looks like using Default Listener Methods doesn't violate any practices of good API Design . Thanks Dušane, for pointing that out! -- JaroslavTulach 06:49, 19 April 2018 (UTC)
What does term Frontend mean to you? Tell us! -- JaroslavTulach 10:27, 6 April 2018 (UTC)
Recently I observed an incompatible API change and I received following explanation: Everything is OK, my ContinuousIntegration server is still green! In a shock I decided to write a philippic against ContinuousIntegration . If you have to fix your tests in a significant way after making a change to your API , then you should think twice. Maybe such change isn't really compatible enough to become…
Admins! DevOps ! In a recent StackOverFlow developer survey the NetBeans IDE has been rated at 10.9% for Mobile Developers and 8.4% for System Admins/ DevOps . It is weird, but it supports the feeling I had for a long time: NetBeans is the IDE for DevOps ! Read more ... -- JaroslavTulach 11:18, 15 March 2018 (UTC)
Let me coin a new term: Turing speed - the real speed a programming language has. The speed of a general (e.g. Turing complete) computation. Read here why we need such classification. -- JaroslavTulach 08:40, 9 March 2018 (UTC)
Don't use default methods when designing your API . (For example when writing extensible visitor pattern) they just increase fuzziness and that is not what users of your API are searching for! -- JaroslavTulach 11:32, 5 March 2018 (UTC)
Recently I have successfully used the singletonizer API design pattern in Graal 's Graph I/O API javadoc . The result ain't that bad, right? -- JaroslavTulach 06:51, 25 January 2018 (UTC)
Is there anything good on Spring that wouldn't be seen ridiculous by non-enterprise-Java users? -- JaroslavTulach 11:46, 18 December 2017 (UTC)
In need of compiling Java ahead-of-time? See jsonparse example showing a Maven project that can turn your Java code into self-contained, small (less than 5M ) and effective code suitable for your microservice or lamda as a service setups. Thanks to SubstrateVM ! -- JaroslavTulach 12:33, 20 November 2017 (UTC)
Hear the news! As of Oct 23, 2017, there is a release of ApacheNetBeans subproject: HTML/Java API . Hooray NetBeans continues to move on the Apache path! Next target? Apache NetBeans Platform ... -- JaroslavTulach 13:53, 24 October 2017 (UTC)
Designing for JDK9 is going to be more and more important when JDK9 is finally about to be released. However the modular design of Jigsaw brings in new challenges. Hear my story where I tried to update a library to run on headless JDK9: because there is a hidden catch - once you try to use PropertyChangeListener you get whole AWT/Swing user interface with that! Learn how to avoid that:…
Two years ago I asked whether I can design Truffle API without being Domain Expert in the area of partial evaluation. Time has come to summarize my experience . I've written down list of eleven topics that I focused on mostly and (surprisingly even to myself) in most of the cases I was able to apply my APIDesign skills. Read my TwoYearsWithTruffle essay to understand that once you are in a need of…
This version of Bck2Brwsr VM is called Radtouren 2017 version, as it has been prepared and released while our gang was bicycling in Korutany . Sleeping in a tent in camps, bicycling whole day, coding in a morning. What can be more fun? Support for Html/Java API version 1.4 Build & tests succeed on GraalVM Few bugfixes Support for NOP instruction Can execute some Kotlin code Implementation of…
It is hard to push and pull at once in real life and people tend to know it. Yet I have witnessed many attempts that try to put both approaches into the same API at the same time and pretend those are equal. Small advice from a former API designer : don't do it! For a longer advice please see the pull vs. push essay. -- JaroslavTulach 13:54, 16 June 2017 (UTC)
Is it JustCode that matters in a project or do projects need more? Is it necessary to have a bug tracking system or can we embed everything in the code ? Is it better to keep snapshot of an API in the code or track it independently with additional tools? Check my JustCode essay to see the benefits and drawbacks of both approaches. -- JaroslavTulach 08:54, 6 June 2017 (UTC)
I have to admit I am currently at a midlife crisis . I dedicated my last twenty years to promotion of a proper API design. I wrote TheAPIBook , I tried to propagate the principles of good APIDesign and modularity wherever I could. However I am tired... Because it is always the same. Why do I have ask: where is your Usecase ? What this method is good for? What do you actually want to achieve with…
I've just learned a new trick: proper way to do JerseyInjection . Maybe somebody finds it useful... -- JaroslavTulach 05:27, 15 March 2017 (UTC)
Enhance your Javadoc with Codesnippet4Javadoc version 0.20 which now supports special "coloring" for strings and comments. -- JaroslavTulach 10:40, 16 February 2017 (UTC)
My GeeCONPrague keynote is available online. Watch my metamorphosis yourself: Once you survive it and get to 5th minute, you'll also see interesting demos showing how fast the GraalVM and Truffle can be. Thanks again GeeCON guys for giving me a chance to speak at your keynote. -- JaroslavTulach 03:44, 4 January 2017 (UTC)