'ITWeb/개발일반'에 해당되는 글 336건

  1. 2017.06.14 [ASCII] HTML URL Encoding Reference
  2. 2017.04.18 [Java] Array Value 존재 유무 확인하기
  3. 2017.02.14 [OCR] 이미지에서 텍스트 추출 하기
  4. 2017.02.10 [OSX El Capitan] ulimit 수정
  5. 2017.02.10 [SimpleCaptcha] 초간단 hello world captcha!! 만들어 보기
  6. 2017.02.07 [DL/ML] 딥러닝/머신러닝 관련링크
  7. 2017.02.07 [HttpClient] Timeout 설정 예시
  8. 2017.02.06 [HttpClient] javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
  9. 2017.02.02 [AWS] ELB + http to https + Nginx 설정
  10. 2017.02.01 [Appboy] REST API 를 이용한 이벤트 처리

[ASCII] HTML URL Encoding Reference

ITWeb/개발일반 2017.06.14 17:47

가끔 찾을 때가 있는데 기억을 못해 스크랩 해봤습니다.


원문)


https://www.w3schools.com/tags/ref_urlencode.asp



ASCII Encoding Reference

Your browser will encode input, according to the character-set used in your page.

The default character-set in HTML5 is UTF-8.


Character

From Windows-1252

From UTF-8

space

%20

%20

!

%21

%21

"

%22

%22

#

%23

%23

$

%24

%24

%

%25

%25

&

%26

%26

'

%27

%27

(

%28

%28

)

%29

%29

*

%2A

%2A

+

%2B

%2B

,

%2C

%2C

-

%2D

%2D

.

%2E

%2E

/

%2F

%2F

0

%30

%30

1

%31

%31

2

%32

%32

3

%33

%33

4

%34

%34

5

%35

%35

6

%36

%36

7

%37

%37

8

%38

%38

9

%39

%39

:

%3A

%3A

;

%3B

%3B

< 

%3C

%3C

=

%3D

%3D

> 

%3E

%3E

?

%3F

%3F

@

%40

%40

A

%41

%41

B

%42

%42

C

%43

%43

D

%44

%44

E

%45

%45

F

%46

%46

G

%47

%47

H

%48

%48

I

%49

%49

J

%4A

%4A

K

%4B

%4B

L

%4C

%4C

M

%4D

%4D

N

%4E

%4E

O

%4F

%4F

P

%50

%50

Q

%51

%51

R

%52

%52

S

%53

%53

T

%54

%54

U

%55

%55

V

%56

%56

W

%57

%57

X

%58

%58

Y

%59

%59

Z

%5A

%5A

[

%5B

%5B

\

%5C

%5C

]

%5D

%5D

^

%5E

%5E

_

%5F

%5F

`

%60

%60

a

%61

%61

b

%62

%62

c

%63

%63

d

%64

%64

e

%65

%65

f

%66

%66

g

%67

%67

h

%68

%68

i

%69

%69

j

%6A

%6A

k

%6B

%6B

l

%6C

%6C

m

%6D

%6D

n

%6E

%6E

o

%6F

%6F

p

%70

%70

q

%71

%71

r

%72

%72

s

%73

%73

t

%74

%74

u

%75

%75

v

%76

%76

w

%77

%77

x

%78

%78

y

%79

%79

z

%7A

%7A

{

%7B

%7B

|

%7C

%7C

}

%7D

%7D

~

%7E

%7E

 

%7F

%7F

`

%80

%E2%82%AC



%81

%81

%82

%E2%80%9A

ƒ

%83

%C6%92

%84

%E2%80%9E

%85

%E2%80%A6

%86

%E2%80%A0

%87

%E2%80%A1

ˆ

%88

%CB%86

%89

%E2%80%B0

Š

%8A

%C5%A0

%8B

%E2%80%B9

Œ

%8C

%C5%92



%8D

%C5%8D

Ž

%8E

%C5%BD



%8F

%8F



%90

%C2%90

%91

%E2%80%98

%92

%E2%80%99

%93

%E2%80%9C

%94

%E2%80%9D

%95

%E2%80%A2

%96

%E2%80%93

%97

%E2%80%94

˜

%98

%CB%9C

%99

%E2%84

š

%9A

%C5%A1

%9B

%E2%80

œ

%9C

%C5%93



%9D

%9D

ž

%9E

%C5%BE

Ÿ

%9F

%C5%B8

 

%A0

%C2%A0

¡

%A1

%C2%A1

¢

%A2

%C2%A2

£

%A3

%C2%A3

¤

%A4

%C2%A4

¥

%A5

%C2%A5

¦

%A6

%C2%A6

§

%A7

%C2%A7

¨

%A8

%C2%A8

©

%A9

%C2%A9

ª

%AA

%C2%AA

«

%AB

%C2%AB

¬

%AC

%C2%AC

%AD

%C2%AD

®

%AE

%C2%AE

¯

%AF

%C2%AF

°

%B0

%C2%B0

±

%B1

%C2%B1

²

%B2

%C2%B2

³

%B3

%C2%B3

´

%B4

%C2%B4

µ

%B5

%C2%B5

%B6

%C2%B6

·

%B7

%C2%B7

¸

%B8

%C2%B8

¹

%B9

%C2%B9

º

%BA

%C2%BA

»

%BB

%C2%BB

¼

%BC

%C2%BC

½

%BD

%C2%BD

¾

%BE

%C2%BE

¿

%BF

%C2%BF

À

%C0

%C3%80

Á

%C1

%C3%81

Â

%C2

%C3%82

Ã

%C3

%C3%83

Ä

%C4

%C3%84

Å

%C5

%C3%85

Æ

%C6

%C3%86

Ç

%C7

%C3%87

È

%C8

%C3%88

É

%C9

%C3%89

Ê

%CA

%C3%8A

Ë

%CB

%C3%8B

Ì

%CC

%C3%8C

Í

%CD

%C3%8D

Î

%CE

%C3%8E

Ï

%CF

%C3%8F

Ð

%D0

%C3%90

Ñ

%D1

%C3%91

Ò

%D2

%C3%92

Ó

%D3

%C3%93

Ô

%D4

%C3%94

Õ

%D5

%C3%95

Ö

%D6

%C3%96

×

%D7

%C3%97

Ø

%D8

%C3%98

Ù

%D9

%C3%99

Ú

%DA

%C3%9A

Û

%DB

%C3%9B

Ü

%DC

%C3%9C

Ý

%DD

%C3%9D

Þ

%DE

%C3%9E

ß

%DF

%C3%9F

à

%E0

%C3%A0

á

%E1

%C3%A1

â

%E2

%C3%A2

ã

%E3

%C3%A3

ä

%E4

%C3%A4

å

%E5

%C3%A5

æ

%E6

%C3%A6

ç

%E7

%C3%A7

è

%E8

%C3%A8

é

%E9

%C3%A9

ê

%EA

%C3%AA

ë

%EB

%C3%AB

ì

%EC

%C3%AC

í

%ED

%C3%AD

î

%EE

%C3%AE

ï

%EF

%C3%AF

ð

%F0

%C3%B0

ñ

%F1

%C3%B1

ò

%F2

%C3%B2

ó

%F3

%C3%B3

ô

%F4

%C3%B4

õ

%F5

%C3%B5

ö

%F6

%C3%B6

÷

%F7

%C3%B7

ø

%F8

%C3%B8

ù

%F9

%C3%B9

ú

%FA

%C3%BA

û

%FB

%C3%BB

ü

%FC

%C3%BC

ý

%FD

%C3%BD

þ

%FE

%C3%BE

ÿ

%FF

%C3%BF


URL Encoding Reference

The ASCII control characters %00-%1F were originally designed to control hardware devices.

Control characters have nothing to do inside a URL.

ASCII Character

Description

URL-encoding

NUL

null character

%00

SOH

start of header

%01

STX

start of text

%02

ETX

end of text

%03

EOT

end of transmission

%04

ENQ

enquiry

%05

ACK

acknowledge

%06

BEL

bell (ring)

%07

BS

backspace

%08

HT

horizontal tab

%09

LF

line feed

%0A

VT

vertical tab

%0B

FF

form feed

%0C

CR

carriage return

%0D

SO

shift out

%0E

SI

shift in

%0F

DLE

data link escape

%10

DC1

device control 1

%11

DC2

device control 2

%12

DC3

device control 3

%13

DC4

device control 4

%14

NAK

negative acknowledge

%15

SYN

synchronize

%16

ETB

end transmission block

%17

CAN

cancel

%18

EM

end of medium

%19

SUB

substitute

%1A

ESC

escape

%1B

FS

file separator

%1C

GS

group separator

%1D

RS

record separator

%1E

US

unit separator

%1F



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : ASCII, Encode, URL
Trackback 0 : Comment 0

[Java] Array Value 존재 유무 확인하기

ITWeb/개발일반 2017.04.18 10:38

생각 나지 않을때가 많아서 퍼왔습니다.


Originanl Source)

http://www.programcreek.com/2014/04/check-if-array-contains-a-value-java/


public static boolean useList(String[] arr, String targetValue) {

  return Arrays.asList(arr).contains(targetValue);

}


public static boolean useSet(String[] arr, String targetValue) {

  Set<String> set = new HashSet<String>(Arrays.asList(arr));

  return set.contains(targetValue);

}


public static boolean useLoop(String[] arr, String targetValue) {

  for(String s: arr){

    if(s.equals(targetValue))

      return true;

  }

  return false;

}


public static boolean useArraysBinarySearch(String[] arr, String targetValue) { 

  int a =  Arrays.binarySearch(arr, targetValue);

  if(a > 0)

    return true;

  else

    return false;

}


binary search 가 제일 성능이 좋습니다.

단, 위 코드에서 빠진게 있다면 Arrays.sort(arr) 를 먼저 하고 하셔야 된다는 것입니다.


Arrays.sort(arr);

int a = Arrays.binarySearch(arr, targetValue);

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

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

ITWeb/개발일반 2017.02.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 테스트도 해보시면 좋을 것 같습니다.


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : OCR, tess4j, tesseract
Trackback 0 : Comment 0

[OSX El Capitan] ulimit 수정

ITWeb/개발일반 2017.02.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>


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : capitan, OSX, ulimit
Trackback 0 : Comment 0

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

ITWeb/개발일반 2017.02.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


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

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : CAPTCHA, simple
Trackback 0 : Comment 0

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

ITWeb/개발일반 2017.02.07 14:07

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

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



텐서플루우 

- https://tensorflow.blog/

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

[HttpClient] Timeout 설정 예시

ITWeb/개발일반 2017.02.07 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);


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

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

ITWeb/개발일반 2017.02.06 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”);

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

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

ITWeb/개발일반 2017.02.02 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;

  }

}


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

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : AWS, elb, HTTP, https, nginx, ssl
Trackback 0 : Comment 0

[Appboy] REST API 를 이용한 이벤트 처리

ITWeb/개발일반 2017.02.01 14:01

앱보이 API 를 이용해서 앱에서 이벤트 푸쉬를 발생 하기 위한 예제 코드 입니다.

네이티브 앱은 SDK 를 이용하면 되지만 웹뷰는 REST API 를 이용해야 합니다.


# endpoint

https://api.appboy.com/users/track

 

# method

POST

 

# header

Content-Type: application/json

 

# body raw

{

"app_group_id":"xxxxx-xxxxx-xxxx-xxxxx",

"events": [

    {

        "external_id":"xxxxx-xxxxxx-xxxxxxx-xxxxxx",

        "name":"$EVENT_NAME$",

        "properties": {

            "keyword":"$KEYWORD$"

        },

        "time":"2017-01-26T07:10:00+09:00"

    }

]

}


참고문서)

https://www.appboy.com/documentation/REST_API/

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
tags : API, appboy, REST, 앱보이
Trackback 0 : Comment 0

티스토리 툴바