Skip to content

Instantly share code, notes, and snippets.

View daniel-shuy's full-sized avatar

Daniel Shuy daniel-shuy

  • SICPA
  • Malaysia
View GitHub Profile
@RobertAKARobin
RobertAKARobin / python.md
Last active March 29, 2026 02:40
Python Is Not A Great Programming Language
@daniel-shuy
daniel-shuy / README.md
Last active January 3, 2020 15:30
jib-maven-plugin configuration template

jib-maven-plugin's default example runs the build goal during the package phase. The build goal will push the docker image to the remote registry, which may be too frequent to run in the package phase for some projects.

This template instead configures the jib-maven-plugin to run the following goals in the following phases:

Phase Goal Goal Description
package buildTar Build docker image as tar file
install dockerBuild Build docker image and install in Docker daemon
@daniel-shuy
daniel-shuy / EmptyOptionalResponseBodyControllerAdvice.java
Last active February 7, 2020 03:56
Spring MVC ResponseBodyAdvice to return HTTP 404 if Response Body is an empty Optional
@ControllerAdvice
public class EmptyOptionalResponseBodyControllerAdvice implements ResponseBodyAdvice<Optional<?>> {
@Override
public boolean supports(MethodParameter returnType, @Nullable Class<? extends HttpMessageConverter<?>> converterType) {
return Optional.class.isAssignableFrom(returnType.getParameterType());
}
@Override
public Optional<?> beforeBodyWrite(Optional<?> body, @Nullable MethodParameter returnType, @Nullable MediaType selectedContentType,
@Nullable Class<? extends HttpMessageConverter<?>> selectedConverterType,
@daniel-shuy
daniel-shuy / README.md
Last active May 21, 2020 13:07
Spring Boot: Map Hibernate Validator ConstraintValidator to `@Constraint` annotation without having both in the same project
@daniel-shuy
daniel-shuy / enum-composition.ts
Last active March 31, 2021 07:14
Examples of TypeScript's powerful type system
enum Weekday {
MONDAY = 'MONDAY',
TUESDAY = 'TUESDAY',
WEDNESDAY = 'WEDNESDAY',
THURSDAY = 'THURSDAY',
FRIDAY = 'FRIDAY',
}
enum Weekend {
SATURDAY = 'SATURDAY',
@daniel-shuy
daniel-shuy / ErrorLoggingInterceptor.java
Created August 17, 2020 15:55
Spring HTTP Client ErrorLoggingInterceptor
@Component
@Slf4j
public class ErrorLoggingInterceptor implements ClientHttpRequestInterceptor {
@Nonnull
@Override
public ClientHttpResponse intercept(@Nonnull HttpRequest request, @Nonnull byte[] body, ClientHttpRequestExecution execution)
throws IOException {
var response = execution.execute(request, body);
var statusCode = response.getStatusCode();
@daniel-shuy
daniel-shuy / ValidationUtils.java
Created July 16, 2021 14:08
Get error messages from Spring BindingResult
public List<String> getErrorMessages(BindingResult bindingResult) {
return bindingResult.getAllErrors()
.stream()
.map(error -> {
var defaultMessage = error.getDefaultMessage();
if (error instanceof FieldError) {
var fieldError = (FieldError) error;
return String.format("%s %s", fieldError.getField(), defaultMessage);
} else {
return defaultMessage;
@daniel-shuy
daniel-shuy / journal.md
Last active March 26, 2026 10:58
Dev Journal

2026

TypeScript

Module Augmentation

Module Augmentation can be used to patch type definitions in modules, e.g. in third-party libraries.

For example, @types/json-schema provides type definitions for JSON Schema, but the JSONSchema7 interface for Draft-07 does not support custom keywords. We cannot simply create a new type that extends JSONSchema7 (e.g. JSONSchema7WithExtensions) because JSONSchema7 recursively references itself. To allow custom keywords that start with x- (to be compatible with future versions of JSON Schema), we can augment the module to add an index signature to the JSONSchema7 interface globally.