Article Category

분류 전체보기 (303)
영어 (9)
관심 (11)
프로젝트 (1)
내 폴더 (183)
Ver 1.0 (94)

 

'관심'에 해당되는 글 11건

  1. 2011.02.15 mysql 프로시저에서 limit에 변수 불가 버그
  2. 2009.10.21 TourDeFlex
  3. 2009.08.13 Flex 3 한글 공식 메뉴얼
  4. 2009.02.04 웹 리퍼러 수정하기
  5. 2008.08.08 플랙스 시작하기
  6. 2008.06.24 JSP에서의 include 2
  7. 2008.06.22 JAVA 환경설정
  8. 2007.09.08 PHP를 쉘 스크립트로 사용하기
  9. 2007.09.05 DOM 활용 1
  10. 2007.09.05 DOM 개념

mysql 프로시저에서 limit에 변수 불가 버그

"order by sort limit __count, 12"

mysql에서는 위와 같은 쿼리가 불가능하다.
이유는 숫자가 아닌 어떠한 것도 limit에 사용 할 수 없다는 것..
하지만 난 저게 필요한걸..

검색 끝에 다름과 같은 결과를 얻었다.


Noted in 5.5.6, 6.0.14 changelogs.

Within stored programs, LIMIT clauses now accept integer-valued
routine parameters or local variables as parameters.

숫자형 파라미터나 내부변수는 사용가능하다는 것..
하지만 5.5.6 버전 부터.. ㅠㅠ

아 난감하다..

TourDeFlex


플랙스 컴포넌트 사용법과 기본 예제들이 수록되어 있다.
http://www.adobe.com/devnet/flex/tourdeflex/

Air가 설치되어있지 않아도 위 링크로 들어가서 install now만 누르면 알아서 Air설치 후 프로그램도 설치된다.

Flex 3 한글 공식 메뉴얼

우리나라도 이제 좀 좋아 질려나 보다.
메뉴얼 작업이 제일 안되는 우리 나라인데. 한글 공식 메뉴얼이 나왔다.
Adobe사 에서 공식으로 배포하고 있으며 Air로 만들어져 Air 플레이어가 설치 되어 있어야 한다.


메뉴얼이 업데이트 되면 자동으로 업데이트도 해준다고 하니 참 잘 만들었다.
헌데 마우스 클릭 반응이나 드래드 등의 면에서는 좀 어눌하게 작동한다.

ps. 거기에 좀 읽어보니까 일본어로 번역된 내용을 번역기로 돌린거 같다는 느낌이 팍팍 드는 구문이 심심치 않게 보인다;;;

웹 리퍼러 수정하기

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

플랙스 시작하기

요즘 플렉스에 조금씩 관심을 가고 있다.
첫째로 플래시의 타임라인에 압박이 없고, UI가 상당히 깔끔하다.
visual studio 처럼 컴포넌트 드래그로 화면도 꾸밀 수 있다.
더구나 adobe라는 대형 벤더라는 빽도 있다.

그래서 서점에 갔더니 flex는 한권도 없고 silverlite만 2권 있었다.
두 권 모두 풀 컬러로 아주 기초적인 것만 적혀 있었다.

그래서 "Flex 3 Knowhow bible"라는 책을 하나 주문 했는데 이건;; 아, 정말 바이블이다.
좀 보고 살껄 후회 한다;; 거기 적혀 있는거 전부다 어도비 사이트에 적혀 있는 내용들인데, 그걸 한글로 옮겨 놓은 듯 하다.

그래서 MXML의 기본 문법을 찾아봤는데, 좋은게 있었다.
어도비 사이트에서 공식으로 제공하는 문서들이다.
그 중 하나를 받아서 20페이지 정도 읽어 봤는데, 상당히 자세하고 원론적으로 설명해 놨다. 다행이 영어가 어렵지 않게 써있어서 단어 사전 띄워놓고 보니까 머리에 쏙쏙 들어온다.
차라리 이걸 번역해서 팔지, 아우~

pdf파일로 1300페이지 정도 되는데 하루 100페이지씩 13일 정도 읽는걸 목표로 시작 해야 겠다. 영어공부도 할 겸 좋지 뭐.

아무튼 오늘 작성한 샘플 MXML 결과물을 올린다.

"안녕 세상아" {Hello Wold}

[압축 풀고 Test.html 클릭]

JSP에서의 include

JSP에서의 include

 

JSP에서 include 문을 사용할 때 PHP와는 조금 다르다는 것을 오늘 알았다.

결론을 먼저 말 하자면  main.jsp에서 header.jsp라는 파일을 인클루드 한다고 한다면, 기존에 PHP에서는 header.jsp파일을 수정 했다면 main.jsp파일에서는 특별히 해 줄 일이 없이 그대로 적용이 되었다. 하지만 jsp에서는 방식이 조금 다르더라. 이유는 jsp파일의 작동방식에 있었다. jsp파일은 서버상에서 jsp파일을 첫 번째로 지정해준 임의의 폴더에 서블릿 파일로 변환 하는 과정을 거친다. 첫 번째로 main_jsp.java라는 파일을 생성하고 곧 이어 main_jsp.class 라는 파일을 생성 한다. 실제로 main.jsp라는 파일을 웹상에서 실행 했을 경우에는 최종 결과물인 main_jsp.class라는 파일이 동작하는 것이다. 이런 방식 때문에 header.jsp파일 만 을 수정 했을 경우에는 main_jsp.class파일을 생성하지 않는다. 그렇기 때문에 header.jsp파일을 include 하고 있는 모든 파일들을 찾아서 touth라는 명령어로 건드려(?) 줘야 다시 컴파일을 하게 되는 것이다.

PHP에서야 알아서 찾아서 알아서 실행 해주기 때문에 편했는데, jsp는 약간 복잡한 것 같긴 하다.

처음에는 이해가 잘 안되서 자바 프로그래머님께 여러 번 물어 봤었다. 서블릿으로 변환한 main_jsp.java를 직접 보여주셔서 서블릿으로 변환한 내용들을 보고서야 실감 할 수 있었다.

그렇다면 header.class파일은 있는 걸까? 설명해 주신 내용으로는 header.jsp파일은 우선 불려지는 입장이기 때문에 컴파일이 되는지는 확실하지 않지만, 이미 main.jsp파일에 포함이 되어 있기 때문에 실질적인 header.jsp파일은 필요가 없다는 뜻이다. 단지 코딩상 관리의 편의를 위해 그렇게 나눠 놓는 것이라는 것이다. Main.jsp header.jsp파일을 include하면 header.jsp파일을 알아서 class로 만든 후에 그것을 가리키고 있다는 것이다. 그렇기 때문에 header.jsp를 변경해 봤자 main에서는 그것을 알아차릴 수 없기 때문에 수정을 해주거나 touch를 해주어야 header.jsp를 다시 .class로 만드는 것이다.

 

처음에는 이런 복잡한 과정을 통해서 jsp파일이 실행 된다는 것에 놀랐다. 물론 php도 자체적으로 파서에 의해서 해석되어 지고 다시 기계어로 변환되는 과정이 있지만, 사용하는 입장에서 체감 할 수 는 없었는데, jsp를 하면서 그것들이 직접적으로 체감 되는 것 같다.

 

어떻게 보면 header를 포함하는 모든 파일을 찾아서 touch해 주어야 하는 것이 참 수고 스러울 것 같다. 그래서 찾아보니 좋은 방법이 있었다.

유닉스 상에서 해당 폴더로 이동 후 자동으로 모든 jsp파일을 touch 해준단다

1.         find ./ -name '*.jsp' | xargs touch

 

또 찾아 보니 tomcat5 버전대 에서부터 include되는 파일을 수정 하더라도 서블릿 컨테이너가 알아서 모두 재 컴파일 해 준다는 좋은 소식이다.

JAVA 환경설정

JAVA 환경설정

 

자바에 관한 자세한 설명은 링크를 확인하기 바라며, 자바를 윈도우에서 사용하기 편하게 환경설정 하는 법을 설명한다.

 

우선 자바를 실행 하기 위해서 자바 JDK를 다운 받아야 한다. 그 안에는 자바를 실행하기 위한 jre를 포함, 자바를 컴파일 및 실행하기 위한  java 유틸리티가 포함되어 있다.

 

SUN홈페이지 에서 최신버전 JDK를 다운 받아 인스톨 한다.

그 후 윈도우 환경변수에 등록해주어야 하는데, 어느 프로그램 에서든 자바유틸리티의 경로를 따로 설정하지 않아도 실행 가능하게 하기 위함이다.

 

설정해 주어야 할 위치는 3곳으로 아래와 같다.

 

1.    JAVA_HOME : 자바 jdk 를 설치한 위치를 지정 예) C:\Program Files\Java\jdk1.5.0_09

2.     CLASSPATH :  .;%JAVA_HOME%\lib\tools.jar

3.     PATH : java 가 설치된 디렉토리 밑의 bin 디렉토리

) C:\Program Files\Java\jdk1.5.0_09\bin;

 

여기서 JAVA_HOME CLASSPATH는 자바에서 사용하는 환경 변수로써 JDK의 위치를 지정하고, 클래스를 모아 놓은 경로를 설정 한다.

Path는 어떤 실행 파일을 실행 할 경우 해당 위치에 파일이 없으면 2차적으로 path 경로에서 실행 파일을 찾는다.

예를 들면 path로 지정한 javac파일을 실행 했을 경우 javac파일은 컴파일을 위한 클래스 파일들을 CLASSPATH에서 찾는다. .(import 문이나 패키지 사용시) 클래스패스로 지정되어 있는 .;%JAVA_HOME%\lib\tools.jar 에서 . 는 현재 디렉토리를 의미 하며 이곳에 없을 경우, “;” 를 구분자로 %JAVA_HOME%\lib\tools.jar에서 찾는다. 여기서 %JAVA_HOME%의 경로를 위에서 설정해 주었기 때문에 실제로 찾는 경로는 C:\Program Files\Java\jdk1.5.0_09\lib\tools.jar”가 되는 것 이다.

 

위와 같이 모두 설정한 후 확인 작업을 하기 위하여 커멘드창을 하나 띄워(시작->실행->cmd->엔터) echo %JAVA_HOME% 을 입력 한 후 엔터를 치면 위에서 입력한 값이 출력이 된다. classpath path도 동일한 결과값이 나와야 한다.

 

이제 어느 디렉토리에서든 java, javac 등의 자바를 사용하기 위한 명령어들을 사용 할 수 있다.



PHP를 쉘 스크립트로 사용하기

오늘날 동적 웹 페이지를 개발하는 최고의 언어가 PHP라는 것은 누구나 다 아는 사실입니다. 하지만 PHP가 쉘 스크립트 언어로도 사용할 수 있다는 것은 모르는 사람이 많은 것 같습니다. 쉘 스크립트 언어로써의 PHP는 Bash나 Perl만큼 튼튼하지는 않지만 많은 이접이 있습니다.
PHP를 쉘 언어로 사용하기 위해 요구되는 것은 PHP를 아파치 모듈 대신 CGI 바이너리로 설치해야 합니다. 보안 문제가 걸려 있기 때문에 PHP메뉴얼의 참고하기 바랍니다.
일반적인 PHP 웹 페이지와 PHP 쉘 스크립트 사이의 단 한가지 차이점은 PHP스크립트의 제일 첫 번째 줄에 다음과 같이 쉘 호출을 해주어야 하는 점입니다.

#!/usr/local/bin/php -q

-q 옵션은 HTTP헤더를 사용하지 않겠다는 뜻입니다. 또한 PHP태그를 사용해서 스크립트의 시작과 끝을 지정해 주어야 합니다.

<?php ?>

이제 모든이가 알고 사랑하는 표준 예를 들어봅시다.

#!/usr/local/bin/php -q
<?php

print("Hello, world!n");

?>

이 코드는 예상하다 시피 화면에 "Hello, world!"를 출력하게 됩니다.

-쉘 스크립트에 매개변수 전달하기(Passing arguments to the shell script)

일반적으로 쉘 스크립트에는 매개변수를 전달 할 수 있어야합니다. 매개변수를 전달하는 것은 다음과 $argv 배열을 통해서 이루어 집니다.

#!/usr/local/bin/php -q
<?php
$first_name = $argv[1];
$last_name = $argv[2];

print("Hello, $first_name $last_name! How are you today?n");

?>

즉 이 예제에서는 스크립트로 전달된 두 매개변수를 출력합니다. 이 스크립트는 다음과 같이 사용될 수 있고

[dbrogdon@artemis dbrogdon]$ scriptname.ph Darrell Brogdon

다음과 같을 출력을 내게 될 것입니다.

Hello, Darrell Brogdon! How are you today?
[dbrogdon@artemis dbrogdon]$

쉘 스크립트와 웹 페이지에서 $argv 배열의 차이점은 쉘 스크립트의 $argv[0]은 실행된 스크립트 명이 들어 간다는 점입니다. 웹 페이지에서는 첫 번째 값($argv[0])은 query 문자열입니다.

-스크립트를 인터액티브하게 만들기(Making a script more interactive)

그러데 어떻게 해야 사용자의 입력을 받아들일 수 있을까요? 어떻게 인터액티브한 스크립트를 생성할 수 있을까요? PHP는 웹상에서 명령을 읽어오는 함수는 기본적으로 지원하지 않습니다. 하지만 다음과 같은 PHP 함수를 사용해서 에뮬레이트할 수 있습니다.

주 : 이 함수는 Unix상에서만 동작합니다.

<?php

function read() {
$fp=fopen("/dev/stdin", "r");
$input=fgets($fp, 255);
fclose($fp);

return $input;
}

?>

이 함수는 표준 입력(Linux에서 /dev/stdin)을 의미하는 파일 포인터를 오픈하고 n이나 EOF를 만나거나 255문자까지 읽어 옵니다. 주로 n가지 일어오게 될 것입니다. 그런 다음 파일 포인터를 닫고 데이터를 리턴합니다.

이제 앞서든 예제 스크립트를 수정해서 read()함수를 사용해서 사용자 입력을 기다리게 해봅시다

#!/usr/local/bin/php -q
<?php

function read() {
$fp=fopen("/dev/stdin", "r");
$input=fgets($fp, 255);
fclose($fp);

return $input;
}

print("What is your first name? ");
$first_name = read();

print("What is your last name? ");
$last_name = read();

print("nHello, $first_name $last_name! Nice to meet you!n");

?>

그러나 이 스크립트를 실행하게 되면 마지막 라인에서 한줄로 출력되는 대신에 세줄로 출력되게 됩니다. 이는 read()함수가 n문자까지 취했기 때문입니다. 이는 read()함수가 데이터를 리턴할 때 n을 제거해서 데이터를 리턴하게 하면 해결됩니다.

<?php

function read() {
$fp=fopen("/dev/stdin", "r");
$input=fgets($fp, 255);
fclose($fp);

return str_replace("n", "", $input);
}

?>

- PHP 쉘 스크립트를 일반 쉘 스크립트에 포함시키기

때때로 PHP쉘 스크립트를 Bash나 다른 쉘 스크립트에 삽입하는 것이 편할 때도 있습니다. 이는 간단한 트릭으로 가능합니다.
PHP코드를 포함시키는 방법 :

#!/bin/bash
echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF
<?php
print("This is the PHP section of the coden");
?>
EOF

간단하지 않습니까? 변수를 추가하기 전까지는 간단합니다. 다음의 코드 부분을 실행해 볼까요?

#!/bin/bash
echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF
<?php
$myVar = "PHP";
print("This is the $myVar section of the code.n");
?>
EOF

아마 다음과 같은 에러를 발생하게 될 것입니다.

<b>Parse error</b>: parse error in <b>-</b> on line <b>2</b><br>

이를 해결하기 위해서 PHP코드의 $앞에 를 붙여 줍니다.

#!/bin/bash
echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF
<?php

$myVar = "PHP";
print("This is the $myVar section of the code.n");
?>
EOF

이제 PHP를 사용해서 자신의 쉘 스크립트를 만들어 보세요~

--Darrell
--번역 : 허련호



kjh90@orgio.net
1]
# php -q your_script.php
이런 식으로 사용하는 대신
# ./your_script.php
라고 실행하려면
스크립트 맨 첫줄에는
#!/usr/local/bin/php -q
라고 쓰고, 그 아래에 <? 로 시작해서 ?>로 끝나는 PHP 구문을 씁니다.

[2]
콘솔 상에서 입력을 받는 경우에는
fopen("php://stdin", "r");
을 사용합니다.

예제:
#!/usr/local/bin/php -q
<?php
function getInput($length = 255) {
$fr = fopen("php://stdin", "r");
$input = fgets($fr, $length);
$input = rtrim($input);
fclose($fr);
return $input;
}
echo '글자를 입력하세요 (10자 이내): ';
$text = getInput(10);
echo '입력하신 내용은 '.$text."입니다.\n";
?>

[3]
물론 PHP 스크립트에는 실행권한이 주어져야겠죠.

원문보기 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=1899&sca=&sfl=wr_subject&stx=%BD%A9&sop=and&page=2


그밖에 문서(en)

DOM 활용

1.XMLHttpRequest객체 생성
 
 
var xmlHttp;
 
function createXMLHttpRequest() {     if (window.ActiveXObject) {         xmlHttp = new ActiveXObject("Microsoft.XML HTTP"); //IE     }     else if (window.XMLHttpRequest) {         xmlHttp = new XMLHttpRequest();//Mozila     } }
 
2.메소드
void open(string method, string url, boolean asynch, string username, string password )
   method - GET,POST,PUT
   url - 요청 서버 URL
   asynch - 비동기/동기 선택 (default true - 비동기)
 
void send(content) : 실질적으로 요청을 서버로 보낸다. 요청이 비동기이면 이 메소드는 바로 리턴되지만 요청이 동기이면 서버에서 응답을 받을때까지 계속 대기한다. content 는 선택사항이며, DOM 객체(XML 객체)이거나 input stream, string 값으로 설정할 수 있으며 HttpRequest body 의 한 부분으로 서버로 전달된다. content 에 값을 넘 기려면 open() 메소드는 반드시 POST 로 설정해야 하며, GET 방식으로 요청하려면 null 을 설정하면 된다.
 
void setRequestHeader(string header, string value) : header 에 해당하는 value 값으로 HttpRequest  헤더에 값을 설정하는 메소드로써, 반드시 open() 메소 드 다음에 위치해야 한다.
 
void abort() : 요청중지
 
string getAllResponseHeaders() : 요청에 대응되는 응답의 헤더정보를 리턴한다. 즉, C ontent-Length, Date, URI 등을 포함하는 헤더정보를 string 형식으로 반환한다.
 
string getResponseHeader(string header) : 응답의 헤더정보중에서 header 에 대 응되는 값을 string 형식으로 반환한다.
 
 
3.속성
onreadystatechange : 자바스크립트 콜백함수(funtion pointer)를 저장한다. 콜백함수는 readyState 값이 변할때 마다 호출된다. 요청이 서버로 보 내지면 readyState 는 5가지 숫자값으로 계속 변화가 일어나게 된다.
readyState : 요청의 상태를 의미한다.(0 = uninitialized, 1 = loading, 2 = loaded, 3 = interactive, 4 = complete)
responseText : 서버의 응답을 string 형식으로 나타낸다. 단순 text를 innerHTML 속성 으로 표현하기에는 알맞지만 논리적으로 파싱하거나 동적으로 페이지 컨텐츠를 생 성하기는 힘들다.
responseXML : 서버의 응답을 XML 로 나타낸다. 이 속성은 DOM 객체로 파싱할 수 있다.
status : 서버로부터의 HTTP 상태코드이다.(예 200(OK), 404(NOT Found), 202(결과 값 이 없을 때)등등
)
statusText : HTTP 상태코드에 대한 텍스트 값이다.(예 OK, NOT Found 등등)
 
 
4. 예제
function startRequest() {     createXMLHttpRequest();     xmlHttp.onreadystatechange = handleStateChange;//function     xmlHttp.open("GET", "simpleResponse.xml", true);     xmlHttp.send(null); }     function handleStateChange() {     if(xmlHttp.readyState == 4) {         if(xmlHttp.status == 200) {
            // complete, OK             alert("The se rver replied with: " + xmlHttp.responseText);         }     } }
 
5.DOM 속성
 
 
childNodes : 현재 요소의 자식을 배열로 표현한다.
firstChild : 현재 요소의 첫번째 자식이다.
lastChild : 현재 요소의 마지막 자식이다.
nextSibling : 현재 요소와 바로 다음의 요소를 의미한다.
nodeValue : 해당 요소의 값을 읽고 쓸 수 있는 속성을 정의한다.(=data)
parentNode : 해당 요소의 부모노드이다.
previousSibling : 현재 요소와 바로 이전의 요소를 의미한다.
 
 
6.DOM 메소드
 
getElementById(id) : 다큐먼트에서 특정한 id 속성값을 가지고 있는 요소를 반 환한다
.
getElementsByTagName(name) : 특정한 태그 이름을 가지고 있는 자식 요소로 구성된 배열을 리턴한다
.
hasChildNodes() : 해당 요소가 자식 요소를 포함하고 있는지를 나타내는 Boolean 값 을 리턴한다
.
getAttribute(name) : 특정한 name 에 해당하는 요소의 속성값을 리턴한다.
 
document.createElement(tagName) : tagName 으로된 엘리먼트를 생성한다. div 를 메 소드 파라미터로 입력하면 div 엘리먼트가 생성된다.
document.createTextNode(text) : 정적 텍스트를 담고 있는 노드를 생성한다.
<element>.appendChild(childNode) : 특정 노드를 현재 엘리먼트의 자식 노드 에 추가시킨다. (예를들어 select 엘리먼트에 option 엘리먼트 추가)
<element>.getAttribute(name) : 속성명이 name 인 속성값을 반환한다.
<element>.setAttribute(name, value) : 속성값 value 를 속성명이 name 인 곳에 저장한다
.
<element>.insertBefore(newNode, tartgetNode) : newNode 를  tartgetN ode 전에 삽입한다
.
<element>.removeAttribute(name) : 엘리먼트에서 name 속성을 제거한다.
<element>.removeChild(childNode) : 자식 엘리먼트를 제거한다.
<element>.replaceChild(newNode, oldNode) : oldNode 를 newNode 로 치환한 다
.
<element>.hasChildNodes() : 자식 노드가 존재하는지 여부를 판단한다. 리 턴형식은 Boolean 이다

DOM 개념

DOM은 문서 객체 모형이라고 말하며, HTML의 구조에 접근하는 방법

Document.layers 층에 접근하기 위해 document.all 또는document.getElementById 사용

 

W3C의 표준 – document.getElementById

 

 

 

계층적 구조(Tree 구조)

 

<HTML> - 문서의 TOP(document 문서 하위)

<HEAD> - <HTML>의 꼬리표

, HTML 문서의 최정상은 document 가 된다.

 

 

DOM을 이해하기 위한 도형

 

(부모)

|

|

형제1---- ----형제2

|

|

아이1------------ 아이2

 

 

1. parentNode : 나를 기준으로 부모 마디에 접근.

   - document.getElementById("myElement").parentNode

 

2. childNode : 나를 기준으로 NodeList를 반환

- document.getElementById("나").childNodes

- document.getElementById("나").childNodes.item(0)

- document.getElementById("나").childNodeds[0] 와 동일

 

3. firstChild : 첫번째 마디에 대한 접근

- document.getElementById("나").firstChild

- document.getElementById("나").childNodeds[0] 와 동일

 

4. lastChild : 마지막 마디에 대한 접근

- document.getElementById("나").lastChild

- document.getElementById("나").childNodes.item(document.getElementById("나").childNo des.length)과 동일

 

5. previousSibling : 아이1로 접근

- document.getElementById("나").previousSibling

 

6. nextSibling은 아이2에 접근

   - document.getElementById("나").nextSibling

prev 1 2 next