pure java 구현체인 JeroMQ가 있다.
몇가지 문제가 있는데,
0.4.3-SNAPSHOT 이상 버전에서 해결이 되었다.
해당 홈페이지에는 0.4.3-SNAPSHOT을 사용하는 방법도 친절하게 안내가 되어 있다.
...만 maven을 사용할 때의 경우다.
android는 gradle로 빌드를 하고,
gradle에서는 0.4.3-SNAPSHOT을 찾아서 가져오질 못했다.
몇 시간 버린 후에 끝내
https://oss.sonatype.org/content/repositories/snapshots
로 직접들어가서 jar를 받아 file dependency로 추가했다.
...정식 릴리즈까지는 이렇게 써야 할듯.
zeromq도 socket을 이용하기 때문에
asyncTask 등을 통해 사용해야 한다.
2017년 10월 31일 화요일
2017년 7월 26일 수요일
excel 함수 몇 가지 정리
=index({원하는 값이 있는 셀 범위}, match({찾을 값}, {찾을 범위}, 0))
=char(65 + match(~))
=indirect(char(~))
indirect에서 다른 시트에 있는 값을 참조하게 하려면 `{시트 이름}!`을 추가하면 된다.
2017년 6월 26일 월요일
Spring boot, using of external static resources
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter { protected final Logger log = getLogger(this.getClass()); private static final String LOCATION_PATTERN = "file:///%s/%s/";
@Value("${repository.location}") private String externalResource;
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry .addResourceHandler("/ext/**") .addResourceLocations(String.format(LOCATION_PATTERN, externalResource, "ext")) .setCacheControl(CacheControl.maxAge(3L, TimeUnit.DAYS).cachePublic()) ; super.addResourceHandlers(registry); }
}
1.
`ResourceHandler`는 pathPattern임을 기억하자.
`ResourceLocations`는 prefix `file:///`와, suffix `/`를 반드시 붙여서 사용해야 한다.
`CacheControl`은 적당히 사용하면 된다.
덧. `file:///c:\dev...` 이건 윈도우의 경우. 맥에서는 `file:/Users/Documents...` 뭐 이런 패턴.
라벨:
dev,
java,
springboot
2017년 6월 14일 수요일
example of JPA Example Matcher
Parent.java, Child.java는 생략
JPA가 생성하는 Query를 확인해보자.
JPA가 생성하는 Query를 확인해보자.
join과 like를 적절하게 사용해서 생성해준다.
EDIT:
Model Class 설계할때, 초기값을 넣어주도록 했다면
`ExampleMatcher`가 생성하는 Query `where`절에 해당 값이 들어가는 점에
유의하도록 하자.
아무튼 Reflection과 함께 잘 활용하면 간단하게 구현할 수 있는 부분들이 많다.
2017년 5월 19일 금요일
code Convention과 @ResponseBody
`@ResponseBody` 를 사용할때 마다 겪는 불편함이 있었다.
흔히(?) 등장하는 `@ResponseBody`의 사용 예이다.
1. 그런데 `Auto Indent Line`같은 걸 한번 실행하면 보통 다음처럼 된다.
2. 으으... 난 이게 너무 보기 싫었다.
그래서 매번 다시 1. 처럼 일일이 손으로 수정하곤 했었는데,
다음과 같은 사실을 깨달았다.
`@ResponseBody`는 `ElementType.METHOD`를 대상으로(@Target)하고 있어서 메서드 아무데나 갖다놔도 된다는 것을.
3. 즉 3.과 같이 사용하면 된다는 것이다!
기쁘다 흑흑.
이제 더이상 삽질은 없다!
흔히(?) 등장하는 `@ResponseBody`의 사용 예이다.
1. 그런데 `Auto Indent Line`같은 걸 한번 실행하면 보통 다음처럼 된다.
2. 으으... 난 이게 너무 보기 싫었다.
그래서 매번 다시 1. 처럼 일일이 손으로 수정하곤 했었는데,
다음과 같은 사실을 깨달았다.
`@ResponseBody`는 `ElementType.METHOD`를 대상으로(@Target)하고 있어서 메서드 아무데나 갖다놔도 된다는 것을.
3. 즉 3.과 같이 사용하면 된다는 것이다!
기쁘다 흑흑.
이제 더이상 삽질은 없다!
2017년 5월 1일 월요일
Reflection을 이용해서 CSV Writer를 만들어보자 #2
지난 글에서 java의 reflection을 이용해서 CSV Writer를 간단히 만들어 봤다.
문제점을 몇가지 짚어보자.
구현 순서는 다음과 같을 것이다.
유연한 쪽은 아무래도 interface를 활용한쪽일 것이다.
1,2,3은 공통으로 사용될 부분이라 java8에 추가된 interface의 default method를 활용했다.
소스는 여기에 있다.
문제점을 몇가지 짚어보자.
- HttpServletResponse에 의존적이다. 그냥 File로 바로 변환하려면 어떻게?
- Test는 어떻게?
첫번째 문제를 해결하기 위해서 interface로 변환하고, HttpServletResponse를 사용하던 것을 OutputStream으로 변경해 보자.
그러면 이런 형태가 될 것이다.
이걸 이쁘게 implements 한 class를 만들면 된다.그러면 이런 형태가 될 것이다.
구현 순서는 다음과 같을 것이다.
- Header 생성(column은 구분해줘야 하니까...)
- List을 순회하면서 각 항목을 reflection을 사용해서 String[] 타입으로 변환
- CSVWriter에 List<String[]> 데이터 타입을 보내서 outputStream에 쓰기
그런데 위 작업이 이미 충분히 추상화 되어 있기 때문에 굳이 interface를 또 사용할 필요까지는 없는 것 같다.(실컷 다 작업하고 나서야 그 사실을 깨달았다 이런)
아무튼 그래서 2가지 방법으로 구현해봤다.유연한 쪽은 아무래도 interface를 활용한쪽일 것이다.
1,2,3은 공통으로 사용될 부분이라 java8에 추가된 interface의 default method를 활용했다.
소스는 여기에 있다.
2017년 4월 24일 월요일
Reflection을 이용해서 CSV Writer를 만들어보자
# CSV Writer 만들기
csv로 저장할 model의 field는 얼마든지 바뀔 수 있으므로 reflection을 사용해보도록 하자.
`getClass().getDeclaredFields()`이면 model class에 선언한 field들을 가져올 수 있다.
## BOM(Byte Order Marker)?
해당 문서가 어떤 Charset으로 되어 있는지 판별하기 위해 사용되는 Marker이다.
몇가지 타입이 있는데 자세한건 검색해보도록 하자.
## java BOM 지원
java reader들은 BOM를 지원하지 않기 때문에,
쓰기 할때는 BOM을 추가, 읽을 때는 BOM을 삭제해줘야 한다.
BOM을 반영해주지 않으면 charset 때문에 읽기 곤란한 문서와 만나게 된다.
csv로 저장할 model의 field는 얼마든지 바뀔 수 있으므로 reflection을 사용해보도록 하자.
`getClass().getDeclaredFields()`이면 model class에 선언한 field들을 가져올 수 있다.
## BOM(Byte Order Marker)?
해당 문서가 어떤 Charset으로 되어 있는지 판별하기 위해 사용되는 Marker이다.
몇가지 타입이 있는데 자세한건 검색해보도록 하자.
## java BOM 지원
java reader들은 BOM를 지원하지 않기 때문에,
쓰기 할때는 BOM을 추가, 읽을 때는 BOM을 삭제해줘야 한다.
BOM을 반영해주지 않으면 charset 때문에 읽기 곤란한 문서와 만나게 된다.
피드 구독하기:
글 (Atom)