'2017/02'에 해당되는 글 13건

  1. 2017.02.21 [Elasticsearch] 2.4.x to 5.2.x 으로의 elasticsearch.yml
  2. 2017.02.21 [Elasticsearch] elasticsearch-analysis-arirang-5.2.1
  3. 2017.02.14 [OCR] 이미지에서 텍스트 추출 하기
  4. 2017.02.10 [OSX El Capitan] ulimit 수정
  5. 2017.02.10 [SimpleCaptcha] 초간단 hello world captcha!! 만들어 보기
  6. 2017.02.09 [Kibana] Unique Count 사용 시 threshold 스크립트 추가.
  7. 2017.02.07 [DL/ML] 딥러닝/머신러닝 관련링크
  8. 2017.02.07 [HttpClient] Timeout 설정 예시
  9. 2017.02.06 [HttpClient] javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
  10. 2017.02.02 [AWS] ELB + http to https + Nginx 설정

[Elasticsearch] 2.4.x to 5.2.x 으로의 elasticsearch.yml

Elastic/Elasticsearch 2017. 2. 21. 13:23

2.x 에서 사용하던 설정을 그대로 5.x 로 올려서 실행을 시키면 몇 가지 볼 수 있는 에러들이 있습니다.

뭐 이런건 breaking changes 를 참고하거나 소스코드를 보면 금방 해결이 되긴 합니다.

그냥 복습하는 차원에서 기록해 봅니다.


[참고문서]

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/breaking-changes-5.2.html

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/breaking-changes-5.1.html

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/breaking-changes-5.0.html



[발생 에러들]

unknown setting [es.default.path.conf] please check that any required plugins are installed, or check the breaking changes documentation for removed settings


node settings must not contain any index level settings


unknown setting [action.disable_shutdown] please check that any required plugins are installed, or check the breaking changes documentation for removed settings


unknown setting [discovery.zen.ping.multicast.enabled] please check that any required plugins are installed, or check the breaking changes documentation for removed settings


unknown setting [resource.reload.interval] did you mean any of [resource.reload.interval.low, resource.reload.interval.high, resource.reload.interval.medium, resource.reload.enabled]?


unknown setting [script.indexed] did you mean any of [script.inline, script.ingest]?


node validation exception

bootstrap checks failed

memory locking requested for elasticsearch process but memory is not locked

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]


- es.default.path.conf 는 path.conf  로 변경 되었습니다. (-D 가 -E 로 변경 되었구요.)

- index level 설정이 있다면 제거 하시면 됩니다.

- action.disable_shutdown 은 없어 진 것으로 보입니다. (미쳐 확인 하지는 못했구요. 문서를 보면 _shutdown 이 없어 진것으로 미루어 봤을때...)

- multicast 설정도 제거 하시면 됩니다.

- resource 설정은 이름과 방법이 바뀌었으니 삭제 하시거나 변경해 주면 됩니다.

- script.indexed 설정도 제거 하시면 됩니다. (아마도 stored 로 바뀐것 같습니다.)

- bootstrap 설정은 root 권한을 주시거나 limits.conf 인가에서 수정을 해주셔야 할 것 같구요.

- vm.max_map_count 설정은 문서에 잘 나와 있습니다. ($ sudo sysctl -w vm.max_map_count=262144)


:

[Elasticsearch] elasticsearch-analysis-arirang-5.2.1

Elastic/Elasticsearch 2017. 2. 21. 12:41

elasticsearch-analysis-arirang-5.2.1 공유 합니다.


Lucene 6.4.1

Elasticsearch 5.2.1 

기준 입니다.


elasticsearch-analysis-arirang-5.2.1.zip


설치 방법)

$ bin/elasticsearch-plugin install --verbose file:///services/apps/elasticsearch-analysis-arirang-5.2.1.zip


:

[OCR] 이미지에서 텍스트 추출 하기

ITWeb/개발일반 2017. 2. 14. 11:22

OCR(Optical Character Recognition) 이라고 해서 이미지 같은 것에서 문자를 인식해서 추출하는 기술 입니다.

제가 하는 업무에 필요해서 "Hello World" 수준의 방법을 기술해 보려 합니다.

왜냐하면 나중에 또 잊어버릴수 있으니까요 ^^;


제가 사용한 내용은 아래와 같습니다.


[참고문서]

http://tess4j.sourceforge.net/

https://github.com/tesseract-ocr/tesseract/wiki


tess4j 는 tesseract-ocr 을 java 모듈에서 사용할 수 있도록 제공해주는 라이브러리 입니다.


우선 가볍게 mac 에서 맛보기를 해보시면 좋습니다.


[Mac OSX 설치 및 CLI 테스트]

$ brew install tesseract


설치 된 경로는 아래와 같습니다.

/usr/local/Cellar/tesseract/3.04.01_2


경로를 알아야 하는 이유는 나중에 traineddata 파일을 올려 두어야 하기 때문에 알아 두시면 좋습니다.

한글 테스트를 위해서는 아래 링크에서 data file 을 다운로드 받으시고 tessdata 로 올려 두시면 됩니다.


[Data Files]

https://github.com/tesseract-ocr/tesseract/wiki/Data-Files


Usage:

  tesseract --help | --help-psm | --version

  tesseract --list-langs [--tessdata-dir PATH]

  tesseract --print-parameters [options...] [configfile...]

  tesseract imagename|stdin outputbase|stdout [options...] [configfile...]


$ tesseract eurotext.png translate -l eng

eurotext.png


The (quick) [brown] {fox} jumps!

Over the $43,456.78 <lazy> #90 dog

& duck/goose, as 12.5% of E-mail

from aspammer@website.com is spam.

Der ,,schnelle” braune Fuchs springt

fiber den faulen Hund. Le renard brun

«rapide» saute par-dessus le chien

paresseux. La volpe marrone rapida

salta sopra i] cane pigro. El zorro

marrén répido salta sobre el perro

perezoso. A raposa marrom répida

salta sobre 0 C50 preguieoso.

translate.txt

 

위 명령어로 돌려 보시면 이렇게 추출이 됩니다.


추가로 ubuntu 에 설치 하는 것도 살펴 보도록 하겠습니다.

저는 아래 문서 보고 설치를 했습니다.


[설치 문서 on ubuntu]

https://github.com/tesseract-ocr/tesseract/wiki/Compiling


설치 시 주의 점은 leptonica 설치를 하셔야 한다는 것입니다.

문서에 "You also need to install Leptonica." 이렇게 있는데도 불구하고 제가 문서를 제대로 안읽고 진행하다 삽질을 ㅡ.ㅡ;


실행 명령어를 그대로 옮겨 놓도록 하겠습니다.


$ sudo apt-get install autoconf automake libtool

$ sudo apt-get install autoconf-archive

$ sudo apt-get install pkg-config

$ sudo apt-get install libpng12-dev

$ sudo apt-get install libjpeg8-dev

$ sudo apt-get install libtiff5-dev

$ sudo apt-get install zlib1g-dev

$ sudo apt-get install libicu-dev

$ sudo apt-get install libpango1.0-dev

$ sudo apt-get install libcairo2-dev


# leptonica 를 다운로드 받으시고 압축을 풉니다.


[설치 문서]

http://tpgit.github.io/UnOfficialLeptDocs/leptonica/README.html#building-on-linux-unix-macos


$ wget http://www.leptonica.org/source/leptonica-1.74.1.tar.gz

$ tar xvf leptonica-1.74.tar.gz

$ cd leptonica-1.74

$ ./configure

$ make

$ sudo make install


$ sudo apt-get install libleptonica-dev


$ git clone --depth 1 https://github.com/tesseract-ocr/tesseract.git

$ cd tesseract

$ ./autogen.sh

$ ./configure --enable-debug

$ LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include" make

$ sudo make install

$ sudo ldconfig


$ tesseract -v

tesseract 2f10be5

 leptonica-1.74.1

  libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8


 Found AVX

 Found SSE


[tess4j 를 이용한 Java 테스트]

HelloTess4j.java

public class HelloTess4j {

public static void main(String[] args) {
String datapath = "src/main/resources";
String testResourcesDataPath = "src/main/resources/test-data";
File imageFile;
ITesseract instance;

instance = new Tesseract();
instance.setDatapath(new File(datapath).getPath());
instance.setLanguage("eng");

try {
ImageIO.scanForPlugins();
imageFile = new File(testResourcesDataPath, "eurotext.png");
String result = instance.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
System.out.println(e.getMessage());
}
}
}

코드는 tess4j 소스코드 받아 보시면 잘 나와 있습니다.

setLanguage 설정에 오류가 있어서 멀티 lang 설정이 안되는데요. (버그로 등록이 되어 있습니다. - 2017.02.14일 기준)

이 오류가 수정 되면  eng+kor 테스트도 해보시면 좋을 것 같습니다.


:

[OSX El Capitan] ulimit 수정

ITWeb/개발일반 2017. 2. 10. 18:53

아래와 같이 수정 하시면 됩니다.

파일이 없으면 만드시면 됩니다.


$ sudo vi /Library/LaunchDaemons/limit.maxfiles.plist

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  

        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">  

  <dict>

    <key>Label</key>

    <string>limit.maxfiles</string>

    <key>ProgramArguments</key>

    <array>

      <string>launchctl</string>

      <string>limit</string>

      <string>maxfiles</string>

      <string>524288</string>

      <string>524288</string>

    </array>

    <key>RunAtLoad</key>

    <true/>

    <key>ServiceIPC</key>

    <false/>

  </dict>

</plist>  


$ sudo vi /Library/LaunchDaemons/limit.maxproc.plist

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  

  <plist version="1.0">

    <dict>

      <key>Label</key>

        <string>limit.maxproc</string>

      <key>ProgramArguments</key>

        <array>

          <string>launchctl</string>

          <string>limit</string>

          <string>maxproc</string>

          <string>2048</string>

          <string>2048</string>

        </array>

      <key>RunAtLoad</key>

        <true />

      <key>ServiceIPC</key>

        <false />

    </dict>

  </plist>


:

[SimpleCaptcha] 초간단 hello world captcha!! 만들어 보기

ITWeb/개발일반 2017. 2. 10. 12:33

일전에 올려던 captcha 관련 링크 참고해서 입맛에 맞는 걸 사용하시면 됩니다.


[관련링크]

http://jjeong.tistory.com/1230


저는 simple captcha 를 이용해서 테스트만 해봤습니다.

아래 테스트 코드 공유 합니다.


[SimpleCaptcha]

http://simplecaptcha.sourceforge.net/


[Maven]

https://mvnrepository.com/artifact/nl.captcha/simplecaptcha/1.2.1


혹시 다운로드가 안되시면 그냥 system path 로 잡아서 올려 주시면 됩니다.


[HelloSimpleCaptch]

public class HelloSimpleCaptcha {
private static final Logger LOG = LoggerFactory.getLogger(HelloSimpleCaptcha.class);

public static void main(String[] args) throws IOException {
File file = new File("/Downloads/hello-simple-capcha.png");
Image image;
Captcha captcha = new Captcha.Builder(200, 50)
.addText()
.build();

ImageIO.write(captcha.getImage(), "png", file);
}
}

너무 쉬워서 뭐라 적을 내용이 없내요. ㅡ.ㅡ;

더 자세한 내용들은 simple captcha 홈페이지를 참고 하시면 됩니다. (또는 구글링 ~)


[Custom]

http://simplecaptcha.sourceforge.net/custom_images.html

http://simplecaptcha.sourceforge.net/custom_audio.html


보셔서 아시겠지만 캡차 이미지 파일로 사용하셔도 되고, 스트림으로 사용하셔도 되고 입맛에 맞게 변환 해서 쓰시면 되겠습니다.

:

[Kibana] Unique Count 사용 시 threshold 스크립트 추가.

Elastic/Kibana 2017. 2. 9. 12:54

기억력 극복을 위해 또 기록해 봅니다.


elasticsearch의 cardinality aggregation 을 kibana 에서는 unique count 로 사용 합니다.

여기에 정확도 조절을 위해 precision_threshold 를 설정할 수 있는데요.


참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html


QueryDSL)

{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author_hash",
                "precision_threshold": 100 
            }
        }
    }
}



Kibana Script)

{

"precision_threshold":40000

}


위와 같이 사용하시면 됩니다.

주의 하실 부분은 CPU와 Memory 사용에 민감하고 circuit breaker 설정도 확인하셔야 합니다.


:

[DL/ML] 딥러닝/머신러닝 관련링크

ITWeb/개발일반 2017. 2. 7. 14:07

모두의 딥러닝/머신러닝 링크 투척.

- https://hunkim.github.io/ml/



텐서플루우 

- https://tensorflow.blog/

:

[HttpClient] Timeout 설정 예시

ITWeb/개발일반 2017. 2. 7. 13:41

HttpClient를 사용하면서 간혹 read timeout 이나 connection timeout 등이 발생 할 때가 있습니다.

그럴때 값을 조정해서 사용하시면 됩니다.


- 문서링크

setConnectionRequestTimeout

public RequestConfig.Builder setConnectionRequestTimeout(int connectionRequestTimeout)


setConnectTimeout

public RequestConfig.Builder setConnectTimeout(int connectTimeout)


setSocketTimeout

public RequestConfig.Builder setSocketTimeout(int socketTimeout)



아래 예시는 10초로 설정한 내용입니다.

HttpPost request = new HttpPost(url);


RequestConfig requestConfig = RequestConfig.custom()

  .setSocketTimeout(10*1000)

  .setConnectTimeout(10*1000)

  .setConnectionRequestTimeout(10*1000)

  .build();


request.setConfig(requestConfig);


:

[HttpClient] javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name

ITWeb/개발일반 2017. 2. 6. 11:33

http 통신 기능 구현 시 아래와 같은 에러를 접하는 경우가 있어서 해결 방법을 기록해 봅니다.


[에러내용]

javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name

    at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1441)

    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2016)

    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125)

    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)

    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)

    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)

    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)

    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)

    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)



[해결방법]

JVM 실행 시 옵션 추가)

-Djsse.enableSNIExtension=false


Application 내부에서 설정 추가)

System.setProperty(“jsse.enableSNIExtension”, “false”);

:

[AWS] ELB + http to https + Nginx 설정

ITWeb/개발일반 2017. 2. 2. 10:12

요즘 대부분의 서비스들이 http 를 제거 하고 https 로 서비스 하기 시작했습니다.

AWS 에서 제공하는 SSL 을 이용해서 ELB 에 구성하신 분들의 경우 대부분 아래와 같이 되어 있을 것 같은데요.


http://service    -> elb:80   -> ec2:80

https://service  -> elb:443  -> ec2:80


이와 같이 되어 있다 보니 개별 ec2 에서는 모두 listen 80 만 하게 됩니다.

그래서 client 에서 http 로 들어 왔는지 https 로 들어 왔는지 확인이 필요 한데요.

이 경우 아래와 같은 변수들을 활용해서 설정을 하시면 됩니다.


[참고문서]

http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html


[X-Forwarded Headers]

X-Forwarded-For

X-Forwarded-Proto

X-Forwarded-Port


[Nginx 설정]

server {

  listen       80;

  server_name  localhost;


  if ($http_x_forwarded_proto = 'http') {

    return 301 https://$server_name$request_uri;

  }

}


참고 용이니 실 서비스에 적용 시 충분한 테스트 후 적용하시기 바랍니다.

: