Reflections on design and development by Naiyer Asif

Recently published
Introduction to Problem Details
Describing problems in the software engineering is just as hard as naming things. The Problem Details specification proposes a standard way to convey the details when something goes wrong.
Microflash: Version 2
Introducing the redesign of this website. Here, I document the changes done, some website metrics and comparison with the old version, and the notable ‘behind the scenes’ changes.
Working with AWS on local using LocalStack
LocalStack is a container-based technology which brings a comprehensive set of AWS services on your local machine. It plays well with the official AWS CLI and SDK. Learn about how to setup LocalStack and use it with the AWS CLI.
Weaving aspects at compile-time with AspectJ
AspectJ manipulates Java bytecode at compile-time or load-time. The process is called weaving. Learn how to use compile-time weaving to log method entry and exit in Java.
Creating deep copies in Java
There are no built-in mechanisms to create deep copies of an object in Java. You can implement the Cloneable interface in your class and override the clone() method. Or, you can use some ways to do this described in this post.
Converting TTF files to WOFF and WOFF2
I usually rely on woff2 and woff formats to load webfonts. However, a font was available only in TTF format. Learn how I converted the TTF files locally without uploading the original files.
Content negotiation in Spring Boot
You might be required to provide the response in different formats depending on the client. One might accept JSON while the other can only work with XML. Learn how to handle this with Spring Boot.
Java-based health check for Docker
When you launch a container, Docker maintains its status as it transitions between several states. These states are tracked through the server events. Learn how to customize this behavior to more accurately provide health status of a Java application running on Tomcat.
Copying dependency files with Maven
Sometimes we need to move a dependency to the target directory along with the application JAR. These files may not be used by the application directly and hence wouldn't be packaged in the application's JAR as part of the build process. Learn how to do this while building the application with Maven.
Error handling for Spring Security Resource Server
Spring Boot provides useful defaults to handle exceptions and formulate a helpful response. However, in many cases, some customization might be needed. Learn how to accomplish this for a REST API protected with OAuth 2 using Spring Security Resource Server.
Protecting endpoints with Spring Security Resource Server
OAuth2 is the industry standard for providing authorization. Spring Security provides an OAuth2 Resource Server starter to implement an authorization layer. Learn how to implement a service-to-service authorization flow using client-credentials grant type and audience claim.
Browse more ⟶