2014년 12월 25일 목요일

div 정중앙 배치

// DIV 정중앙 배치

.center{
    width: 200px;
    height: 200px;
    background-color: black;
 
    position:absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
 
    margin: auto;
}

2014년 12월 10일 수요일

HttpURLConnection

- URL 내용을 읽어오거나, URL 주소에 GET / POST로 데이터를 전달 할 때 사용함
- 웹 페이지나 서블릿에 데이터를 전달 수  있음
- URL --> openConnection() --> URLConnection  --> getInputStream --> InputStream (내용읽음)
- URL 의 OpenStream() : URL의 입력 스트림만 개설 (차이점)
- URLConnection : URL의 입력, 출력 스트림 개설

Construct 
protected URLConnection(URL) : 직접 생성 불가능 , OpenConnection으로 연결함
    
Method
addRequestProperty(String a, String b) : 키(a) 와 값(b)을 가지고 요청할 수 있는 
                               Properity 값을 미리 설정해 놓음. 특정 키값을 가지고 읽을 수 있도록 함
connect() : 연결 된 곳에 접속 할때 (connect() 호출해야 실제 통신 가능함)
getAllowUserInteraction() : 연결 된 곳에 사용자가 서버와 통신 할 수 있는 환경 확인(boolean)
                               in/output이 해당 서버 , 연결 포트로 가능한지 확인함
getContent() : content 값을 리턴 받음 (inputStream 값을 리턴 함)
getContent(Class[]) : 위 내용을 class[] 배열 값을 입력함
getContentEncoding() : 인코딩 타입을 String으로 리턴함
getContentLength() : content 길이 (-1 이면 정상적으로 값이 넘어오지 않았음)
getContentType() : content 가 http로 되어 있는지 타입 (ex: http-type )
getDate() : content의 날짜 (new Date(~~) 으로 변환해 줘야 함 / Long 리턴)
getDefaultAllowUserInteraction(): 기본적으로 User와 통신 가능한 상태인지 (boolean)
getDefaultUserCaches() : cache를 사용할 것 인지 (boolean)
getDoInput() : Server에서 온 데이터를 입력 받을 수 있는 상태인지 (본인 상태-default : true)
getDoOutput() : Server에서 온 데이터를 출력 할수 있는 상태인지
                          (Client 상태 -default : false)
getExpiration() : 유효 기간
getFileNameMap() : File Name Map
getHeaderField(int) : Head Field 값 받아옴 (http Head 값)
getHeaderFiled(String) :
getLastModified() : 마지막 수정 시간 

getInputStream() : InputStrema 값을 뽑아냄
getOutputStream() : OutputStream 값을 뽑아냄

setDoInput(boolean) : Server 통신에서 입력 가능한 상태로 만듬 
setDoOutput(boolean) : Server 통신에서 출력 가능한 상태로 만듬
 - Server와 통신을 하고자 할때는 반드시 위 두 method를 true로 해 놔야 함

----------------------------------------------------------------------------------------------------------------------------------

URL url = new URL("주소");
HttpURLConnection con = (HttpURLConnection)url.openConnection();

// 서버로부터 메세지를 받을 수 있도록 한다. 기본값은 true이다.
con.setDoInput(true); 

// 헤더값을 설정한다.
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// 전달 방식을 설정한다. POST or GET, 기본값은 GET 이다.
con.setRequestMethod(method);

// 서버로 데이터를 전송할 수 있도록 한다. GET방식이면 사용될 일이 없으나, true로 설정하면 자동으로 POST로 설정된다. 기본값은 false이다.
con.setDoOutput(true);

// POST방식이면 서버에 별도의 파라메터값을 넘겨주어야 한다.
String paramstr = buildParameters(params);
OutputStream out = con.getOutputStream();
out.write( paramstr.getBytes("UTF-8") );
out.flush();
out.close();

// con.getResponseCode();

// 결과값을 가져온다.
InputStream in = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
try
{
    in = con.getInputStream();
    while(true)
    {
        int readlen = in.read(buf);
        if( readlen < 1 )
            break;
        bos.write(buf, 0, readlen);
    }
    String output = new String(bos.toByteArray(), "UTF-8");
    System.out.println(output);
}catch (Exception e){
    e.printStackTrace();
}finally{
    if(bos != null) try{bos.close();}catch(IOException aa){}
    if(in != null) try{bos.close();}catch(IOException aa){}
}

호출후에는 응답을 꼭 받아야한다.
con.getResponseCode();
그렇지 않으면 연결자체를 하지 않는다.

in = con.getInputStream();
in.close();
이렇게 InputStream을 가져와도 호출이 가능하다.

즉, 요청후에는 getResponseCode()를 호출하거나 InputStream()을 얻어야 정상적으로 연결이 이루어진다.

아래는 POST로 파라메터값을 보낼때 유용한 메소드입니다.
rath님의 me2day라이브러리를 참조했습니다.

private String buildParameters( Map params )  throws IOException
{
    StringBuilder sb = new StringBuilder();
    for(Iterator i= params.keySet().iterator(); i.hasNext(); )
    {
        String key = (String)i.next();
        sb.append( key );
        sb.append( "=" );
        sb.append( URLEncoder.encode((String)params.get(key), "UTF-8") );
        if( i.hasNext() )
        sb.append( "&" );
    }
    return sb.toString();
}

2014년 12월 1일 월요일

javascript 날짜차이구하기

Date 개체
Date개체는 날짜를 표현하는 개체로 1970년 1월 1일을 기준으로 Milliseconds 값으로 날짜를 표현합니다. 즉 Milliseconds값을 지정하여 Date개체를 생성할 수 도 있고, 또 두 Date를 빼면 Milliseconds 값으로 반환합니다.

자세히 말해서 Date개체는 1970년 1월 1일 전후로 285,616년(±100,000,000 Milliseconds)까지 표현합니다.

날짜의 차이 구하기
Date개체의 특성을 바탕으로 날짜의 차이는 아래와 같이 직접 계산을 통해 쉽게 구하실 수 있습니다.

var firstDate = new Date(2010, 10, 1);

var secodDate = new Date(2010, 12, 31);



var diffMilSec = firstDate - secodDate;

var diffSec = diffMilSec / 1000;

var diffMin = diffSec / 60;

var diffHour = diffMin / 60;

var diffDay = diffHour / 24;
function getDiffDays(first, second)

{
   return (second-first)/(1000*60*60*24)
}

javascript 형변환

eval()                          수식 또는 문자열(계산)  →   실수                              
Number()                    문자                            →   숫자                              
String()                       숫자                            →   문자                              
escape()                      한글                           →  16진수                            
unescape()                  16진수                        →   한글                              
parseInt(문자열, 진수)   문자열                         →   정수(원하는 진수 변환 가능)       
parseFloat()                 문자열                        →   부동소수점, 변환불가일때 NaN 반환 
isFinite()                     유한수 TRUE,   무한수  FALSE                             
isNan()                       문자    TRUE,   숫자     FALSE

2014년 11월 30일 일요일

계정 관리


계정 잠금 해제
ALTER USER "계정명" ACCOUNT UNLOCK;

계정 비밀번호 만료
ALTER USER "계정명" PASSWORD EXPIRE;

계정 비밀번호 만료해제 or 변경
ALTER USER "계정명" IDENTIFIED BY "비밀번호";

//////////////////////////////////////////////////////

oracle: the password has expired.
-오라클 계정의 비밀번호 만료일이 지남.

# su - oracle
-오라클 계정으로 접속

# export ORACLE_SID=JSITEUC
-SID를 JSITEUC로 변경.

# sqlplus /nolog
-로그인 없이 SQL실행
SQL> connect sys as sysdba
-dba 접속
# sqlplus '/as sysdba'
-로그인 없이 SQL실행

SQL> select * from dba_profiles where profile = 'DEFAULT';
-password_life_time의 값 확인. 180일것임. unlimited로 바꿔야 함.

SQL> alter profile default limit password_life_time unlimited;
-'DEFAULT' profile에서 비밀번호 만료일을 unlimited로 변경.

SQL> alter user 계정명 account unlock;
-계정 락 해제.

SQL> alter user 계정명 identified by 새비밀번호;
-만료된 비밀번호 다른 비밀번호로 변경.



2014년 11월 28일 금요일

표준단위표시

1] 국제표준 단위계
- 우리가 현재 사용하는 단위계는 SI 단위계라고 함
- 1960년 제11차 국제도량형총회에서 국제단위계란 명칭과 그 약칭으로 SI를 채택했습니다.
국제 단위계에는 7개의 기본 단위와 유도 단위로 이루어져 있으며 유도단위는 기본단위를 
   기본으로 만들어진 단위계입니다



2] 유도 단위계
- 기본단위계는 7개로 길이(m), 질량(kg), 시간(s), 전류(A), 열역학적온도(K), 몰질량(mol), 광도(cd)
- 유도 단위로는 예를 들어 면적의 단위는 기본단위인 길이의 제곱이므로 m2로 표시합니다. 
   따라서 유도단위는 무한정 만들 수 있습니다.


3] SI접두어

4] 단위계의 올바른 표현방식
- 기본 단위중 알파벳 대소문자를 혼동하는 경우가 많은데 예를 들어 길이의 단위는 반드시 소문자로
   써야 합니다.
   * 즉 m. 여기서 밀리미터(mm)인 경우 접두사 밀리(m)와 길이의 단위인 미터(m)를 헷갈리는 경우가 
      많고 간혹 미터를 대문자 M 으로 쓴 경우가 있는데 다 틀린 표현입니다.
- 일의 단위인 와트는 대문자 W로 써야 합니다. 
   * 해당 단위의 기원이 고유명사에서 기원했으면 고유명사는 첫글짜가 대문자이므로 반드시 대문자로
     써야 합니다
- 주파수 단위인 헤르츠(Hz)를 Hz, GHz 등으로 써야 합니다
- 전기 사용량은  100 kW로 써야 합니다
- 라디오  FM의 주파수는 107.7 MHz처럼 써야 합니다
SI 단위계에서 압력 단위인 파스칼도 Pa 로 써야 합니다(물리학자 파스칼의 이름에서 따와서 
   그렇고 전압과 전류의 단위인 V와 A도 모두 사람이름에서 가져온 것이므로 반드시 대문자로
    표기해야 합니다).
질량이나 길이의 단위는 고유명사에서 따온 것이 아니므로 반드시 소문자인 g 이나 m 로 써야 한다
- 시간의 단위인 초도 s 로 써야 합니다. 
   (흔히 초를 sec 라고 쓰는 경우도 있는데 SI 단위계에서는 틀린 표기법입니다)
- 무게를 표시할 때 반드시 kg이라고 소문자로 써야 하며, 속도도 100 km처럼 소문자로 써야 합니다
예외가 있는데 바로 부피를 말할 때 사용하는 리터(l)입니다. 
   (리터는 사람 이름에서 따온 단위가 아니므로 소문자 l을 사용해야 하지만 소문자 l이 숫자 1과 
    헷갈리므로 대문자 L로 써도 됩니다)
- 컴퓨터 용어는 HDD코 용량도 500 GB, 인터넷 속도는 100 Mbit/s가 맞는 표현입니다
마지막으로 숫자와 단위는 반드시 한칸을 띄어 쓰도록 하고 있습니다 
   (예외로는 평면각의 도분초와 숫자는 붙여 씁니다.)

축척계산

// 축척계산
 var theta;
 var pi;
 var startLon;
 var startLat;
 var endLon;
 var endLat;
 var res;
 var resPixel;
 var resCM;

 startLon = exLeft.lon; // 화면왼쪽하단 경도
 startLat = exLeft.lat; // 화면왼쪽하단 위도
 endLon = exRight.lon; // 화면오른쪽하단 경도
 endLat = exRight.lat; // 화면오른쪽하단 위도

 pi = 3.141592;
 theta =  startLon - endLon;
 res = Math.sin(startLat * pi / 180) * Math.sin(endLat * pi / 180)
          + Math.cos(startLat * pi / 180) * Math.cos(endLat * pi / 180) * Math.cos(theta * pi / 180);
 res = Math.acos(res); // 아크코사인 결과
 res = res* 180 / pi * 60 * 1.1515 * 1609.344;
 resPixel = res/maxWidth; // 1펙셀당 거리계산
 resCM = Math.round(resPixel*37.79); // 1cm = 37.79px