2014년 12월 14일 일요일

mavan install for MSSQL case.

1. maven install at MAC
1-1 download maven
    http://maven.apache.org/download.cgi > apache-maven-3.x.x-bin.tar.gz
1-2 압축풀기
    압축을 /usr/local 에 푼다.
1-3 링크만들기
ln -s apache-maven-3.2.3 maven
-----------------------------------------------------------------------------
ls -l

lrwxr-xr-x   1 root       owner   18 12  8 18:05 maven -> apache-maven-3.2.3
-----------------------------------------------------------------------------
1-4 프로파일 수정
/User 안의 .profile 을 편집하여 아래 내용을 넣기
* 참고 : 자바의 경로는 다를 수 있음.
vi .profile
-----------------------------------------------------------------------------
export M3_HOME=/usr/local/maven
export M3=$M3_HOME/bin
export PATH=$PATH:$M3
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home

alias ls="ls -v"
alias ll="ls -lv"
-----------------------------------------------------------------------------

1-5 프로파일 적용
source .profile
1-6 메이븐 설치 확인
mvn -version

2. maven install at Windows
2-1  download maven
    http://maven.apache.org/download.cgi > apache-maven-3.x.x-bin.zip
2-2 압축풀기
    압축을 특정 폴더에 푼다. (예 D:\maven\)
2-3 환경변수 등록
    2-3-1 컴퓨터 아이콘에 오른클릭 후 속성 (혹은 윈도우 로고 + pause키)
    2-3-2 고급 시스템 설정 > 고급 탭 > 환경변수 버튼
    2-3-3 시스템 변수 부분에서 새로 만들기 버튼
    2-3-3-1 변수이름: MAVEN_HOME // 변수 값 : MAVEN을 압축 해제한 폴더
    2-3-4 기존 시스템 변수에 추가
    2-3-4-1 기존 변수이름 : Path // 추가 할 변수 값 : %MAVEN_HOME%\bin;
         ** 변수 값 추가 전 끝 부분이 세미콜론(;)으로 되어 있는지 확인하고
             추가 후 마지막 부분을 세미콜론(;)으로 해 주어야 함.
    2-3-5 java가 설치되어 있어야 하며 JAVA_HOME이 설정되어 있어야 함
              설정방법은 메이븐과 동일 단 이름과 변수의 폴더 위치만 바뀜
              예) 변수이름: JAVA_HOME // 변수 값 : JAVA를 압축 해제한 폴더
2-4 설치 확인
    2-4-1 [윈도우 로고 + R] 로 실행창을 열고 cmd 입력 후 확인
    2-4-2 자바 버젼 확인 : java -version
    2-4-3 메이븐 버젼 확인 : mvn -version

-- !끝! --

2. MSSQL
Microsoft SQL은 메이븐이 자동으로 배포를 안해준다 ㅡㅡ
해당 jar를 수동으로 설치해 주고 pom.xml에 등록 후 확인해 보면 된다....
각 PC에서 죄다 해줘야 한다 ㅠㅠ
일단 다운로드~
2-1 다운로드 (참고로 3.0 이랑 4.0 이랑 지원하는 자바 버젼이 다르다.)
http://www.microsoft.com/en-us/download/details.aspx?id=11774
2-2 터미널로 다운받고 압축을 푼 jar 위치로 가서
mvn install:install-file -Dfile=sqljdbc4.jar 
 -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 
 -Dpackaging=jar

-- !끝!--



2014년 12월 4일 목요일

Microsoft SQL Server IP로 접속 설정

* management studio 에서 IP로 접속을 하기 위해서는
[구성관리자]에서 설정이 필요하다.
1. TCP/IP 를 사용으로 설정
2. TCP/IP 속성의 IP 주소 탭에서 해당하는 IP주소에 대하여 속성변경
3. 서비스 재 시작

1. 네트워크 구성 > SERVER에 대한 프로토콜 > TCP/IP를 사용으로 설정
















2. TCP/IP를 마우스 오른클릭 > 속성 선택 >사용하고자 하는 IP 주소를 찾아서
    * TCP 동적 포트 : 0
    * TCP 포트 : 1443
    * 사용 : 예
    * 활성 : 예

3. 서비스 탭의 SQL SERVICE 항목 오른클릭 > 다시 시작 선택















2014년 10월 14일 화요일

mysql character setting for mac

1. 터미널을 연다 (응용프로그램 > 유틸리티)
2. MySQL 실행 
    2-1. 프로파일 열기 : vi ~/.profile
    2-2. i 를 눌러 편집 모드로 진입
    2-3. 편집 : export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:$PATH
    2-4. 저장하고 닫기 : esc 버튼을 누르고 콜론(:)을 입력 > wq 누르고 엔터버튼
3. 터미널 종료 후 다시 시작
4. 관리자로 접속 : mysql -uroot  
    ** " mysql> " 이라고 나와야 함
5. root 외의 사용자 삭제 : delete from mysql.user where not (host="localhost" and user ="root");
6. 적용 : FLUSH PRIVILEGES;
7. 비밀번호 설정 : SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234');
8. 적용 : FLUSH PRIVILEGES;
9. 터미널 종료 : exit
10. 터미널 다시 접속 : mysql -uroot -p1234
11. 상태확인 : status
        characterset 부분을 보면 초기 설정 시 latin1로 되어 있을 것임.
12. 터미널 종료 : exit
13. 터미널에서 root 계정으로 my.cnf 파일 변경
    13-1. 터미널을 열고 root 접속 : su -root
        13-1-1. 비밀번호를 설정한 적이 없다면 sudo -s
    13-2. 문서 편집 명령 : vi/ect/my.cnf
    13-3. 아래 문구를 붙여넣기 :
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection=utf8_general_ci
init_connect=SET NAMES utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
    13-4. 저장하고 닫기 : esc 버튼을 누르고 콜론(:)을 입력 > wq 누르고 엔터버튼
    13-5. 터미널 종료 후 다시 시작
14. 터미널 재 접속 후 root 계정으로 로그인 : mysql -uroot -p1234 
15. 상태 확인 : status

2014년 8월 10일 일요일

마우스 오른 버튼 잠김 풀기

즐겨찾기에 아무 페이지나 북마크 생성 후 주소를 아래의 값으로 변경 ^^

== 아래 ==
javascript:function r(d){d.oncontextmenu=null;d.onselectstart=null;d.ondragstart=null;d.onkeydown=null;d.onmousedown=null; d.body.oncontextmenu=null;d.body.onselectstart=null;d.body.ondragstart=null;d.body.onkeydown=null; d.body.onmousedown=null;};function unify(w){r(w.document);if(w.frames.length>0){for(var i=0;i<w.frames.length;i++){try{unify(w.frames[i].window);}catch(e){}};};};unify(self);alert("ok");

2014년 7월 22일 화요일

Web view 에서 쿠키가 안 먹힐 때

안드로이드 웹뷰에서 쿠키가 안 먹힐 때

메인 액티비티에서 쿠키에 대해 싱크도 해주고 만들어주고... 암튼 만들어줘야 한다.

위치 : MainActivity.java
Source:

import android.webkit.CookieSyncManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        setLayout();
       
        CookieSyncManager.createInstance(this);
       
        // set web view client
        mWebview.setWebViewClient(new WebClient());
       
       
        WebSettings set = mWebview.getSettings();
        // set java script enable.
        set.setJavaScriptEnabled(true);
        set.setBuiltInZoomControls(true);
       
        mWebview.loadUrl("http://???????????");
         
    }

   class WebClient extends WebViewClient {
    @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
   
    public void onPageFinished(WebView view, String url){
    CookieSyncManager.getInstance().sync();
    }
    }

    @Override
    protected void onResume(){
    super.onResume();
    CookieSyncManager.getInstance().startSync();
    }
    
    @Override
    protected void onPause(){
    super.onPause();
    CookieSyncManager.getInstance().stopSync();
    }

Web view 에서 전화 걸기 안될 때

안드로이드 웹뷰에서 전화 걸기가 안 될때 !!
1. 웹에서 태그를 제대로 썼나 확인
<a href="tel: 02-0000-0000">전화걸기</a>

2. 앱에서 권한 줬나 확인 ( AndroidManifest.xml)
<uses-permission android:name="android.permission.CALL_PHONE"/>

3. 앱에서 activity 호출 했나 확인(MainActivity.java)

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if(url.startsWith("tel:")){
    Intent dial = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    //현재의 activity 에 대하여 startActivity 호출
    startActivity(dial);
    return true;
    }
            view.loadUrl(url);
            return true;
        }

2014년 7월 6일 일요일

signature form depend on canvas

signature form using canvas tag

test on ::: http://jsfiddle.net/gustywind/Lj7j6/


source:::
Desktops and Tablets

Canvas test




.....

...

mata tag for mobile web

<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,target-densitydpi=medium-dpi">

2014년 6월 26일 목요일

자바스크립트로 브라우져 내용 확인

URL = document.URL; //https://www.blogger.com/blogger.g?blogID...........
domain = document.domain; // blogger.com

//모바일 브라우저 문자열 체크
    var mobileInfo = new Array('Android', 'iPhone', 'iPod', 'BlackBerry', 'Windows CE', 'SAMSUNG', 'LG', 'MOT', 'SonyEricsson');
    for (var info in mobileInfo){
        if (navigator.userAgent.match(mobileInfo[info]) != null){
            // 모바일 수행
            $('#isMobile').val('Y');
break;
        }else{
            $('#isMobile').val('N');
break;
}
    }

// 펑션으로 구현
function isMobile(){
var userAgent = navigator.userAgent.toLowerCase();

return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(userAgent)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(userAgent.substr(0,4));
}

2014년 6월 23일 월요일

Class CaseInsensitiveMap

요건 말 그대로 대,소문자에 둔감한- insensitive - 맵 형식임.

위치 : org.apache.commons.collections.map.CaseInsensitiveMap
설명 : 
1. 모든 키는 소문자로 변환한다 - newKey.toString().toLower();
2. null 도 사용 가능

사용 예 : 

Map map = new CaseInsensitiveMap();
map.put("One","111");
map.put("Two","222");
map.put(null,"333");
map.put("one","444");

이렇게 하면 One 와 one 가 소문자로 변환되어 one 로 통일됨
리턴 키는 {"one","two",null}
리턴 값은 {"444","222","333"}

이제 키값의 대 소문자 구분없이 그냥
map.get("one"); 이렇게 하면 됨 !!

2014년 6월 20일 금요일

[error] 자바 스크립트와 자바 통신에서 한글이 깨질 경우

<자바 스크립트>
넘기는 값 : encodeURIComponent(넣을 값)

<자바>
받는 값 : URLDecoder.decode(request.getString("받는 값"), "UTF-8")

예시)
javascript--

jQuery.ajax({
type : 'POST',
dataType: 'json',
url : url,
async : false,
data         : name: encodeURIComponent('테스트'),
success : function(data){
ajaxResult = data.resultFlag;
},
error : function(xhr, ajaxOptions, thrownError){
alert('status: '+xhr.status+'\n error: '+thrownError);
}
});

JAVA--

String name = URLDecoder.decode(request.getString("name"), "UTF-8");

2014년 6월 11일 수요일

[javascript] String prototype

/*--------------------------------------------------------------------------------
 *  String prototype
 *--------------------------------------------------------------------------------*/
//-----------------------------------------------------------------------------
// 문자의 좌, 우 공백 제거
// @return : String
//-----------------------------------------------------------------------------
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
//-----------------------------------------------------------------------------
// 문자의 좌 공백 제거
// @return : String
//-----------------------------------------------------------------------------
String.prototype.ltrim = function() {
    return this.replace(/(^\s*)/, "");
}
//-----------------------------------------------------------------------------
// 문자의 우 공백 제거
// @return : String
//-----------------------------------------------------------------------------
String.prototype.rtrim = function() {
    return this.replace(/(\s*$)/, "");
}
//-----------------------------------------------------------------------------
// 문자열의 byte 길이 반환
// @return : int
//-----------------------------------------------------------------------------
String.prototype.byte = function() {
    var cnt = 0;
    for (var i = 0; i < this.length; i++) {
        if (this.charCodeAt(i) > 127)
            cnt += 2;
        else
            cnt++;
    }
    return cnt;
}
//-----------------------------------------------------------------------------
// 정수형으로 변환
// @return : String
//-----------------------------------------------------------------------------
String.prototype.int = function() {
    if(!isNaN(this)) {
        return parseInt(this);
    }
    else {
        return null;
    }
}
//-----------------------------------------------------------------------------
// 숫자만 가져 오기
// @return : String
//-----------------------------------------------------------------------------
String.prototype.num = function() {
    return (this.trim().replace(/[^0-9]/g, ""));
}
//-----------------------------------------------------------------------------
// 숫자에 3자리마다 , 를 찍어서 반환
// @return : String
//-----------------------------------------------------------------------------
String.prototype.money = function() {
    var num = this.trim();
    while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
        num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
    }
    return num;
}
//-----------------------------------------------------------------------------
// 숫자의 자리수(cnt)에 맞도록 반환
// @return : String
//-----------------------------------------------------------------------------
String.prototype.digits = function(cnt) {
    var digit = "";
    if (this.length < cnt) {
        for(var i = 0; i < cnt - this.length; i++) {
            digit += "0";
        }
    }
    return digit + this;
}
//-----------------------------------------------------------------------------
// " -> &#34; ' -> &#39;로 바꾸어서 반환
// @return : String
//-----------------------------------------------------------------------------
String.prototype.quota = function() {
    return this.replace(/"/g, "&#34;").replace(/'/g, "&#39;");
}
//-----------------------------------------------------------------------------
// 파일 확장자만 가져오기
// @return : String
//-----------------------------------------------------------------------------
String.prototype.ext = function() {
    return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);
}
//-----------------------------------------------------------------------------
// URL에서 파라메터 제거한 순수한 url 얻기
// @return : String
//-----------------------------------------------------------------------------
String.prototype.uri = function() {
    var arr = this.split("?");
    arr = arr[0].split("#");
    return arr[0];
}

-------------------------------------------------------------------------------*\
각종 체크 함수들
-------------------------------------------------------------------------------*/
//-----------------------------------------------------------------------------
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @return : String
//-----------------------------------------------------------------------------
String.prototype.meta = function() {
    var str = this;
    var result = ""
    for(var i = 0; i < str.length; i++) {
        if((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/).test(str.charAt(i))) {
            result += str.charAt(i).replace((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/), "\\$1");
        }
        else {
            result += str.charAt(i);
        }
    }
    return result;
}
//-----------------------------------------------------------------------------
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @return : String
//-----------------------------------------------------------------------------
String.prototype.remove = function(pattern) {
    return (pattern == null) ? this : eval("this.replace(/[" + pattern.meta() + "]/g, \"\")");
}
//-----------------------------------------------------------------------------
// 최소 최대 길이인지 검증
// str.isLength(min [,max])
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isLength = function() {
    var min = arguments[0];
    var max = arguments[1] ? arguments[1] : null;
    var success = true;
    if(this.length < min) {
        success = false;
    }
    if(max && this.length > max) {
        success = false;
    }
    return success;
}
//-----------------------------------------------------------------------------
// 최소 최대 바이트인지 검증
// str.isByteLength(min [,max])
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isByteLength = function() {
    var min = arguments[0];
    var max = arguments[1] ? arguments[1] : null;
    var success = true;
    if(this.byte() < min) {
        success = false;
    }
    if(max && this.byte() > max) {
        success = false;
    }
    return success;
}
//-----------------------------------------------------------------------------
// 공백이나 널인지 확인
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isBlank = function() {
    var str = this.trim();
    for(var i = 0; i < str.length; i++) {
        if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) {
            return false;
        }
    }
    return true;
}
//-----------------------------------------------------------------------------
// 숫자로 구성되어 있는지 학인
// arguments[0] : 허용할 문자셋
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isNum = function() {
    return (/^[0-9]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 영어만 허용 - arguments[0] : 추가 허용할 문자들
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isEng = function() {
    return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isEngNum = function() {
    return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isNumEng = function() {
    return this.isEngNum(arguments[0]);
}
//-----------------------------------------------------------------------------
// 아이디 체크 영어와 숫자만 체크 첫글자는 영어로 시작 - arguments[0] : 추가 허용할 문자들
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isUserid = function() {
    return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 한글 체크 - arguments[0] : 추가 허용할 문자들
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isKor = function() {
    return (/^[가-힣]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 주민번호 체크 - arguments[0] : 주민번호 구분자
// XXXXXX-XXXXXXX
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isJumin = function() {
    var arg = arguments[0] ? arguments[0] : "";
    var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)");
    if(jumin == null) {
        return false;
    }
    else {
        jumin = jumin.toString().num().toString();
    }
    // 생년월일 체크
    var birthYY = (parseInt(jumin.charAt(6)) == (1 ||2)) ? "19" : "20";
    birthYY += jumin.substr(0, 2);
    var birthMM = jumin.substr(2, 2) - 1;
    var birthDD = jumin.substr(4, 2);
    var birthDay = new Date(birthYY, birthMM, birthDD);
    if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
        return false;
    }
    var sum = 0;
    var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
    var last = parseInt(jumin.charAt(12));
    for(var i = 0; i < 12; i++) {
        sum += parseInt(jumin.charAt(i)) * num[i];
    }
    return ((11 - sum % 11) % 10 == last) ? true : false;
}
//-----------------------------------------------------------------------------
// 외국인 등록번호 체크 - arguments[0] : 등록번호 구분자
// XXXXXX-XXXXXXX
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isForeign = function() {
    var arg = arguments[0] ? arguments[0] : "";
    var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");
    if(jumin == null) {
        return false;
    }
    else {
        jumin = jumin.toString().num().toString();
    }
    // 생년월일 체크
    var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "19" : "20";
    birthYY += jumin.substr(0, 2);
    var birthMM = jumin.substr(2, 2) - 1;
    var birthDD = jumin.substr(4, 2);
    var birthDay = new Date(birthYY, birthMM, birthDD);
    if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
        return false;
    }
    if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) {
        return false;
    }
    var sum = 0;
    var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
    var last = parseInt(jumin.charAt(12));
    for(var i = 0; i < 12; i++) {
        sum += parseInt(jumin.charAt(i)) * num[i];
    }
    return (((11 - sum % 11) % 10) + 2 == last) ? true : false;
}
//-----------------------------------------------------------------------------
// 사업자번호 체크 - arguments[0] : 등록번호 구분자
// XX-XXX-XXXXX
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isBiznum = function() {
    var arg = arguments[0] ? arguments[0] : "";
    var biznum = eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");
    if(biznum == null) {
        return false;
    }
    else {
        biznum = biznum.toString().num().toString();
    }
    var sum = parseInt(biznum.charAt(0));
    var num = [0, 3, 7, 1, 3, 7, 1, 3];
    for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;
    sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);
    sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));
    return (sum % 10 == 0) ? true : false;
}
//-----------------------------------------------------------------------------
// 법인 등록번호 체크 - arguments[0] : 등록번호 구분자
// XXXXXX-XXXXXXX
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isCorpnum = function() {
    var arg = arguments[0] ? arguments[0] : "";
    var corpnum = eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");
    if(corpnum == null) {
        return false;
    }
    else {
        corpnum = corpnum.toString().num().toString();
    }
    var sum = 0;
    var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
    var last = parseInt(corpnum.charAt(12));
    for(var i = 0; i < 12; i++) {
        sum += parseInt(corpnum.charAt(i)) * num[i];
    }
    return ((10 - sum % 10) % 10 == last) ? true : false;
}
//-----------------------------------------------------------------------------
// 이메일의 유효성을 체크
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isEmail = function() {
    return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());
}
//-----------------------------------------------------------------------------
// 전화번호 체크 - arguments[0] : 전화번호 구분자
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isPhone = function() {
    var arg = arguments[0] ? arguments[0] : "";
    return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}
//-----------------------------------------------------------------------------
// 핸드폰번호 체크 - arguments[0] : 핸드폰 구분자
// @return : boolean
//-----------------------------------------------------------------------------
String.prototype.isMobile = function() {
    var arg = arguments[0] ? arguments[0] : "";
    return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}

2014년 5월 7일 수요일

Context attributes in Tomcat

속성 설명
backgroundProcessorDelay 이 값은 컨텍스트와 그 자식 컨테이너에서 background process method가 invoke되는 delay 시간을 나타낸다.
이 값을 양수로 설정하면 어떤 쓰레드가 분기되어 일정 시간 후에 이 쓰레드가 해당 host와 자식 컨테이너에서 background process method를 실행시킵니다
만약 설정하지 않으면 디폴트값인 -1을 가지며 음수의 값은 부모 host의 background processing 정책을 사용한다는 것입니다.
참고로 컨텍스트는 세션을 종료하거나 클래스 리로딩을 위한 모니터링등을 위해 background processing을 사용합니다.
className 사용할 Java 구현체 클래스의 이름. 이 클래스는 반드시 org.apache.catalina.Context 인터페이스를 구현해야 합니다. 지정하지 않으면 표준값 (아래에 정의됩니다)이 사용됩니다
cookies true(디폴트)로 지정하면 클라이언트가 쿠키를 지원하는 경우 세션확인의 통신수단(session identifier communication)으로 쿠키를 사용합니다. false로 지정하면 세션확인의 통신수단으로 쿠키 사용을 하지 않고, 어플리케이션에 의한 URL 다시쓰기(URL rewriting)에만 의존한다는 의미입니다.
crossContext true로 지정하면 이 어플리케이션에서 ServletContext.getContext() 호출을 통해, 이 가상호스트에서 실행중인 다른 웹어플리케이션에 대한 요청디스패쳐(request dispatcher)를 성공적으로 얻을 수 있습니다. 보안상의 이유로 false(디폴트)로 지정하면 getContext()는 언제나 null을 반환하게 됩니다.
docBase 이 웹어플리케이션에 대한 Document Base (Context Root로도 알려져 있습니다) 디렉토리, 또는 웹어플리케이션 아카이브 파일의 경로명(웹어플리케이션을 WAR 파일로 직접 실행하는 경우)을 나타냅니다. 이 디렉토리나 WAR 파일에에 대한 절대경로명을 지정할 수도 있고, 이 Context가 정의된 Host의 appBase 디렉토리에 대한 상대경로명을 지정할 수도 있습니다
override true로 설정하면 DefaultContext element를 관련된 host에서 명백하게 상속받아 사용합니다
기본값으로 Defaultcontext element가 사용됩니다
privileged true로 설정하면 이 컨텍스트는 관리자서블릿(manager servlet) 같은 컨테이너 서블릿을 사용할 수 있습니다.
path 이 웹어플리케이션의 컨텍스트 경로(context path)를 나타내며, 각 요청 URI의 시작부분이 컨텍스트 경로와 같을 때 해당 웹어플리케이션이 그 요청을 처리하게 됩니다. 하나의 특정 Host 내의 컨텍스트 경로들은 모두 각각 유일해야 합니다. 만약 컨텍스트 경로를 빈 스트링("")으로 지정하면, 이 Context는 이 Host에 대한 디폴트 웹어플리케이션으로 정의된 것입니다. 디폴트 웹어플리케이션은 다른 Context 들에 해당되지 않는 모든 요청을 처리할 것입니다.
reloadable true로 지정하면, Catalina는 /WEB-INF/classes/와 /WEB-INF/lib 안 클래스 들의 변경여부를 감시하다가, 변경이 발견되면 웹어플리케이션을 자동으로 재적재(reload)합니다. 이 기능은 개발중에는 매우 유용하지만 얼마간의 실행부하(runtime overhead)가 발생하므로, 실제 운영할 용도로 어플리케이션을 배치(deploy)할 때는 사용하지 않도록 합니다. 그러나 이미 배치가 끝난 어플리케이션이라도 Manager 웹어플리케이션을 이용하면 필요할 때 재적재 하도록 할 수 있습니다
wrapperClass 이 Context로 관리할 서블릿 들에 대해 사용할 org.apache.catalina.Wrapper 구현체 클래스의 Java 클래스명입니다. 지정하지 않으면 표준값이 사용됩니다

2014년 3월 19일 수요일

[javascript] Date Control

To get year - should use getFullYear() instead getYear()
To get month - should be add '1' (getMonth() is array. array starts from '0')

-- HTML

<div>
    <table><tbody>
            <tr>
                <th>today</th><td id="today"></td>
            </tr>
            <tr>
                <th>year</th><td id="year"></td>
            </tr>
            <tr>
                <th>fullYear</th><td id="fullYear"></td>
            </tr>
            <tr>
                <th>month</th><td id="month"></td>
            </tr>
            <tr>
                <th>month_add</th><td id="month_add"></td>
            </tr>
            <tr>
                <th>date</th><td id="date"></td>
            </tr>
            <tr>
                <th>day</th><td id="day"></td>
            </tr>
            <tr>
                <th>day-Kor</th><td id="dayKor"></td>
            </tr>
            <tr>
                <th>3/20/2014</th><td id="inputDate"></td>
            </tr>
            <tr>
                <th>ReverseToStr</th><td id="reverseToStr"></td>
            </tr>
    </tbody></table>
</div>

-- Script

$(document).ready(function(){
    var today = new Date();
    //alert(today);
    $('#today').text(today);
    $('#year').text(today.getYear());
    $('#fullYear').text(today.getFullYear());
    $('#month').text(today.getMonth());
    $('#month_add').text(today.getMonth()+1);
    $('#date').text(today.getDate());
    $('#day').text(today.getDay());
    $('#dayKor').text(dayToKor(today.getDay()));
 
    $('#inputDate').text(new Date('3/20/2014 17:30:30'));
    $('#reverseToStr').text('2014-03-20'.replace(/-/gi,''));
});

function dayToKor(num){
    var week = ["일","월","화","수","목","금","토"];  
    return week[num];
}

-- Result

todayThu Mar 20 2014 11:53:54 GMT+0900 (대한민국 표준시)
year114
fullYear2014
month2
month_add3
date20
day4
day-Kor
3/20/2014Thu Mar 20 2014 17:30:30 GMT+0900 (대한민국 표준시)
ReverseToStr20140320

[jQuery] not()

jQuery not()

특정 클래스를 제외한 체크된 모든 수를 가져오기 예제

-- HTML

<input type="button" id="ok" value="click">
<div id ="list">
    <input type="checkbox" class="a b"/>
    <input type="checkbox" class="a b"/>
    <input type="checkbox" class="a c"/>
</div>
<div>
    list:::<span id="aaa"></span></br>
    checked:::<span id="bbb"></span></br>
    checked but not b:::<span id="ccc"></span></br>

-- Script

$(document).ready(function(){
    $('#ok').click(function(){
        $('#aaa').text($('#list').size());
        $('#bbb').text($('.a:checked','#list').size());
        $('#ccc').text($('.a:checked:not(.b)','#list').size());
    });
});

-- Result


  
list:::1
checked:::2
checked but not b:::1

2014년 3월 18일 화요일

RGB code

white #ffffff
whitesmoke #f5f5f5
mintcream #f5fffa
azure #f0ffff
ghostwhite #f8f8ff
aliceblue #f0f8ff
snow #fffafa
floralwhite #fffaf0
ivory #fffff0
seashell #fff5ee
honeydew #f0fff0
oldlace #fdf5e6
beige #f5f5dc
cornsilk #fff8dc
linen #faf0e6
papayawhip #ffefd5
wheat #f5deb3
blanchedalmond #ffebcd
moccasin #ffe4b5
bisque #ffe4c4
navajowhite #ffdead
lightyellow #ffffe0
lightgoldenrodyellow #fafad2
lemonchiffon #fffacd
palegoldenrod #eee8aa
lavenderblush #fff0f5
mistyrose #ffe4e1
antiquewhite #faebd7
lavender #e6e6fa
lightcyan #e0ffff
powderblue #b0e0e6
paleturquoise #afeeee
lightblue #add8e6
skyblue #87ceeb
lightskyblue #87cefa
deepskyblue #00bfFf
cornflowerblue #6495ed
dodgerblue #1e90ff
royalblue #4169e1
slateblue #6a5acd
mediumblue #0000cd
blue #0000ff
mediumslateblue #7b68ee
steelblue #4682b4
cyan #00ffff
darkblue #00008b
darkslateblue #483d8b
lightpink #ffb6c1
pink #ffc0cb
thistle #d8bfd8
plum #dda0dd
violet #ee82ee
orchid #da70d6
mediumorchid #ba55d3
fuchsia #ff00ff
magenta #ff00ff
hotpink #ff69b4
deeppink #ff1493
peachpuff #ffdab9
khaki #f0e68c
lightsalmon #ffa07a
orange #ffa500
darkorange #ff8c00
darksalmon #e9967a
coral #ff7f50
salmon #fa8072
lightcoral #f08080
tomato #ff6347
red #ff0000
orangered #ff4500
crimson #dc143c
burlywood #deb887
sandybrown #f4a460
tan #d2b48c
gold #ffd700
darkgoldenrod #b8860b
goldenrod #daa520
brass #b5a642
peru #cd853f
chocolate #d2691e
indianred #cd5c5c
sienna #a0522d
brown #a52a2a
darkred #8b0000
firebrick #b22222
maroon #800000
saddlebrown #8b4513
palegreen #98fb98
greenyellow #adff2f
mediumspringgreen #00fa9a
lawngreen #7cfc00
lime #00ff00
chartreuse #7fff00
springgreen #00ff7f
lightgreen #90ee90
limegreen #32cd32
forestgreen #228b22
mediumseagreen #3cb371
seagreen #2e8b57
yellowgreen #9acd32
aquamarine #7fffd4
black #000000
blueviolet #8a2be2
cadetblue #5f9ea0
darkcyan #008b8b
darkgray #a9a9a9
darkgreen #006400
darkmagenta #8b008b
darkolivegreen #556b2f
darkorchid #9932cc
darkseagreen #8fbc8f
darkslategray #2f4f4f
darkturquoise #00ced1
darkviolet #9400d3
dimgray #696969
gainsboro #dcdcdc
gray #808080
green #008000
indigo #4b0082
lightgrey #d3d3d3
lightseagreen #20b2aa
lightslategray #778899
lightsteelblue #b0c4de
mediumaquamarine #66cdaa
mediumpurple #9370db
mediumturquoise #48d1cc
mediumvioletred #c71585
midnightblue #191970
navy #000080
olive #808000
olivedrab #6b8e23
palevioletred #db7093
purple #800080
rosybrown #bc8f8f
silver #c0c0c0
slategray #708090
teal #008080
turquoise #40e0d0
darkkhaki #bdb76b
yellow #ffff00
aqua #00ffff

2014년 3월 17일 월요일

SQL Dveloper keys

범주 명령 단축키
Worksheet SQL 워크시트(W) Alt-F10
Worksheet 계획 설명(E)... F10
Worksheet 내역(H) F8
Worksheet 롤백(R) F12
Worksheet 명령문 실행 F9
Worksheet 명령문 실행 Ctrl-Enter
Worksheet 비공유 SQL 워크시트 Ctrl-Shift-N
Worksheet 스크립트 실행 F5
Worksheet 자동 추적(A)... F6
Worksheet 지우기(C) Ctrl-D
Worksheet 커밋(O) F11
검색 다음 찾기(N) F3
검색 바꾸기...(R) Ctrl-R
검색 이전 찾기(P) Shift-F3
검색 증분 뒤로 찾기(B) Ctrl-Shift-E
검색 증분 앞으로 찾기(O) Ctrl-E
검색 찾기...(F) Ctrl-F
검색 커서 다음 단어 찾기 Ctrl-F3
검색 커서 앞 단어 찾기 Ctrl-Shift-F3
기타 SQL 내역: 다음 내역에서 추가 Ctrl-Shift-Down
기타 SQL 내역: 다음 내역으로 바꾸기 Ctrl-Down
기타 SQL 내역: 이전 내역에서 추가 Ctrl-Shift-Up
기타 SQL 내역: 이전 내역으로 바꾸기 Ctrl-Up
기타 고급 형식... Ctrl-Shift-F7
기타 구현 디버그 Shift-F9
기타 대문자/소문자/첫 자를 대문자로 Ctrl-Quote
기타 변경 사항 롤백 F12
기타 변경 사항 커밋 F11
기타 보기 고정 Ctrl-Shift-P
기타 새로 고침 Ctrl-R
기타 새로 만들기(N)... Ctrl-N
기타 테스트 실행 F9
기타 파일 실행 Ctrl-F11
기타 팝업 메뉴 Shift-F10
기타 팝업 메뉴 Context Menu
기타 팝업 설명 Shift-F4
기타 편집(E) Ctrl-L
기타 형식 Ctrl-F7
데이터 편집기 데이터 필터링 Ctrl-Alt-F
데이터 편집기 변경 사항 롤백 F12
데이터 편집기 변경 사항 커밋 F11
데이터 편집기 새로 고침 Ctrl-R
데이터 편집기 선택된 행 삭제 Ctrl-D
데이터 편집기 정렬... Ctrl-Alt-S
데이터 편집기 행 삽입 Ctrl-I
도구 공백 표시 Ctrl-Shift-W
도움말 뒤로 Ctrl-Alt-Left
도움말 문맥에 따른 도움말 F1
도움말 문맥에 따른 도움말 Shift-F1
도움말 앞으로 Ctrl-Alt-Right
디버그 감시...(W) Ctrl-F5
디버그 검사...(I) Ctrl-I
디버그 내부 이동 F7
디버그 외부 이동 Shift-F7
디버그 이동 계속(C) Shift-F8
디버그 재개 F9
디버그 전체 이동 F8
디버그 종료 Ctrl-F2
디버그 중단점 토글(T) F5
디버그 커서까지 실행(U) F4
디버그 프로젝트 디버그 Shift-F9
버전 지정 속성(버전 지정) Ctrl-Shift-O
보기 로그(L) Ctrl-Shift-L
보기 중단점(B) Ctrl-Shift-R
소스 모두 축소(A) Ctrl-Shift-Open Bracket
소스 모두 확장(L) Ctrl-Shift-Close Bracket
소스 재형식화 Ctrl-Alt-L
소스 재형식화 Alt-Shift-F
실행(R) 프로젝트 실행 F11
이동 0 책갈피 토글 Ctrl-Shift-0
이동 0 책갈피로 이동 Ctrl-0
이동 Maximize Toggle Ctrl-Alt-M
이동 기호 문서 찾아보기... Alt-Shift-Minus
이동 기호 찾아보기...(M) Ctrl-Minus
이동 다음 메시지로 이동(X) Alt-F8
이동 다음 책갈피로 이동(O) Ctrl-Q
이동 뒤로(C) Alt-Left
이동 앞으로(W) Alt-Right
이동 이전 메시지로 이동(V) Alt-F7
이동 이전 책갈피로 이동(P) Ctrl-Shift-Q
이동 책갈피 토글(T) Ctrl-K
이동 책갈피로 이동...(B) Ctrl-Shift-K
이동 최근 파일로 이동(F)... Ctrl-Equals
이동 최근 편집으로 이동(E) Ctrl-Shift-Backspace
이동 행으로 이동...(G) Ctrl-G
1 문서 활성화 Alt-1
Alt+1에 지정 Alt-Shift-1
다음 창(X) F6
다음 파일(N) Ctrl-F6
다음 파일(N) Ctrl-Tab
오른쪽 편집기(G) Alt-Page Down
왼쪽 편집기(E) Alt-Page Up
이전 창(V) Shift-F6
이전 파일(P) Ctrl-Shift-F6
이전 파일(P) Ctrl-Shift-Tab
파일 목록(F) Alt-0
편집기 메뉴 표시(S) Alt-Minus
코드 편집기 다음 단어 시작 부분까지 삭제 Ctrl-Delete
코드 편집기 다음 단어 시작 부분까지 삭제 Ctrl-T
코드 편집기 다음 단어 시작 부분으로 이동 Ctrl-Right
코드 편집기 뒤로 이동 Left
코드 편집기 로컬 탭 크기를 2로 설정 Ctrl-2
코드 편집기 로컬 탭 크기를 4로 설정 Ctrl-4
코드 편집기 로컬 탭 크기를 8로 설정 Ctrl-8
코드 편집기 매개변수 인사이트(P) Ctrl-Shift-Space
코드 편집기 삽입 모드 토글 Insert
코드 편집기 새 행 삽입 Shift-Enter
코드 편집기 새 행 삽입 Enter
코드 편집기 선택 사항 뒤로 이동 Ctrl-Shift-Left
코드 편집기 선택 사항 복제 Ctrl-Shift-D
코드 편집기 선택 사항 아래로 이동 Shift-Down
코드 편집기 선택 사항 앞으로 이동 Shift-Right
코드 편집기 선택 사항 위로 이동 Shift-Up
코드 편집기 선택 사항을 다음 단어 시작 부분으로 이동 Ctrl-Shift-Right
코드 편집기 선택 사항을 이전 단어 시작 부분으로 이동 Ctrl-Shift-Left
코드 편집기 선택 사항을 파일 끝으로 이동 Ctrl-Shift-End
코드 편집기 선택 사항을 파일 시작 부분으로 이동 Ctrl-Shift-Home
코드 편집기 선택 사항을 페이지 아래로 이동 Shift-Page Down
코드 편집기 선택 사항을 페이지 위로 이동 Shift-Page Up
코드 편집기 선택 사항을 행 끝으로 이동 Shift-End
코드 편집기 선택 사항을 행 시작 부분으로 이동 Shift-Home
코드 편집기 선택 해제 Ctrl-Back Slash
코드 편집기 선행 공백을 탭으로 변환 Ctrl-Shift-T
코드 편집기 선행 탭을 공백으로 변환 Ctrl-Shift-U
코드 편집기 스마트 완성 인사이트(A) Ctrl-Alt-Space
코드 편집기 아래로 이동 Down
코드 편집기 앞으로 이동 Right
코드 편집기 역방향 탭 Shift-Tab
코드 편집기 완성 인사이트(C) Ctrl-Space
코드 편집기 위로 이동 Up
코드 편집기 이전 단어 시작 부분까지 삭제 Ctrl-Backspace
코드 편집기 이전 단어 시작 부분으로 이동 Ctrl-Left
코드 편집기 이전 문자 삭제 Shift-Backspace
코드 편집기 이전 문자 삭제 Backspace
코드 편집기 일치하는 중괄호까지 선택 Alt-Shift-Close Bracket
코드 편집기 일치하는 중괄호까지 선택 Alt-Shift-Open Bracket
코드 편집기 일치하는 중괄호로 이동 Alt-Open Bracket
코드 편집기 일치하는 중괄호로 이동 Alt-Close Bracket
코드 편집기 취소 Escape
코드 편집기 탭 삽입 Tab
코드 편집기 파일 끝으로 이동 Ctrl-End
코드 편집기 파일 시작 부분으로 이동 Ctrl-Home
코드 편집기 페이지 아래로 이동 Page Down
코드 편집기 페이지 위로 이동 Page Up
코드 편집기 행 끝까지 삭제 Ctrl-Shift-Y
코드 편집기 행 끝으로 이동 End
코드 편집기 행 시작 부분으로 이동 Home
코드 편집기 행 아래로 스크롤 Ctrl-Down
코드 편집기 행 위로 스크롤 Ctrl-Up
코드 편집기 행 조인 Ctrl-J
코드 편집기 행 주석 토글(T) Ctrl-Slash
코드 편집기 행 주석 토글(T) Ctrl-Shift-Slash
파일 닫기 Ctrl-F4
파일 닫기 Ctrl-W
파일 모두 닫기(E) Ctrl-Shift-F4
파일 열기...(O) Ctrl-O
파일 인쇄...(P) Ctrl-P
파일 저장(S) Ctrl-S
파일 종료(X) Alt-F4
편집 실행 취소 Alt-Backspace
편집 실행 취소 Ctrl-Z
편집 재실행 Alt-Shift-Backspace
편집 재실행 Ctrl-Shift-Z
편집 재실행 Ctrl-Y
편집 경로 복사(H) Ctrl-Shift-C
편집 모두 선택(A) Ctrl-A
편집 복사(C) Ctrl-C
편집 복사(C) Ctrl-Insert
편집 붙여넣기(P) Shift-Insert
편집 붙여넣기(P) Ctrl-V
편집 삭제(D) Delete
편집 잘라내기(T) Shift-Delete
편집 잘라내기(T) Ctrl-X
편집 확장된 붙여넣기...(E) Ctrl-Shift-V