Skip to content

Instantly share code, notes, and snippets.

View benelog's full-sized avatar

Sanghyuk Jung benelog

View GitHub Profile
@benelog
benelog / java-string-concat.md
Last active April 14, 2023 13:42
String 최적화 JDK 1.5

jdk1.5에서 String 더하기의 컴파일시의 최적화]

String 클래스를 "+"로 반복해서 더하는 연산을 어떤 경우에 컴파일러에서 자동으로 최적화해주는지 알고 있다면 보다 융퉁성 있게 쓸 수가 있습니다.

몇년전에 javaservice.net에서의 String vs StringBuffer에 대한 논의에서도 이 이야기가 오고 갔었고, 그를 통해 제가 알게 되었던 바는 다음과 같습니다.

  1. 한줄에서 상수 String끼리만 더하는 것은 모두 합쳐진 문자열로 바꿔준다. 즉 String a= "a" + "b" + "c"; 라고 쓰면 String ="abc"; 로 알아서 컴파일해준다는 거죠.
  2. 한줄에서 상수와 다른 String 클래스를 더하는 것은 StringBuffer의 append, toString 메서드를 쓰는 코드로 준다. jdk 1.4 javadoc 의 StringBuffer API설명 에 명시되어 있네요.

String buffers are used by the compiler to implement the binary string concatenation operator . For example, the code:

@benelog
benelog / README.md
Last active January 19, 2017 23:57
SMS to TTS

활용요소

  • IFTTT
  • Dropbox
  • Google TTS API
  • mplayer (Linux mp3 player)
  • Python watchdog 라이브러리

사용방법

  1. IFTTT가입
  2. 레서피 복사하여 활성화
#!/bin/bash
echo xinput map-to-output for Multi-Touch-V3004
input_id=`xinput | grep Multi-Touch-V3004 | awk '{print substr($5,4,length($5)-3)}'`
echo Input device id: $input_id
output_id=$1
if [[ -z $output_id ]]; then
output_id=2
fi
@benelog
benelog / ConnectionMonitor.java
Created January 7, 2016 03:41
Mysql query monitor script
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.BTraceUtils.Aggregations;
import com.sun.btrace.BTraceUtils.Sys;
import com.sun.btrace.aggregation.Aggregation;
import com.sun.btrace.aggregation.AggregationFunction;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Duration;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import static org.apache.commons.lang.StringUtils.*
class SqlMap {
public static String buildSelectSql(User user) {
StringBuilder sql = new StringBuilder();
sql.append("""
SELECT name, address
FROM user
WHERE 1=1
@benelog
benelog / SqlMap.groovy
Last active November 17, 2015 22:42
simple example
import org.apache.commons.lang.StringUtils
class SqlMap {
public static String buildSelectSql(User user) {
StringBuilder sql = new StringBuilder();
sql.append("""
SELECT name, address
FROM user
WHERE 1=1
@benelog
benelog / 0-retry.md
Last active October 8, 2017 15:51
retry.md

Spring retry

pom.xml에 아래와 같이 의존성을 추가하면 사용할수 있습니다.

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.0.3.RELEASE</version>
</dependency>

RetryTemplate 과 RetryOperationsInterceptor 를 제공합니다. RetryTemplate이라는 클래시에 재시도 횟수와 대기시간 정책 등을 지정할 수 있습니다.

@benelog
benelog / xrebel.md
Created November 7, 2014 04:58
Xrebel

export MAVEN_OPTS="-javaagent:/home/benelog/programs/xrebel/xrebel.jar -noverify"

@benelog
benelog / h2-config.md
Last active May 11, 2019 15:58
h2 DB사용법

별도의 DB설치 없이 사용할 수 있어서, 테스트, 교육용, 패키지용 소프트웨어에서 사용핧만하다.

1. 의존성 추가

pom.xml에 추가한다.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.181</version>
@benelog
benelog / springloaded.md
Last active May 12, 2021 09:04
springloaded

springloaded는 개발환경에서 .java클래스를 수정했을 때 변경된 클래스파일만을 재로딩하는 도구입니다. Local PC에서 수정과 Tomcat재시작을 줄이는데 도움이 됩니다.

다만 JRebel도 그러하듯이 모든 경우 완벽한 리로딩이 되지는 않습니다. 메서드추가,수정시에는 잘 반영됩니다. 그러나 아래와 같은 경우에는 자동반영이 되지 않습니다.

  • 상속구조의 변경
  • Reflection정보가 Cache된 것
  • XML설정 수정 (이 부분은 프레임워크 특화된 구현이 들어가지 않으면 당연히 어렵습니다.)

그래도 많은 경우 Tomcat재시작없이 개발을 이어갈 수 있다면 없는것보다는 생산성에 도움이 되리라 생각합니다.