반응형
java로 데몬 형태의 프로그램을 작성할 경우가 있다.
이때 기동이야 java 커맨드로 실행을 하지만,
중지시키기 위해서는 Ctrl+C 를 하거나 백그라운드 실행시 Kill 을 시켜야 하거나 한다.
좀 더 있어보이기 위해 여타 다른 데몬처럼 start, stop 커맨드를 사용하도록 만들어 본다.

핵심은 shutdown 을 처리를 ServerSocket 을 열고 해당 포트에 대한 Socket 통신으로 이루어진다는 점이다. 만들고자 하는 데몬이 통신서버라면 기존 통신 포트 외에 컨트롤 포트를 하나 더 사용하는 것이다.

Tomcat 의 경우 server.xml 의 맨 처음에 나오는 것은 다음과 같다.
<Server port="8005" shutdown="SHUTDOWN" debug="0">
여기서 port 가 바로 shutdown 처리를 위한 포트이고, 이 포트에 shutdown 으로 설정된 SHUTDOWN을 소켓으로 보내면 Tomcat 이 중지된다.

아래는 톰캣과 유사한 형태로 작성한 소스이다.
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.AccessControlException;
import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;


public class Server {
 private static final String COMMAND_SHUTDOWN = "shutdown";
 private static final int COMMAND_PORT = 8099;
 
 private boolean started;
 private Random random;
 private Timer timer;
 
 private Server() {
  this.started = false;
  this.random = null;
  this.timer = null;
 }
 
 private void start() {
  // 여기서 서버가 수행하는 쓰레드를 start시킨다(반드시 쓰레드이어야 한다).
 
  // 에로서 Timer를 사용하여 1초마다 메시지 출력...
  this.timer = new Timer();
 
  timer.scheduleAtFixedRate(
    new TimerTask() {
     public void run() {
      if ( started )
       System.out.println("1초마다 메시지");
     }
    }
    ,new Date(),1000 );
 
  await();
 }
 
 private void stop() {
  // 서버가 수행하던 쓰레드를 중지시킨다.
  // 예로써 Timer 중지...
  this.timer.cancel();
  this.timer = null;
 
  System.out.println("중지되었습니다.");
 }
 
 /**
  * 서버소켓을 열고 shutdown 요청이 있을때까지 대기...
  */
 protected void await() {
  try {
   ServerSocket serverSocket = null;
   try {
    serverSocket = new ServerSocket(COMMAND_PORT, 1, InetAddress.getByName("127.0.0.1"));
    started = true;
   } catch (IOException e) {
    e.printStackTrace();
   }
   while ( started ) {
    Socket socket = null;
    InputStream stream = null;
    try {
     socket = serverSocket.accept();
     socket.setSoTimeout(10*1000 );  // 타임아웃 10초...
     stream = socket.getInputStream();
    } catch (AccessControlException e) {
     continue;
    } catch (IOException e) {
     System.exit(1);
    }
   
    StringBuffer command = new StringBuffer();

    // Cut off to avoid DoS attack
    int expected = 1024;
    while ( expected < COMMAND_SHUTDOWN.length() ) {
     if ( random == null )
      random = new Random(System.currentTimeMillis());
    
     expected += (random.nextInt() % 1024);
    }
   
    while ( expected > 0 ) {
     int ch = -1;
     try {
      ch = stream.read();
     } catch (IOException e) {
      ch = -1;
     }
     // EOF
     if (ch < 32) break;
    
     command.append((char)ch);
     expected--;
    }

    // 소켓을 닫는다.
    try { socket.close(); } catch (IOException ignore) {}
   
    String cmd = command.toString();

    // shutdown 명령시 루프 중지
    if ( COMMAND_SHUTDOWN.equals(cmd) ) {
     break;
    }
   }
   // 서버 소켓을 닫는다.
   try { serverSocket.close(); } catch (IOException ignore) {}
  } catch(Throwable t) {
   t.printStackTrace();
  } finally {
   // 서버 종료 처리...
   try { stop(); } catch (Throwable ignore) {}
  }
 }
 
 /**
  * 소켓으로 shutdown 커맨드를 보낸다.
  */
 private static void shutdown() {
  Socket socket = null;
  OutputStream os = null;
  try {
   socket = new Socket("127.0.0.1", COMMAND_PORT);
   os = socket.getOutputStream();
   for (int i = 0; i < COMMAND_SHUTDOWN.length(); i++) {
    os.write(COMMAND_SHUTDOWN.charAt(i));
   }
   os.flush();
  } catch(Throwable t) {
   t.printStackTrace();
   System.exit(1);
  } finally {
   try { os.close(); } catch(Throwable t) {}
   try { socket.close(); } catch(Throwable t) {}
  }
 }
 
 
 public static void main(String[] args) {
  try {
   if ( COMMAND_SHUTDOWN.equals(args[0]) ) {
    shutdown();
   } else {
    Server server = new Server();
    server.start();
   }
  } catch (Throwable t) {
   t.printStackTrace();
  }
 }
 
}

실행/종료 : java Server start / java Server shutdown


반응형

'개발도 하냐?' 카테고리의 다른 글

XP 개발방법론  (0) 2009.12.06
JAVA Application 한글깨짐 해결  (0) 2009.12.03
웹접근성을 보장하는 웹개발을 위한 고려사항  (0) 2009.12.02
Cross Domain Script 해결법  (0) 2009.12.01
HTML vs XHTML?  (0) 2009.12.01
반응형
오랜만에 웹표준이란 태그로 북마크해둔것을 들어가서 정리했습니다.
웹사이트를 개발하기전에 한번씩 읽어본 후 해보시기 바랍니다.


0. DTD, Charset 공통 정의

1. 의미있는 구조적인 HTML 구성
 -html 작성을 위한 가이드라인 : http://html.nhndesign.com/html_guideline
 -자주발생되는 오류에 대한 가이드 : http://html.nhndesign.com/html_validation_guideline

2. Global, Layout CSS 제작
-CSS제작을 위한 가이드라인 : http://html.nhndesign.com/css_guideline

3. 접근성있는 Navigation 제작(키보드접근확인)

4. Section CSS 제작

5. 브라우저 호환성 테스트

6. 접근성 준수지침 검토

7.웹표준코딩의 장점 예
- TABLE VS DIV : http://www.thlife.net/34

8. table 에 th를 사용한 예제 : http://kukie.net/resources/design/using_th/using_th_table.html

9. css를 이용한 레이아웃의 사용 예 : http://naradesign.net/open_content/reference/layout/

10. 웹표준 준수를 통한 이익 : http://kukie.net/resources/benefits/index.htm

11. 드림위버에서 제목표기 단축키 : 제목표기하기 (단축키 ctrl+1 ~ ctrl+6)
 - 아래의 CSS를 만들어서 테스트해보자 (ctrl+3)
 - h3 {padding:8px 0 5px 35px; background:#EEE url(h3_ bullet.gif) no-repeat 5px center; border-bottom:1px solid #CCC }

 12. 드림위버를 이용한 접근성 높은 테이블 제작 : http://naradesign.net/wp/2006/09/14/63/

 13. 드림위버를 이용한 ‘Markup+CSS’ 브라우저 호환성 검사 : http://naradesign.net/wp/2006/09/28/75/

 14. 특수문자 및 HTML Spacial Entities. : http://naradesign.net/wp/2006/10/30/86/

 15. 웹접근성을 준수하는 사이트 제작 템플릿의 예 : http://db.garada.co.cc/html/form.htm
반응형
반응형

익스플로러 5.5(?) 이후 부터는 스크립트로 server1.abc.com 과 live.abc.com 간의 상호 도메인이 다른 프레임이나 윈도우의 document에 관련된 작업을 시도하면 보안에러가 발생한다.

Cross-Frame Scripting 에 대한 MS의 말..
http://msdn2.microsoft.com/en-us/library/ms533028.aspx

넷스케이프 같은 경우에는 스크립트(Signed scripts)에서 브라우져자체에 포함(?)된 클래스(netscape.security.PrivilegeManager)를 호출하여 이를 해결할 수 있다고 한다.

Signed Scripts 에 대한 Mozilla의 말..
http://www.mozilla.org/projects/security/components/signed-scripts.html

그럼에도 불구하고 다른 도메인에 대한 opener 나 parent 접근이 필요할 경우에는 JavaScript 를 통해 document.domain 을 설정해 주면된다.
<script language="javascript">
    document.domain = "공통도메인명";
</script>
상호 연결 시켜야 하는 웹 페이지에 자신들의 공통된 도메인을 지정해 주면 컨트롤이 가능해진다.

만약, server1.abc.com의 open.htm이 window.open 으로 live.abc.com을 호출하고 live.abe.com 의 child.htm이 opener 로 server1.abc.com 을 접근해야 한다면
다음 스크립트를 두 페이지에 정의해 주면 되고, 스크립트는 페이지 어디에 위치해 있든지 특별한 상관은 없다.

<script language="javascript">
    document.domain = "abc.com";
</script>

※ 주의, 도메인 명을 잘못 입력한 경우에는 "잘못된 인수입니다." 라는 JavaScript 오류가 발생한다.

=========================================================================================
cross frame scripting 을 해결하는 다른 방법으로는 HTA가 있다.
html페이지가 아닌 hta(html application)페이지를 만들어야 한다.

http://msdn.microsoft.com/workshop/author/hta/hta_node_entry.asp

※ 다음은 HTA에서 javascript로 iframe의 document를 참조한 예

확장자를 hta로 저장하시고 브라우저로 실행.

<html>
<head>
  <title>hta cross scripting</title>
  <script>
    function window.onload() {
       alert(myframe.document);
    }
  </script>
</head>
<body scroll="no">
  <iframe id=myframe src="http://kin.naver.com/"></iframe>
</body>
</html>

다음에, 예를 하나 들면..
kin.naver.com을 iframe에 넣고 검색어에 "스크립트"라는 단어를 넣은 후 검색버튼을 누르게 한 HTA소스이다.

<html>
<head>
  <title>hta cross scripting</title>
  <script>
    function window.onload() {
       myframe.document.search.query.value="스크립트";
       myframe.check_query();
    }
  </script>
</head>
<body scroll="no">
  <iframe id=myframe src="http://kin.naver.com/" width=100% height=100%></iframe>
</body>
</html>
반응형
반응형
출처 : http://naradesign.net/wp/2006/09/05/35/

XHTML 은 HTML 을 XML 문법에 맞게 변형하여 다시 한번 공식화 한 것 뿐입니다. 따라서 HTML과는 약간의 문법적 표기에 대한 차이만 갖는데 XHTML 문법은 좀더 엄격함을 요구하고 있습니다. XHTML 1.0 스펙을 보면 별도의 XHTML 요소(엘리먼트)에 대한 규격을 소개하고 있지 않은데 이는 XHTML에서 새롭게 추가된 요소가 존재하지 않고 HTML 을 XML 규격에 맞도록 단지 재 구성 하였기 때문 입니다.
드림위버를 사용하는 경우 DTD만 바르게 설정되어 있다면 설정된 DTD의 표준 문법에 맞게 바른 XHTML을 코딩해 주지만 HTML 과 XHTML의 문법적인 차이를 알고 있을 필요는 있습니다. 한마디로 정의하면 XHTML은 HTML의 W3C 최신 표준이며 보다 엄격하고(Well Formed) 확장가능한(extensible) 형태의 HTML 입니다. 아래는 HTML과 XHTML 의 문법적인 차이점 입니다.
#
문법적으로 엄격하게 구성되어 있어야 한다.

HTML 은 종료태그가 없는 것을 허용하였으나 XHTML은 반드시 종료태그를 갖는다. HTML 은 태그의 중첩이 잘못된 것을 허용하였으나 XHTML은 잘못된 중첩을 허용하지 않는다.
#
요소와 속성은 소문자로 표기되어야 한다.

HTML 은 대소문자를 함께 사용하는 것을 허용하였으나 XHTML의 마크업 ‘요소’와 ‘속성’들은 반드시 소문자로 표기한다. 단, 속성의 ‘값’에는 대소문자 혼합 표기가 가능하다. 하지만 대소문자를 명확하게 구분하기 때문에 대문자로 구성된 ‘값’과 소문자로 구성된 ‘값’은 동일하지 않고 확실히 구별된다.
#
모든 태그는 종료태그를 갖는다.

HTML 의 경우 <p>, <td> 등의 태그에서 종료태그를 생략하는 것을 허용하였지만 XHTML 의 경우 반드시 닫아야 한다.
#
속성 ‘값’들은 항상 따옴표로 감싸주어야 한다.

HTML 의 경우 속성 값들을 따옴표로 감싸지 않는 것을 허용하였지만 XHTML 에서는 반드시 속성 ‘값’은 따옴표 안에 있어야 한다.
#
속성과 값의 단축표기를 허용하지 않는다.

HTML 에서는 속성과 속성 값의 단축표기를 허용하였으나 XHTML 에서는 단축표기 하는 것을 허용하지 않는다. <input checked> 는 <input checked="checked"> 와 같이 표기되어야 한다.
#
비어있는 태그(종료태그가 없는 태그)도 종료 되어야 한다.

HTML 에서 <br>, <hr> 과 같이 표기되는(포함하는 내용이 없이 비어있는) 태그들은 <br />, <hr /> 과 같이 표기하여 시작태그에서 곧 종료됨을 표기해 주어야 한다.
#
a, applet, frame, iframe, img, map 에서 name 속성은 다음 버전부터 지원하지 않는다.

id 와 name 을 함께 사용하던 마크업의 name 속성은 id 속성으로 교체되어야 한다. name 속성은 공식적으로 폐기하였지만 여전히 XHTML 1.x 모드까지 지원하고 있다. 하지만 다음 버전에서는 분명히 폐기된다.

참조문서
  1. XHTML 1.0 규격(한국어) http://trio.co.kr/webrefer/xhtml/overview.html
  2. XHTML 1.0 규격(원문) http://www.w3.org/TR/xhtml1/
  3. HTML 및 XHTML 요소 http://www.w3schools.com/tags/default.asp

반응형
반응형
접근성을 고려한 가입폼의 예제

1. 폼안의 내용그룹을 표시하는 fieldset
2. dl, dt, dd 를 이용한 의미있는 구성
3. float, clear 를 이용한 디자인변경

# fieldset
* 하나의 전송양식(FORM)을 의미 단위로 그룹핑하는 요소로서, 회원가입 페이지의 전송양식을 예로 든다면 ‘필수입력, 선택입력’ 등과 같이 의미구조에 따라 전송할 내용을 그룹핑(또는 분할)

# legend
* FIELDSET 요소에 대한 캡션(또는 제목)을 제공하여 양식의 이해를 도움
* legend는 CSS로 변경하는 것이 쉽지 않은 경우가 있어 제목 요소(H1~H6)를 대신 사용할 수 있음

# DTD에따른 표현법 차이
* HTML 4.01: FIELDSET 사용시 LEGEND 요소는 반드시 첫 번째 자식(first-child)으로 마크업 되어야함
* XHTML 1.0: FIELDSET 사용시 LEGEND 요소는 생략 가능

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
  <style type="text/css" title="">
    body {
        margin: 0;
        padding: 0;
        font-size: 75%;
        line-height: 1.5em;
        font-family: "NanumGothic", "Malgun Gothic", "Lucida Grande", Tahoma, Verdana, AppleGothic, UnDotum, sans-serif;
    }
    form {
        margin: 0;
        padding: 0;
    }
    hr {
        display: none;
    }
    p, div, th, td, select, input {
        color: #333;
    }
    a:link, a:visited {
        color: #666;
        text-decoration: none;
    }
    a:active, a:hover {
        color: #000;
        text-decoration: none;
    }
    img {
        border: 0 none;
    }
    form dt {
        float:left;
        clear:both;
        width:100px;
    }
  </style>
 </HEAD>

 <BODY>
  <form action="....." method=".....">
<fieldset>
    <legend>필수항목</legend>
    <dl>
        <dt><label for="mbname">이름:</label></dt>
        <dd><input type="text" id="mbname" name="mbname" /></dd>

        <dt><label for="email">이메일:</label></dt>
        <dd><input type="text" id="email" name="email" /></dd>
    </dl>
</fieldset>
<fieldset>
    <legend>선택항목</legend>
    <dl>
        <dt><label for="address">주소:</label></dt>
        <dd><input type="text" id="address" name="address" /></dd>
    </dl>
</fieldset>
<p><input type="submit" value="확인" /></p>
</form>
 </BODY>
</HTML>

반응형

'개발도 하냐?' 카테고리의 다른 글

Cross Domain Script 해결법  (0) 2009.12.01
HTML vs XHTML?  (0) 2009.12.01
javascript AJAX 페이지로딩  (0) 2009.11.28
FLEX AIR - 케이웨더 날씨 모듈  (0) 2009.11.18
FLEX AIR 시스템트레이에 프로그램 넣기  (0) 2009.11.18
반응형
ajax 테스트를 위한 코드(IE6 확인필요)

테스트 URL : http://db.garada.co.cc/ajaxtest.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <SCRIPT LANGUAGE="JavaScript">
  <!--

function ajaxload(divid, url){
    var page_request = false
    if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
        try {
        page_request = new ActiveXObject("Msxml2.XMLHTTP")
        }
        catch (e){
            try{
            page_request = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e){}
        }
    }
    else if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest()
    else
        return false

    var ajaxfriendlyurl=url.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
    page_request.onreadystatechange=function(){
       if(page_request.readyState==4 && page_request.status == 200 && page_request.statusText=='OK') {
       //로딩되면 할일을 여기에 적는다. 긴 내용이 필요하다면 callback 함수를 외부에 정의해서 사용
       //alert(page_request.responseText);
       document.getElementById(divid).innerHTML=page_request.responseText;
       }
    }

    //변경된 페이지를 받기위한 더미값
    var bustcache=(ajaxfriendlyurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
    page_request.open('GET', ajaxfriendlyurl+bustcache, true)
    page_request.send(null)
}

setInterval("ajaxload(\"result\",\"http://db.garada.co.cc/rand.php\")", 1000); //1000(1초간격으로 실행: 주기적)

  //-->
  </SCRIPT>
 </HEAD>

 <BODY>
  <div id="result"></div>
  <input type='button' onclick='ajaxload("result", "http://db.garada.co.cc/rand.php")' value='Change Text'/>
 </BODY>
</HTML>


XMLHTTPRequest 객체에 대한 더많은 설명을 보려면

http://www.w3.org/TR/XMLHttpRequest/
https://developer.mozilla.org/ko/XMLHttpRequest

참고.

반응형

'개발도 하냐?' 카테고리의 다른 글

HTML vs XHTML?  (0) 2009.12.01
웹표준 가입폼  (0) 2009.11.30
FLEX AIR - 케이웨더 날씨 모듈  (0) 2009.11.18
FLEX AIR 시스템트레이에 프로그램 넣기  (0) 2009.11.18
The value for the useBean class attribute...  (0) 2009.11.16
반응형
1. 웹폰트 생성프로그램을 아래에서 다운로드 받는다.
http://www.microsoft.com/typography/web/embedding/weft3/download.aspx

2. 웹폰트로 사용할 폰트를 미리 준비한다.
(네이버에서 무료배포하는 나눔고딕을 사용해서 해본다)
http://static.campaign.naver.com/nfs1/file/2008/11/hangeul2715/NanumFontSetup_Win_TTF.exe

3. 웹폰트변환을 위해서 필요한 파일을 준비한다.

이미지 순서대로 적용시킨 후 서버에 업로드하고
CSS를 생성하여 확인해본다.


반응형

'삽질로그' 카테고리의 다른 글

원격지원 Tool TeamViewer  (0) 2009.12.15
TOAD 한글깨질때  (0) 2009.12.06
회사 svn, trac 설정  (0) 2009.11.25
DOM XML ticker  (0) 2009.11.24
오랜만에 find 쓸일이 생겨서..  (0) 2009.11.23
반응형
신규프로젝트를 생성하고 TRAC을 사용할수 있도록 설정하는 방법에 대한 내용이다.

프로젝트를 생성하는 과정은 2가지의 과정으로 진행된다.
우선 버전관리를 위한 SVN Repository 를 생성하고 사용자권한을 설정해 준다.

프로젝트명이 "viralapp" 인 경우

svnadmin create /opt/repo/viralapp

저장소를 생성하였으면, 권한을 조정해준다.(웹서버과 그룹사용자가 접근가능하도록 설정)
cd /opt/repo/
chown apache.abydos viralapp * -R

저장소를 읽고 쓸수 있는 설정을 한다.
vi viralapp/conf/passwd
(커밋권한이있는 사용자를 추가해준다. 모르는경우 타 프로젝트 설정 참고)



여기까지 설정했다면, svn 클라이언트를 이용해서 테스트 해본다.
svn co svn://abydos.kr/viralapp
위의 명령이 정상적으로 진행되면, svn 설정이 완료된 상태이다.

그다음 해야 할 일은 이슈관리를 위하여 TRAC 을 설정하는 일이다.
새로운 프로젝트를 생성한다.

trac-admin /opt/trac/viralapp initenv

위의 명령을 치면 여러가지 설정을 대화식으로 설정가능한 화면이 나타난다.
그 중 svn 부분을 이전에 생성한 위치 /opt/repo/viralapp 로 반드시 지정한다.
(추후 trac에서 소스보기를 이용할수 있도록 하기 위해서 필수로 해야한다)

생성이 완료되었으면, 아래의 파일을 이용해서 설정을 해준다
(잘 모른다면 이전의 프로젝트 설정을 참고)
vi /opt/trac/viralapp/conf/trac.ini

마지막으로 사용자 권한을 조정해 준다.
cd /opt/trac
chown apache.abydos viralapp * -R

서버 사용자 중 관리자로 설정하고 싶은 계정에게 관리자 권한부여
trac-admin /opt/trac/viralapp  permission add hckim TRAC_ADMIN


설정이 완료되었으면 http://abydos.kr/trac/ 으로 접속하여 프로젝트를 사용한다.

반응형

'삽질로그' 카테고리의 다른 글

TOAD 한글깨질때  (0) 2009.12.06
웹폰트 적용시키기  (0) 2009.11.27
DOM XML ticker  (0) 2009.11.24
오랜만에 find 쓸일이 생겨서..  (0) 2009.11.23
HTML 테이블 CSS  (0) 2009.11.04
반응형
xml문서를 자바스크립트로 읽어와서 표현해야 할 경우

읽어올 xml의 내용
<?xml version="1.0"?>
<xmlticker>
<pause>3000</pause>
<message>This is message #1</message>
<message url="http://www.cnn.com">This is a link to CNN.com</message>
<message url="http://yahoo.com" target="_new">This is a link to Yahoo</message>
<message>This is message #3</message>
<message>This is message #4</message>
<message>This is message #5</message>
</xmlticker>

자바스크립트로 읽어오는 부분

<script language="JavaScript1.2">

/*
DOM XML ticker- © Dynamic Drive (www.dynamicdrive.com)
For full source code, 100's more DHTML scripts, and Terms Of Use, visit http://www.dynamicdrive.com
Credit MUST stay intact
*/

//Container for ticker. Modify its STYLE attribute to customize style:
var tickercontainer='<div id="container"style="background-color:#FFFFE1;width:150px;height:120px;font:normal13px Verdana;"></div>'

//Specify path to xml file
var xmlsource="ticker.xml"

////No need to edit beyond here////////////
//load xml file
if (window.ActiveXObject)
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
else if (document.implementation && document.implementation.createDocument)
var xmlDoc= document.implementation.createDocument("","doc",null);
if (typeof xmlDoc!="undefined"){
document.write(tickercontainer)
xmlDoc.load(xmlsource)
}

//Regular expression used to match any non-whitespace character
var notWhitespace = /\S/

function init_ticker(){
//Cache "messages" element of xml file
tickerobj=xmlDoc.getElementsByTagName("xmlticker")[0]

//REMOVE white spaces in XML file. Intended mainly for NS6/Mozilla
for (i=0;i<tickerobj.childNodes.length;i++){
if ((tickerobj.childNodes[i].nodeType == 3)&&(!notWhitespace.test(tickerobj.childNodes[i].nodeValue))) {
tickerobj.removeChild(tickerobj.childNodes[i])
i--
}
}
document.getElementById("container").innerHTML=tickerobj.childNodes[1].firstChild.nodeValue
msglength=tickerobj.childNodes.length
currentmsg=2
themessage=''
setInterval("rotatemsg()",tickerobj.childNodes[0].firstChild.nodeValue)
}

function rotatemsg(){
var msgsobj=tickerobj.childNodes[currentmsg]
if (msgsobj.getAttribute("url")!=null){
themessage='<a href="'+msgsobj.getAttribute("url")+'"'
if (msgsobj.getAttribute("target")!=null)
themessage+=' target="'+msgsobj.getAttribute("target")+'"'
themessage+='>'
}
themessage+=msgsobj.firstChild.nodeValue
if (msgsobj.getAttribute("url")!=null)
themessage+='</a>'

//Rotate msg and display it in DIV:
document.getElementById("container").innerHTML=themessage
currentmsg=(currentmsg<msglength-1)? currentmsg+1 : 1
themessage=''
}

function fetchxml(){
if (xmlDoc.readyState==4)
init_ticker()
else
setTimeout("fetchxml()",10)
}

if (window.ActiveXObject)
fetchxml()
else if (typeof xmlDoc!="undefined")
xmlDoc.onload=init_ticker

</script>



반응형

'삽질로그' 카테고리의 다른 글

웹폰트 적용시키기  (0) 2009.11.27
회사 svn, trac 설정  (0) 2009.11.25
오랜만에 find 쓸일이 생겨서..  (0) 2009.11.23
HTML 테이블 CSS  (0) 2009.11.04
UI Component  (0) 2009.10.07
반응형

확장자 일괄변경
find . -name *.php -exec rename .sas .mtml {} \;

파일내용 찾기
find . -type f -print | xargs egrep -i "expression"

파일내용 바꾸기
find . -name *.* -exec perl -p -i -e 's/old/new/g' {} \;

일괄삭제
find . -name *.bak -exec rm -rf {} \; 

asdf 라는 문자가 들어간 파일 찾아서 뿌려주기

find ./ -print | xargs grep asdf $1

어떤 문자가 들어간 파일을 찾아서 특정 디렉토리에 이동시키기

# find . -exec grep -l "문자열" {} \; -exec mv {} ./temp_dir \; 


반응형

'삽질로그' 카테고리의 다른 글

회사 svn, trac 설정  (0) 2009.11.25
DOM XML ticker  (0) 2009.11.24
HTML 테이블 CSS  (0) 2009.11.04
UI Component  (0) 2009.10.07
ADOBE FLEX Builder 3 CDKEY  (0) 2009.08.31

+ Recent posts