CREATE OR REPLACE FUNCTION FUNC_SPLIT(COLNAME VARCHAR, SEP VARCHAR, NUM NUMBER)

RETURN VARCHAR

IS

STR VARCHAR2(512);

BEGIN

IF NUM > 0 THEN

IF INSTR(COLNAME, SEP, 1, NUM+1) < 1 THEN

IF INSTR(COLNAME, SEP, 1, NUM) > 0 THEN

SELECT SUBSTR(COLNAME, INSTR(COLNAME, SEP, 1, NUM) + LENGTH(SEP), LENGTH(COLNAME)) INTO STR FROM DUAL;

END IF;

END IF;

IF INSTR(COLNAME, SEP, 1, NUM+1) > 0 THEN

SELECT SUBSTR(COLNAME, INSTR(COLNAME, SEP, 1, NUM) + LENGTH(SEP), (INSTR(COLNAME, SEP, 1, NUM+1) - INSTR(COLNAME, SEP, 1, NUM) - LENGTH(SEP))) INTO STR FROM DUAL;

END IF;

END IF;

IF NUM = 0 THEN

SELECT SUBSTR(COLNAME, 0, INSTR(COLNAME, SEP, 1, 1) - 1) INTO STR FROM DUAL;

END IF;

RETURN STR;

END func_split;


사용법

예) SELECT FUNC_SPLIT('a$b$c', '$', 0) FROM DUAL;


첫번째 매개변수 : 자를 문자열

두번째 매개변수 : 구분자

세번째 매개변수 : 추출해낼 위치



리그오브레전드는 국내 및 전세계적으로 인기있는 게임인데요.

리그오브레전드를 즐기기 위해서 필요한 PC 사양에 대해 알아보겠습니다.

아래는 현재 리그오브레전드 공식 홈페이지에서 공개한 최소 및 권장 사양입니다.


윈도우 PC의 권장 시스템 사양


맥 PC의 권장 시스템 사양


2011년 한국에 출시된 게임이며, 현재까지 많은 사랑을 받고있는 게임이지만

생각보다 권장 시스템 사양은 그리 높지않은것을 볼 수 있습니다.


아래는 롤 설치 방법에 대해 설명하겠습니다.

아래 이미지를 클릭하여 롤 홈페이지에 접속하여 클라이언트를 다운받습니다.


클라이언트 다운로드가 완료되면 설치버튼을 눌러 가이드에 따라 설치하시면 됩니다.

설치가 완료되면 리그오브레전드를 즐기시면 됩니다.


감사합니다.

'기타' 카테고리의 다른 글

MVC란? MVC 디자인 패턴  (0) 2019.03.20
프로그래밍 언어별 정리  (2) 2018.10.19
카카오톡 pc버전 설치하기  (8) 2018.09.13
Visual Studio 2017 설치하기  (1) 2018.09.12
카카오 개발자 컨퍼런스 2018 'if kakao' 개최  (0) 2018.08.16


개발자 등록과정은 생략


페이스북에서 제공해주는 툴을 사용하면 간단히 토큰을 생성할 수 있다.

https://developers.facebook.com/tools/explorer


페이스북 비 로그인 상태에서 게시글 가져오는 방법


Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    @Resource MappingJackson2JsonView ajaxMainView;
    @RequestMapping(value="/facebookPageCrawling.do", method=RequestMethod.POST)  
    public ModelAndView facebookPageCrawling(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {        
        String token = "앱 아이디|앱 시크릿 아이디";
        String user_id = "회원 아이디";
        URL url = new URL("https://graph.facebook.com/" + user_id + "?fields=posts%7Bcreated_time%2Cmessage%2Cpicture%2Cpermalink_url%7D&access_token=" +  token); 
        HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); 
 
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
        String inputLine; 
        StringBuffer sb = new StringBuffer(); 
        
        while ((inputLine = in.readLine()) != null) { 
            sb.append(inputLine);
        } 
        in.close(); 
        String result = sb.toString();
 
        model.addAttribute("model", result);
        
        return new ModelAndView(ajaxMainView, model);
    }
cs


토큰에 | (백스페이스 아래에 있는 구분자) 를 기준으로 앱 아이디와 시크릿 아이이디를 토큰으로 사용한다.

앱과 시크릿 아이디는 https://developers.facebook.com/apps/ 에서 본인의 앱으로 들어가서

기본설정에 보면 나와있다.


회원 아이디는 위에 그래프 툴에서 확인 가능하다.


기호에 맞게 사용하면 끝


1, 17, 19, 21번째 줄은 화면에 출력하기 위해 js단으로 데이터를 보내는 코드이므로 본인 코드에 맞게 수정할것!


'Java' 카테고리의 다른 글

구글, 파파고 번역 API 성능 비교  (1) 2019.09.18
google translate api v3 사용법  (1) 2019.09.16
java spring pwa fcm web push 구현  (2) 2019.09.10
Object 클래스에 대해  (0) 2018.11.04
자바 표준 입력 클래스 Scanner 사용법  (1) 2018.11.04
자바 상속  (0) 2018.10.17
자바 싱글톤 클래스(Singleton class)  (3) 2018.10.16
자바 Wrapper Class  (0) 2018.10.15


 

Google Translate API V3(beta)

Naver Papago Translate NMT

Detecting(언어감지)

짧은 텍스트(30)

15

1.9

긴 텍스트(500+)

1초 미만

0.1초 미만

Translate(번역)

짧은 텍스트(30)

15

1.9~ 2.3

긴 텍스트(500+)

1초 미만

0.1초 미만

Detecting + Translate

짧은 텍스트(30)

30

3~ 5

긴 텍스트(500+)

1~ 3

0.1~ 0.3

NOTE

* 짧은 글 번역시 실행속도는 호출 횟수에 비례

(구글 API의 경우 트래픽 속도에 따라 빨라졌다 느려졌다 함)

 

* db 저장 값을 번역하여 출력 시 텍스트를 대체하는 것이므로

번역할 언어를 한글이라 가정, detecting 과정 생략 시 시간 2배 절약

 

* 구글, 파파고 모두 처음 번역과 두 번째 이상 번역 속도 차이 2배 이상

(처음 5초가 걸리더라도 두 번째 부터는 1~2초 이내에 실행됨)

 

* 정확도는 구글이 조금 더 정확하며, 변환 언어를 더 많이 지원함 (V2V3 속도차이 거의 X)

가격

무료

30500,000자 제한(1일 환산 시 16,666)

110,000자 제한

과금

1,000,000자 당 20USD

1,000,000자 당 20,000


'Java' 카테고리의 다른 글

facebook graph api로 게시글 가져오기  (1) 2019.09.23
google translate api v3 사용법  (1) 2019.09.16
java spring pwa fcm web push 구현  (2) 2019.09.10
Object 클래스에 대해  (0) 2018.11.04
자바 표준 입력 클래스 Scanner 사용법  (1) 2018.11.04
자바 상속  (0) 2018.10.17
자바 싱글톤 클래스(Singleton class)  (3) 2018.10.16
자바 Wrapper Class  (0) 2018.10.15


GCP(google cloud platform) 생성 및 설정은 생략한다.

https://cloud.google.com/gcp/getting-started/?hl=ko 여기를 참고할것!


모든 코드 및 내용은

https://cloud.google.com/translate/docs/quickstart-client-libraries-v3 여기를 참고했음.


번역 함수 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    static String translateText(String text, String sourceLanguageCode, String targetLanguageCode) {
 
        try (TranslationServiceClient translationServiceClient = TranslationServiceClient.create()) {
 
 
 
        LocationName locationName = LocationName.newBuilder().setProject("").setLocation("").build();
 
 
 
        TranslateTextRequest translateTextRequest = TranslateTextRequest.newBuilder()
 
            .setParent(locationName.toString())
 
            .setMimeType("text/plain")
 
            .setSourceLanguageCode(sourceLanguageCode)
 
            .setTargetLanguageCode(targetLanguageCode)
 
            .addContents(text)
 
            .build();
 
 
 
        TranslateTextResponse response = translationServiceClient.translateText(translateTextRequest);
 
        return response.getTranslationsList().get(0).getTranslatedText();
 
 
 
        } catch (Exception e) {
 
              throw new RuntimeException("Couldn't create client.", e);
 
        }
 
    }
 
 
cs


GOOGLE API 문서에서와 조금 다른 부분이 존재한다.

7번째 줄 setProject에는 project id를 넣고, setLocation에는 global이라고 고정값을 넣었다.

retrun 값도 호출 함수에 맞게 String으로 변경하였다.

특이하게도 번역함수에 sourceLanguageCode를 넣어야한다.

번역할 String의 언어를 명시해주어야 한다. (하지 않아도 되지만 짧은 텍스트인 경우 오류가 간헐적으로 발생)


때문에 언어 코드를 detect하는 함수를 아래와 같이 작성한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    static String detectLanguageOfText(String text) {
        try (TranslationServiceClient translationServiceClient = TranslationServiceClient.create()) {
 
        LocationName locationName = LocationName.newBuilder().setProject("").setLocation("").build();
        DetectLanguageRequest detectLanguageRequest = DetectLanguageRequest.newBuilder()
            .setParent(locationName.toString())
            .setMimeType("text/plain")
            .setContent(text)
            .build();
 
        DetectLanguageResponse response = translationServiceClient.detectLanguage(detectLanguageRequest);
        return response.getLanguages(0).getLanguageCode();
 
        } catch (Exception e) {    
            throw new RuntimeException("Couldn't create client.", e);
        }
    }
cs


4번째 줄에도 똑같이 project id와 "global"을 작성한다.

이 함수의 반환값은 코드값(String)으로 변경되었다.


이제 함수를 호출하는 방법이다.


1
2
3
4
5
6
7
8
9
10
11
12
        String text = "HELLO";
        String from = detectLanguageOfText(text);
        String to = request.getParameter("lang");
        
        System.out.println("TRANSLATE STRING : " + text);
        System.out.println("TRANSLATE LANGUAGE FROM : " + from);
        System.out.println("TRANSLATE LANGUAGE TO : " + request.getParameter("lang"));
        
        if(from.equals(to))
            System.out.println("TRANSLATE RESULT : " + text);
        else
            System.out.println("TRANSLATE RESULT : " + translateText(text, from, to));
cs



희한하게도 FROM LANGUAGE와 TO LANGUAGE가 같은 경우 에러를 반환한다.

이를 방지하기위해 9번째 코드를 추가하였다.



에러 해결

API 호출시 500에러 (CREDENTIALS 어쩌고...)가 발생하여

API 문서의 SET 명령어를 통해 환경변수를 등록했지만 그대로 오류 발생


내 PC -> 우클릭 시스템 -> 고급 시스템 설정 -> 고급 -> 환경변수 -> 사용자 변수에 새로 생성

변수이름 : GOOGLE_APPLICATION_CREDENTIALS

변수 값 : 생성한 비밀 키 json 경로


수동으로 환경 변수를 설정해주었다면 PC 재시작 필요




to Top