Operations | Monitoring | ITSM | DevOps | Cloud

Debugging

Debugging jsoup Java Code in Production Using Lightrun

Scraping websites built for modern browsers is far more challenging than it was a decade ago. jsoup is a convenient API that makes scraping websites trivial via DOM traversal, CSS Selectors, JQuery-Like methods and more. But it isn’t without its caveat. Every scraping API is a ticking time bomb.

Debugging JAXB Production Issues

Java Architecture for XML Binding (AKA JAXB API) is a popular API for marshaling XML data. It’s a framework for mapping between XML documents and Java POJOs (Plain Old Java Objects, AKA regular Java classes) almost seamlessly. The API is very easy to use and many frameworks leverage it to provide their XML support. JAXB2.0 has gained popularity both in desktop applications (Java SE) and in application server code (Spring Boot, Java EE/Jakarta EE, Microprofile etc.).

Managing Android Devices at Scale with Memfault AOSP SDK Bort 4.0

The Memfault Android OS SDK allows IoT developers to collect detailed diagnostics from Android devices on everything from low-level hardware or kernel issues to high-level application crashes, and automatically upload them to Memfault. In this webinar, Heiko Behrens introduces the Memfault AOSP SDK (support for Android 8 to 12) and covers these new features in the latest release (v4.0): Presentation: 0:00 – 44:25 Q&A from live audience: 44:26 – 58:54

Debugging Java Equals and Hashcode Performance in Production

I wrote a lot about the performance metrics of the equals method and hash code in this article. There are many nuances that can lead to performance problems in those methods. The problem is that some of those things can be well hidden. To summarize the core problem: the hashcode method is central to the java collection API. Specifically, with the performance of hash tables (specifically the Map interface hash table). The same is true with the equals method.

Debugging Race Conditions in Production

Race conditions can occur when a multithreaded application accesses a shared resource using over one thread. Unless we have guards in place, the result might depend on which thread “got there first”. This is especially problematic when the state is changed externally. A race can cause more than just incorrect behavior. It can enable a security vulnerability when the resource in question can be corrupted in the right way. A good example of race condition vulnerabilities is mangling memory.

KoolKits - Highly-opinionated, batteries-included Kubernetes debugging toolkits

KoolKits (Kubernetes toolkits) are language-specific container images that contain a (highly-opinionated) set of tools for debugging applications running in Kubernetes pods. You can read more about the motivation behind this project here. Those images are intended for use with the new kubectl debug feature, which spins up Ephemeral containers for interactive troubleshooting. A KoolKit will be pulled by kubectl debug, spun up as a container in your pod, and have the ability to access the same process namespace as your original container.

Proactive Debugging with Offensive Programming

When bugs inevitably make their way into production firmware, defensive programming practices give you peace of mind that your devices will keep running despite issues occurring in the background. However, defensive programming can lead to more issues than it solves if not used carefully. Often the better approach to take is to use the practice of offensive programming, which will help surface issues more quickly and easily and help you iterate towards bug-free firmware and a better overall product experience.