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
@daniel-shuy
daniel-shuy / journal.md
Last active November 14, 2024 07:59
Dev Journal
@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 / 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 / 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 / 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 / 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 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
@RobertAKARobin
RobertAKARobin / python.md
Last active October 12, 2024 17:37
Python Is Not A Great Programming Language
@carlolars
carlolars / .wsl-git.md
Last active October 29, 2024 07:25
HOWTO: Use WSL and its Git in a mixed development environment

How to setup a development environment where Git from WSL integrates with native Windows applications, using the Windows home folder as the WSL home and using Git from WSL for all tools.

Note if using Git for Windows, or any tool on the Windows side that does not use Git from WSL then there will likely be problems with file permissions if using those files from inside WSL.

Tools

These are the tools I use:

  • git (wsl) - Command line git from within WSL.
  • Fork (windows) - Git GUI (must be used with wslgit)
  • wslgit - Makes git from WSL available for Windows applications. Important! Follow the installation instructions and do (at least) the first optional step and then the Usage in Fork instructions.
@dominictarr
dominictarr / readme.md
Created November 26, 2018 22:39
statement on event-stream compromise

Hey everyone - this is not just a one off thing, there are likely to be many other modules in your dependency trees that are now a burden to their authors. I didn't create this code for altruistic motivations, I created it for fun. I was learning, and learning is fun. I gave it away because it was easy to do so, and because sharing helps learning too. I think most of the small modules on npm were created for reasons like this. However, that was a long time ago. I've since moved on from this module and moved on from that thing too and in the process of moving on from that as well. I've written way better modules than this, the internet just hasn't fully caught up.

@broros

otherwise why would he hand over a popular package to a stranger?

If it's not fun anymore, you get literally nothing from maintaining a popular package.

One time, I was working as a dishwasher in a restu