DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

SBOMs are essential to circumventing software supply chain attacks, and they provide visibility into various software components.

Core Badge
Avatar

Shai Almog

DZone Core CORE

OSS Hacker, Developer Advocate and Entrepreneur at Codename One

Tel Aviv, IL

Joined Nov 1998

https://debugagent.com/

About

Software developer with ~30 years of professional experience in a multitude of platforms/languages. JavaOne rockstar/highly rated speaker, author, blogger and open source hacker. Shai has extensive experience in the full stack of backend, desktop and mobile. This includes going all the way into the internals of VM implementation, debuggers etc. Shai started working with Java in 96 (the first public beta) and later on moved to VM porting/authoring/internals and development tools. Shai is the co-founder of Codename One, an Open Source project allowing Java developers to build native applications for all mobile platforms in Java. He's the coauthor of the open source LWUIT project from Sun Microsystems and has developed/worked on countless other projects both open source and closed source. Shai is also a developer advocate at Lightrun.

Stats

Reputation: 6915
Pageviews: 928.9K
Articles: 102
Comments: 29

Expertise

Java Expertise Icon

Java

Maintenance Expertise Icon

Maintenance

  • Articles
  • Trend Reports
  • Events
  • Comments

Articles

article thumbnail
Front-End Debugging Part 3: Networking
Practical tips for debugging front-end network issues using browser developer tools, with insights on request replay, throttling, and storage management.
January 31, 2025
· 2,289 Views · 1 Like
article thumbnail
Front-End Debugging Part 2: Console.log() to the Max
Learn advanced front-end debugging: use console log levels, CSS styles, assertions, and more to simplify and enhance your development workflow.
November 27, 2024
· 2,230 Views · 2 Likes
article thumbnail
Front-End Debugging, Part 1: Not Just Console Log
Learn advanced techniques for debugging across the full stack, from frontend tools to system-level troubleshooting, and streamline your development.
October 29, 2024
· 6,789 Views · 9 Likes
article thumbnail
The Art of Full Stack Debugging
Tired of frustrating bugs? Discover practical, real-world strategies for full-stack debugging to effortlessly track down issues from frontend to backend.
October 9, 2024
· 6,229 Views · 5 Likes
article thumbnail
Mastering Serverless Debugging
Discover effective strategies for debugging serverless in general and AWS Lambda. Serverless can be painful, but not a bottomless pit of despair.
July 8, 2024
· 8,612 Views · 5 Likes
article thumbnail
Debugging Kubernetes: Troubleshooting Guide
Discover effective solutions to common Kubernetes errors. Learn troubleshooting tips for configuration issues, image pull errors, node problems, and more.
June 18, 2024
· 3,833 Views · 2 Likes
article thumbnail
Why Is Kubernetes Debugging So Problematic?
Discover effective Kubernetes debugging strategies, from kubectl debug and ephemeral containers to debuggers. Troubleshoot production/dev issues.
June 6, 2024
· 9,719 Views · 4 Likes
article thumbnail
Debugging Kubernetes Part 1: An Introduction
In this first part of this Kubernetes debugging series, take an in-depth view of the underlying technologies from containers to orchestration.
May 22, 2024
· 2,700 Views · 5 Likes
article thumbnail
Failure Is Required: Understanding Fail-Safe and Fail-Fast Strategies
Learn how embracing failure can improve your app's quality, leading to early error detection, robust error handling, and better overall stability.
May 7, 2024
· 1,909 Views · 3 Likes
article thumbnail
Software Testing as a Debugging Tool
Explore how software testing functions as a critical debugging tool, significantly enhancing code reliability and streamlining the development process.
April 24, 2024
· 2,381 Views · 3 Likes
article thumbnail
Wireshark and tcpdump: A Debugging Power Couple
Explore the power of Wireshark and tcpdump for network analysis in our comprehensive guide, unveiling tips for effective troubleshooting.
April 17, 2024
· 3,431 Views · 4 Likes
article thumbnail
Debugging Streams With Peek
Learn how to debug Java streams effectively using the peek() method with practical examples and tips for optimizing your code.
March 20, 2024
· 10,414 Views · 5 Likes
article thumbnail
Debugging Using JMX Revisited
Learn how to leverage JMX and Spring Boot for advanced debugging and management, enabling efficient monitoring and control of Java applications.
March 8, 2024
· 8,815 Views · 4 Likes
article thumbnail
Unleashing the Power of Git Bisect
Explore how to use git bisect for efficient debugging, including tips on automating the process and handling skipped commits in your projects.
February 22, 2024
· 5,831 Views · 4 Likes
article thumbnail
The Best Way To Diagnose a Patient Is To Cut Him Open
Explore modern debugging beyond print statements, highlighting tools like tracepoints and object marking for efficient problem-solving.
February 13, 2024
· 3,965 Views · 2 Likes
article thumbnail
Strace Revisited: Simple Is Beautiful
Explore strace for Linux debugging: origins, usage, JVM insights, and advanced tips in an in-depth, easy-to-follow guide.
February 6, 2024
· 4,053 Views · 2 Likes
article thumbnail
DTrace Revisited: Advanced Debugging Techniques
Explore the power of DTrace for system debugging and optimization in this comprehensive guide on its capabilities, performance, and applications.
January 30, 2024
· 2,285 Views · 3 Likes
article thumbnail
Building gdocweb With Java 21, Spring Boot 3.x, and Beyond
Explore the journey of building gdocweb: a developer's insight into choosing Java 21, Spring Boot 3.x, and navigating tech stack challenges.
January 24, 2024
· 4,725 Views · 2 Likes
article thumbnail
Not a Single Trace
Observability is an orchestra, not a single instrument. By combining multiple data points, we form an accurate production narrative to resolve issues.
October 4, 2023
· 4,290 Views · 4 Likes
article thumbnail
Debugging Tips and Tricks: A Comprehensive Guide
Master the art of debugging with strategies like Rubber Ducking, leveraging tools, and systematic checklists. Turn challenges into rewarding puzzles!
September 26, 2023
· 2,418 Views · 4 Likes
article thumbnail
The Systemic Process of Debugging
Explore the academic theory of the debugging process, focusing on issue tracking, team communication, and the balance between unit-to-integration tests.
September 19, 2023
· 2,649 Views · 5 Likes
article thumbnail
Eliminating Bugs Using the Tong Motion Approach
Delve into a two-pronged strategy that streamlines debugging, enabling developers to swiftly pinpoint and resolve elusive software glitches.
September 12, 2023
· 1,796 Views · 2 Likes
article thumbnail
The Evolution of Bugs
Unlock the secrets of debugging in software development. Dive deep into state bugs, thread issues, race conditions, and performance pitfalls.
September 5, 2023
· 3,830 Views · 5 Likes
article thumbnail
It’s 2 AM. Do You Know What Your Code Is Doing?
There's a newer approach to developer observability that helps us gain deeper understanding. Learn how your code works in production, not in theory.
August 22, 2023
· 3,997 Views · 5 Likes
article thumbnail
Debugging as a Process of Isolating Assumptions
When looking at a vast project, how do we know the direction to narrow assumptions during debugging? When should we backtrack and rethink?
August 15, 2023
· 2,312 Views · 2 Likes
article thumbnail
Understanding Security Vulnerabilities: A First Step in Preventing Attacks
What are the common vulnerabilities we need to be aware of? How do they look, and how can we better protect ourselves from these common attacks?
August 10, 2023
· 3,786 Views · 4 Likes
article thumbnail
Is OpenJDK Just a Drop-In Replacement?
What are the pitfalls in replacing OracleJDK with OpenJDK? Simon Ritter has some interesting observations in his new free new book. Here's the TL;DR.
August 8, 2023
· 5,118 Views · 5 Likes
article thumbnail
Can't Reproduce a Bug?
"It works on my machine" is never an excuse. Sometimes we have bugs that we can't reproduce or understand. How do we investigate these elusive bugs?
August 4, 2023
· 5,625 Views · 2 Likes
article thumbnail
The Theory of Debugging
What do you do when you have a bug? Using a well-defined process instead of looking everywhere can significantly change the issue resolution process.
July 20, 2023
· 6,602 Views · 6 Likes
article thumbnail
Building for Failure: Best Practices for Easy Production Debugging
Applications fail, that's inevitable. All the testing, QA, CI and defensive programming can make this a rare occurrence, but can't eliminate failure.
July 12, 2023
· 3,193 Views · 2 Likes

Trend Reports

Trend Report

Modern API Management

When assessing prominent topics across DZone — and the software engineering space more broadly — it simply felt incomplete to conduct research on the larger impacts of data and the cloud without talking about such a crucial component of modern software architectures: APIs. Communication is key in an era when applications and data capabilities are growing increasingly complex. Therefore, we set our sights on investigating the emerging ways in which data that would otherwise be isolated can better integrate with and work alongside other app components and across systems.For DZone's 2024 Modern API Management Trend Report, we focused our research specifically on APIs' growing influence across domains, prevalent paradigms and implementation techniques, security strategies, AI, and automation. Alongside observations from our original research, practicing tech professionals from the DZone Community contributed articles addressing key topics in the API space, including automated API generation via no and low code; communication architecture design among systems, APIs, and microservices; GraphQL vs. REST; and the role of APIs in the modern cloud-native landscape.

Modern API Management

Trend Report

Software Integration

Seamless communication — that, among other consequential advantages, is the ultimate goal when integrating your software. And today, integrating modern software means fusing various applications and/or systems — many times across distributed environments — with the common goal of unifying isolated data. This effort often signifies the transition of legacy applications to cloud-based systems and messaging infrastructure via microservices and REST APIs.So what's next? Where is the path to seamless communication and nuanced architecture taking us? Dive into our 2023 Software Integration Trend Report and fill the gaps among modern integration practices by exploring trends in APIs, microservices, and cloud-based systems and migrations. You have to integrate to innovate!

Software Integration

Events

Watch

On Demand Event Thumbnail

Containers: Moderization and Advancements in Cloud-Native Development

Presenter: D2iQ

Watch

On Demand Event Thumbnail

Software Integration: The Intersection of APIs, Microservices, and Cloud-Based Systems

Presenter: DZone

Comments

Extending Java APIs: Add Missing Features Without the Hassle

Jul 10, 2023 · Shai Almog

This was raised in the manifold slack and it isn't as simple as one might think since null is deeply ingrained in Java.

I'm guessing one can use the expression language to write a slightly shorter syntax than the optional syntax but I'm not sure how applicable it would be.

GraphQL, JavaScript, Preprocessor, SQL, and More in Manifold

Jul 09, 2023 · Shai Almog

The specific GraphQL docs are pretty lacking. Unfortunately, I don't have too much experience with GraphQL so I couldn't do their implementation justice. There's the sample app here: https://github.com/manifold-systems/manifold-sample-graphql-app/

But I would suggest asking in the slack channel as Scott is pretty responsive to queries there.

Everything Bad in Java Is Good for You

Jun 22, 2023 · Shai Almog

For most cases where we have a natural value for an object that isn't null we should assign it when creating the variable. This can be by making a field final and requiring the value in the constructor etc.

But let's look at the cases where there's no such "natural" non-null object. If we still choose to make the object non-null then we allocate a "dummy" object to serve as a placeholder just so we can discard it later.

The cost in performance depends on what the compiler will translate your non-null code to. In some cases this is translated to null but usually this isn't the case. Currently Optional has noticeable (albeit small) overhead. But other compile time options might not be able to use null in all the same cases. Non-null is an abstraction over null and abstractions tend to leak in unpredictable ways.

Everything Bad in Java Is Good for You

Jun 21, 2023 · Shai Almog

I meant Kotlins approach etc.

Everything Bad in Java Is Good for You

Jun 21, 2023 · Shai Almog

Not really because they didn't publish the final syntax but as far as we know it will only be a marker tag indicating that it will be non-null. As far as I understood enforcement at the compiler level won't be deep since they can't change libraries etc. Previously they had syntax that denoted this in the class level indicating that an object lacks "identity" which is a synonym to pointer.

Everything Bad in Java Is Good for You

Jun 21, 2023 · Shai Almog

Notice I mentioned that Valhalla will add a not-null marker which is important for memory layout. Yes, that should go into the language but it's a different thing from the systems used by other languages.

Everything Bad in Java Is Good for You

Jun 20, 2023 · Shai Almog

That's a great point. This indeed drew some inspiration for a trend of that time called "design by contract". That mostly focused on asserts but the idea was to map all the various ways the object can fail for bad input.

This is also very powerful in combination with JavaDoc.

Boldness in Refactoring

Apr 13, 2023 · Shai Almog

Right, I meant to say code rot.

Open Source Maintenance Is Community Organizing

Mar 07, 2023 · Shai Almog

Unfortunately the links in the post were removed during editing. The original is here: https://debugagent.com/open-source-maintenance-is-community-organizing

Is It Time To Go Back to the Monolith?

Feb 22, 2023 · Shai Almog

Yes. I did mention the events but didn't want to get into the nuances of the implementation. Since it's relatively young, I'm not sure if it will be a decent replacement to Kafka but it is a very interesting project.

The Reason Java Is Still Popular

Oct 05, 2022 · Shai Almog

That's why I mentioned Lombok which is still applicable. Records are improving though.

I think the lambda implementation was a bit broken which is the one problem with checked exceptions. I blame the lambda, not the exceptions.

I agree, a lot of complexity was added but newer languages are even more complex and don't have the same level of functionality. With the exception of JVM languages.

Quiet Quitting Is About Loyalty

Oct 04, 2022 · Shai Almog

I think everyone defines this a bit differently. There's also the quiet firing where bosses assign bad tasks and create an unpleasant work environment.

I picked the more widely understood version of quiet quitting: doing exactly what the job description says. No more. No less. It's a legitimate thing. What's interesting is that it's a change for a lot of people. Why would people change that behavior?

Because the dime dropped for a lot of them. They understand their employer will dump them in a heartbeat, regardless of how hard they work. No reason to go the extra mile. That's OK when talking about overtime. It's not so great if you don't document your code because well documented code isn't benchmarked in your quarterly reviews.

Quiet Quitting Is About Loyalty

Sep 30, 2022 · Shai Almog

Great quote!
A boss should never demand loyalty. It's something that's earned.

10 JetBrains Extensions to Fight Technical Debt

Mar 25, 2022 · Alex Omeyer

I'm not sure if Lightrun fits into the "fight technical debt" but debugging production is pretty much a universal "fixer" problem. I think our plugin is probably one of the coolest around (in my not so subjective opinion): https://lightrun.com/

FOSDEM 2022 Conference Report

Mar 01, 2022 · Reza Rahman

Great seeing your talks there!

Generally virtual conferences have a problem of audience participation. I noticed FOSDEM was MUCH better than the median cookie cutter conference in terms of participation. Not sure if it was due to the foojay room we were in or the conference itself though.

JxBrowser and JCEF

Jan 18, 2022 · Vladyslav Lubenskyi

It took well over a month of work. The main work was around the deployment of the native libraries and a lot went into the media code so it would use CEF instead of the built-in APIs of FX. That required recompiling CEF for every platform which took a lot of effort. Steve Hannah did most of the work there. I can connect you to him if you're interested. You can see the stuff he did in our repo: https://github.com/codenameone/CodenameOne/

JxBrowser and JCEF

Jan 18, 2022 · Vladyslav Lubenskyi

Did you two coordinate this?
https://dzone.com/articles/jxbrowser-and-javafx-webview

We use JCEF but played with JxBrowser in the past. It seems like an excellent solution. Since we're an open source project we picked CEF but it was a pretty challenging process.

JxBrowser and JavaFX WebView

Jan 18, 2022 · Vladimir Ikryanov

It was an uphill battle too. We had to compile our own version of CEF because the default version doesn't include support for 264 playback. That took a lot of time and pain.

But the end result is a modern/consistent browser over which we have more control regardless of the underlying JDK. So it paid off. Removing the FX dependency is a huge advantage.

JxBrowser and JavaFX WebView

Jan 15, 2022 · Vladimir Ikryanov

We chose to go with JCEF which is used by Intellij as well.

How to Do UUID as Primary Keys the Right Way

Jan 03, 2022 · Bertrand Florat

I very much agree with the UUID usage in DBs but some people don't: https://github.com/jhipster/generator-jhipster/issues/3060

To be fair, they are correct. There is a performance impact. I think it's something most of us can live with.

Reverse Debugging - What You Should Know

Nov 18, 2021 · Ogundiran Ayobami

The common term is time travel debugging. E.g. https://www.replay.io/

10 Reasons Why WebStorm Is Better Than Visual Studio Code

May 27, 2020 · Tara Simpson

Do you work for free?

Why do you expect professional developers who build tools to do what you don't?
If you can't spend on your craft then you're a hobbyist not a professional. When there's a better free product then I use it (e.g. Linux) but when the product delivers a lot of value over a free product then I make the calculation of my time that's saved. My time isn't free.

FYI If you mean "open source" then the core of webstorm is open source.

BTW Visual Studio Code also has a commercial portion that isn't "free"...

Kotlin vs. React Native: Which Is Better?

Mar 20, 2018 · Nyma Malik

I think you should compare react native to Kotlin Native or Kotlin + Codename One.

Serverless Application with Google Flutter and Lambda

Mar 16, 2018 · Mohamed Labouardy

FYI All of the 4 things you mentioned at the bottom of the article as downsides of flutter don't exist in Codename One plus a lot of other advantages...

Eclipse: Still the Best IDE!

Feb 08, 2018 · Brian Fernandes

I work with all 3 IDE's since we produce plugins for all of them. Eclipse improved recently but it still lacks some capabilities e.g. the debugger in IntelliJ renders values of variables next to the line where they are mentioned... Eclipse has some power but it's very "opinionated" this isn't necessarilly bad but it makes it harder for beginners.

Native JavaFX Apps With Automatic Updates: FXLauncher

Feb 15, 2016 · Edvin Syse

I like some of the concepts of javafxpackager but from our experience with it I was pretty disappointed by the implementation. Its pretty buggy and spartan.

It seems that with every release of Java a new team comes along and completely reinvents distribution (webstart rewrites, Java plugin, packager etc.). The problem is that all of these approaches are damn awful. E.g. fxpackager needs both a Mac and a Windows machine. Signing (which is required on Mac OS) is a HUGE pain.

So FXLauncher looks promissing but the underlying fxpackager is the true problem.

Java Garbage Collection Explained [Comic]

Jan 01, 2016 · Daniel Stori

;-)

I would use the analogy of a cleaning person picking up the garbage. So he first comes along to check if the garbage is used by anyone and places a yellow sticker on everything that's used. Then he indiscriminately throws away everything that doesn't have a yellow sticker on it.

GC's are actually remarkably simple, its the implementation that gets a bit tricky specifically in regards to threads...

A How to Guide on Developing an iOS App on a Windows PC

Jul 01, 2015 · Peter Soloninka

You should note in the article that this process is illegal and violates Apple's ToS. I doubt this will ever reach a court case or even trigger banning but Apple doesn't allow Mac OS virtualization unless it is done on a physical Mac machine.

So this process might be reasonable for a hobbyist but its not something you should be doing if you work for a major company.

At Codename One we use Mac's that we host in the cloud for our service and will soon also offer support to automatically generate the certificates for them. We also use them for the xcode build process so the full package can be maintained and still be 100% legal.

The Mobile Landscape: Cross-Platform Problems and Solutions

Jun 13, 2014 · Alec Noller

You failed to mention Codename One which doesn't quite fit any of the categories you mentioned but being completely based on Java is probably more relevant to the java dzone readership than all of the tools mentioned in the report.

User has been successfully modified

Failed to modify user

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • [email protected]

Let's be friends: