Pleasure resort of Gleam™

Dev & Mng +165

UNIX commands: tail

Dev & Mng2005.10.18 15:02
지정하는 화일의 끝부분 보여준다. (defult : 10개 라인)

사용법:
tail [options] [file]
options:
-f : 새로 추가되는 줄을 보여줌.
-r : 줄의 순서를 뒤집어서 보여줌.
-n(n은숫자) : n줄부터 끝까지 보여줌.
+n(n은숫자) : 처음부터 n줄까지 보여줌.

Example:
tail -f ./lnk_tomhome/logs/cat*.2005-10-18.txt&

'Dev & Mng' 카테고리의 다른 글

UNIX commands: ps  (0) 2005.10.18
UNIX commands: tail  (0) 2005.10.18
성능 데이터 모델링의 핵심 비법  (0) 2005.09.23
Linux Tomcat Setting..  (0) 2005.09.20

Comment +0

성능 데이터 모델링의 핵심 비법
http://www.dbguide.net/know/know101003.jsp?IDX=920&catenum=14

'Dev & Mng' 카테고리의 다른 글

UNIX commands: tail  (0) 2005.10.18
성능 데이터 모델링의 핵심 비법  (0) 2005.09.23
Linux Tomcat Setting..  (0) 2005.09.20
ProFTPD insatll on Fedora Linux  (0) 2005.09.20

Comment +0

이글은 업무와 관련하여 특수한(?) 상황에 맞게 쓰여진 글이다.
따라 하려는 사람은 자신의 환경에 맞춰서 따라 하기 바란다.


http://java.sun.com에서 JDK(1.5.0.05) 다운로드 및 설치 ->
http://jakarta.apache.org에서 톰캣(5.0.28) 다운로드 및 설치 ->
/etc/profile화일에
CLASSPATH=$CLASSPATH:/usr/local/java
CATALINA_HOME=/home/tomcat/tomcat_5.0.28
JAVA_HOME=/usr/local/java
PATH=$PATH:/usr/local/java:/usr/local/java/bin:
/home/tomcat/tomcat_5.0.28:/home/tomcat/tomcat_5.0.28/bin

export CLASSPATH=$CLASSPATH
export JAVA_HOME=$JAVA_HOME
export CATALINA_HOME=$CATALINA_HOME
export PATH=$PATH

환경변수 추가 ->
Tomcat동작확인 ->
$TOMCAT_HOME/web.xml수정(invoker관련주석제거)->
$TOMCAT_HOME/Catalina/localost/에 context.xml화일 추가

'Dev & Mng' 카테고리의 다른 글

성능 데이터 모델링의 핵심 비법  (0) 2005.09.23
Linux Tomcat Setting..  (0) 2005.09.20
ProFTPD insatll on Fedora Linux  (0) 2005.09.20
FedoraCore4 Setting  (0) 2005.09.20

Comment +0

이글은 업무와 관련하여 특수한(?) 상황에 맞게 쓰여진 글이다.
따라 하려는 사람은 자신의 환경에 맞춰서 따라 하기 바란다.

http://proftpd.org에서 ProFTPD 1.2.10버전을 다운로드 ->
압축풀고
./configure --prefix=/user/local/proftpd --enable-autoshadow --enable-shadow<┘
make<┘
make install
로 설치

설치가 완료되면 /usr/local/proftpd/etc/proftpd.conf의 25라인에서 31라인을
# Set the user and group under which the server will run.
User Gleam
Group develop

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~ !wheel
이렇게 수정

/usr/local/proftpd/sbin/proftpd으로 서버 시작 테스트(아무 메시지 없으면 잘 시작된 것임.)

netstat -an | grep LISTEN | grep 21
ps -ef | grep proftpd
으로 서버 시작 확인 후

echo /usr/local/proftpd/sbin/proftpd >> /etc/rc.d/rc.local으로 부팅시 시작되게 설정

'Dev & Mng' 카테고리의 다른 글

Linux Tomcat Setting..  (0) 2005.09.20
ProFTPD insatll on Fedora Linux  (0) 2005.09.20
FedoraCore4 Setting  (0) 2005.09.20
Linux Network Setting  (0) 2005.09.20

Comment +0

FedoraCore4 Setting

Dev & Mng2005.09.20 02:30
레드햇 리눅스가 9.0을 마지막으로 무료 리눅스를 배포하지 않기로 했단다.
대신 내놓은 것이 Fedora Projec의 지원과 FedoraCore Linux다.
FedoraCore는 상용인 RedHat Enterprise Linux에 포함될 기술의 시험용 버전이다 자세한것은 google에 물어 보시길...

어쨌든 회사 일땜에 이녀석을 설치 해 봤는데. 조금 웃기는 녀석이다.
(설치후 초기설정 대로 부팅하면 바로 XWindow가 실행된다거나 하는등의...;;)
그래서 설치후 할일을 좀 적어둔다.
(사실 리눅스 서버를 많이 안먼지니까 까먹지 말라고 써놓는거다... 나 머리 나쁘다 ㅠ.ㅠ)

부팅시 XWindow 시작 해제
/etc/inittab화일의 18라인쯤의
id:5:initdefault:
id:3:initdefault:로 바꿔준다,

네트워크 설정
http://gleam.pe.kr/index.php?pl=224

FTP설정
http://gleam.pe.kr/index.php?pl=227

한글 설정
http://wiki.kldp.org/wiki.php/FedoraCore4/%C7%D1%B1%DB%C8%AD

'Dev & Mng' 카테고리의 다른 글

ProFTPD insatll on Fedora Linux  (0) 2005.09.20
FedoraCore4 Setting  (0) 2005.09.20
Linux Network Setting  (0) 2005.09.20
YAML  (0) 2005.09.19

Comment +0

/etc/hosts
127.0.0.1 localhost localhost.localdomain
systemip yourhostname hostname.yourdomain.com


/etc/resolv.conf
nameserver 168.126.0.1

/etc/sysconfig/network or /etc/network
NETWORKING=yes
HOSTNAME=yourhostname
GATEWAYDEV=devicename
GATEWAY=yourgatewayaddress



/etc/rc.d/init.d/network stop
/etc/rc.d/init.d/network start

or
service network restart
or
system reboot

'Dev & Mng' 카테고리의 다른 글

FedoraCore4 Setting  (0) 2005.09.20
Linux Network Setting  (0) 2005.09.20
YAML  (0) 2005.09.19
CSS를 이용하여 다단으로 내용 표시하기  (0) 2005.09.08

Comment +0

YAML

Dev & Mng2005.09.19 04:55
실용주의 프로그래머 - 일반 텍스트의 힘에 등장
공식 사이트는 http://www.yaml.org/ 이며,
YAML은 데이터를 직렬화 하여 사람이 읽고 계산할수 있도록 만들기 위한 국제 합작 언어다.
YAML의 초기 회원은 Brian Ingerson, Clark Evans 그리고 Oren Ben-Kiki이다.

YAML은 두가지 노력의 결과이다.
첫째는 Brian Ingerson의 Inline을 위한 직렬화 형식(format) 필요로써 이 결과는 Data::Denter에 있다.
둘째는, XML을 단순하게 하는 sml-dev group 안에서의 Oren Ben-Kiki와 Clark Evans의 공동 작업이었다.

YAML은 2001년 5월 12일에 의 논문으로 발표 되었다.
Oren 과 Clark의 YAML에 대한 비전(vision)은 Brian의 Data::Denter와 매우 비슷했고 반대도 마찬가지 였다.
그래서 그들은 얼마 후 팀을 이루었고 YAML은 태어났다.

라고 About에 설명 되어 있다.(번역이 맞게 되었는지는 미지수, 한문단이 더 있는데 귀차니즘으로 패스)

관련 링크:
http://www.serious-code.net/moin.cgi/YAML
http://www.google.com/search?q=yaml&num=30

'Dev & Mng' 카테고리의 다른 글

Linux Network Setting  (0) 2005.09.20
YAML  (0) 2005.09.19
CSS를 이용하여 다단으로 내용 표시하기  (0) 2005.09.08
SharpDevelop(#develop)  (0) 2005.09.06

Comment +0

A Javascript Implementation of the CSS3 Multi Column Module.

Table Tag를 사용 하지않고,
CSS를 이용하여 다단(Muti Column)으로 내용 표시하기

Example : http://gleam.pe.kr/example/MultiColumnDocUsingCss.php

Source:
http://www.csscripting.com/wiki/index.php?title=CSS3_Multi_Column

불여우와 IE에서 사용이 가능하다.
맥은 테스트 해보지 못해서 모름...
불여우는 반응(파싱되어 결과를 표시 하는)속도가 좀 느린듯..;;

falcorner님 블로그에서 퍼옴

'Dev & Mng' 카테고리의 다른 글

YAML  (0) 2005.09.19
CSS를 이용하여 다단으로 내용 표시하기  (0) 2005.09.08
SharpDevelop(#develop)  (0) 2005.09.06
Unix tools for dos  (0) 2005.08.31

Comment +0

#develop (short for SharpDevelop) is a free IDE for C# and VB.NET projects on Microsoft's .NET platform.
It is open-source (GPL)
http://www.icsharpcode.net/
http://icsharpcode.net/OpenSource/SD/Download/

'Dev & Mng' 카테고리의 다른 글

CSS를 이용하여 다단으로 내용 표시하기  (0) 2005.09.08
SharpDevelop(#develop)  (0) 2005.09.06
Unix tools for dos  (0) 2005.08.31
Shared Source CLI 컴파일하기  (0) 2005.08.31

Comment +0

Unix tools for dos

Dev & Mng2005.08.31 00:46
★ Unix tools for dos
http://www.pell.portland.or.us/~orc/Code/odds-and-ends/dostools/


http://www.cs.colorado.edu/~main/cs1300/bin/
http://www.macalester.edu/crash/software/dos/unix_utils/uxutl23/

'Dev & Mng' 카테고리의 다른 글

SharpDevelop(#develop)  (0) 2005.09.06
Unix tools for dos  (0) 2005.08.31
Shared Source CLI 컴파일하기  (0) 2005.08.31
정규식 모음  (1) 2005.08.26

Comment +0

저자: 한동훈(traxacun@unitel.co.kr)
마이크로소프트에서 공유 소스(Shared Source) 프로그램을 발표했고, 그 일환으로 CLI에 대한 소스를 공개했습니다.
사실은 소스가 공개된지 매우 오래되었지만 국내에서는 별로 소개되는 일은 없는 것 같습니다. 관심밖일까요? 아니면 너무 어렵기 때문일까요?
어쨌거나 한동안은 IL 코드와 MOF(Managed Object File)에 대해서 살펴보고, COFF를 다시 살펴보았으며, CLI 소스와 자바의 소스 코드를 비교하는 즐거운 시간을 가졌던 것은 사실입니다.
C#은 자바의 아류일 뿐이다라고 치부하는 사람들도 있지만, C#과 자바 모두 각자의 길을 가고 있다고 생각되고, 다른 점들은 다른 것이라 생각합니다.
메소드나 클래스 이름이 비슷하다고 해서 둘이 비슷하다거나 같다고 하는 것은 곤란하다고 생각하는 쪽입니다.
이제 본론으로 들어가죠. Shared Source CLI는 http://msdn.microsoft.com/net/sscli에서 직접 다운 받을 수 있습니다. 압축을 풀 때는 주의할 점이 있는데 윈도우 환경에서는 WinZip을 사용하거나 윈도우용 tar, gzip 패키지를 사용하라는 것입니다. 일부 압축 프로그램들은 tar 파일 형태의 디렉터리 정보를 잘못 읽어오기 때문에 원래 구조대로 압축이 풀리지 않는 문제점이 있었습니다. 저는 CygWin(http://www.cygwin.com)을 사용해서 압축을 풀었습니다.(사실은 리눅스와 윈도우 모두 GCC를 사용하기 위해 CygWin을 쓰고 있었거든요)
압축을 모두 풀고나면 sscli라는 디렉터리가 생기고, 대략 70MB 정도를 차지합니다. 이것은 윈도우와 FreeBSD에서 완전히 사용할 수 있습니다. 음, 저도 닷넷이 윈도우에서만 실행되고 FreeBSD는 옮기는 중이라고 알고 있었는데 그건 아닌듯 합니다.
그리고 컴파일을 할 수 있도록 환경 설정을 하기 위해 Perl이 설치되어 있어야합니다. Perl은 http://www.activestate.comhttp://www.perl.org에서 받을 수 있지만, 윈도우 사용자는 ActiveState의 Active Perl을 받아서 설치하는 것이 편합니다. 경로 설정이나 파일 연결 같은 설정을 자동으로 해줍니다.
이것을 컴파일하려면 비주얼 스튜디오 닷넷이 필요합니다. 모두 여러분의 컴퓨터에 설치되어 있겠지요? FreeBSD 사용자라면 GCC만 있으면 됩니다.
이제 sscli 디렉터리에서 env.bat를 실행합니다. FreeBSD 사용자라면 사용하는 쉘의 종류에 따라서 env.sh이나 env.csh을 실행하면 됩니다. 그리고 buildall을 실행합니다. FreeBSD 사용자라면 ./configure와 ./buildall을 실행합니다.
저는 P-III 800Mhz, 256M 램을 사용하고, 윈도우 XP에서 컴파일을 하는데 1시간 20분 가량 걸렸던 것 같습니다. 생각했던 것과는 달리 경고 메시지도 나타나지 않고, 깔끔하게 컴파일되었습니다.
컴파일이 모두 끝났으면 제대로 컴파일이 되었는지 확인하기 위해 csc를 실행합니다. 실행하면 다음과 같은 메시지가 나타납니다.

Microsoft (R) Visual C# .NET Compiler version
for Microsoft (R) .NET Framework version ---
Copyright (c) Microsoft Corporation 2001. All rights reserved.

fatal error CS2008: No inputs specified.

평소에 쓰던 C# 컴파일러와는 조금 다릅니다. 컴파일이 정말 되는지 알아보기 위해 sscli에서 tools\hello로 이동합니다. 다음과 같은 명령을 실행해 봅니다.

csc hello.cs
csc helloxml.cs
clix hello.exe
clix helloxml.exe

모두 잘 실행되는 것을 알 수 있습니다. clix는 CLI Loader라는 것으로, 우리가 컴파일한 CLI 환경에 코드를 로드할 수 있게 해줍니다. 그렇지 않으면 보통의 닷넷 런타임이 로드됩니다. 주의해야겠죠.
여기에는 몇 가지 차이점이 있습니다. 닷넷 프레임워크에 있는 C# 컴파일러에서 몇 가지 옵션이 제거되어 있으며, GUI 환경을 위해서 Tcl/Tk를 사용하고 있습니다.
자, 컴파일이 너무 간단하게 되기 때문에(아마, 퀘이크 소스 보다는 간단한 것 같군요!) 특별히 쓸 내용이 없습니다.
여기서는 간단히 여러분이 흥미를 가질만한 디렉터리들을 소개하는 것으로 마칠까 합니다.
  • sscli/docs - Shared Source CLI의 각종 문서들이 있습니다. 이 문서들을 시작지점으로 하면 좋습니다.
  • sscli/pal - PAL(Platform Adaptation Layer)라고 하며, unix와 win32 환경을 위한 코드가 따로 있습니다.
  • sscli/pal/src - PAL 런타임 소스가 있습니다. 새로운 PAL을 구현하는 것으로 닷넷 환경을 다른 운영체제로 옮길 수 있습니다. 하지만 모든 것을 새로 구현하는 것은 분명히 낭비겠지요. 여기는 PAL에서 공통적인 부분들에 해당하는 소스 코드가 있습니다. 주로 COM API, 암호화, 문자열, 관리형 코드에서 비관리형 코드(운영체제 네이티브 호출)를 사용하는 것에 대한 내용이 있습니다.
  • sscli/tools - 주로 SSCLI에서 사용하는 도구들입니다. 여기에는 namke 등이 있습니다.
  • sscli/clr/src - 여기에는 상당히 많은 디렉터리들이 있는데, 주요 디렉터리들은 다음과 같습니다.
    • vm - 많은 분들이 들어봤을 법한 가비지 컬렉터, 클래스 로드, 타입 시스템, 응용 프로그램 도메인, 리플렉션, 보안, 코드 관리자, 가상 실행 엔진(VEE)을 구현하고 있는 부분입니다. 실제로 저는 여기서 CLR의 메모리 관리와 같은 부분에 대한 많은 내용들을 얻을 수 있었습니다.
    • csharp - C# 컴파일러 구현입니다.
    • bcl - ECMA에 표준안으로 제출된 C# 스펙의 기본 클래스 라이브러리(Base Class Library, BCL)를 정의한 부분입니다. 실제로 이 부분은 C++이 아니라 C#으로 구현되어 있어서, 내부 구현을 들여다 볼 수 있는 좋은 기회를 제공합니다. void.cs 같은 것을 보면 반환값이 없는 형태를 구현하는 것을 볼 수 있습니다. 정말 아무것도 없어요(VOID !!)
    • debug - cordbg.exe와 같은 디버거를 구현한 소스 코드입니다. 닷넷 프레임워크에는 GUI 버전인 GUI Debug도 있었는데, SSCLI에서는 제외되어서 아쉽습니다.
    • ilasm/ildasm - IL 코드 어셈블러와 디셈블러 소스 코드가 있습니다.
    • dlls - mscoree.dll과 같은 네이티브 코드들에 대한 소스가 들어있습니다. System 네임 스페이스를 비롯한 거의 대부분의 네임 스페이스가 mscoree.dll에 있다는 것을 아시는 분들은 아실겁니다. 기대와는 달리(당연한 얘기지만) 해당 운영체제의 네이티브 호출로 꽉 차 있습니다.
  • sscli/jscript/engine - JScript 컴파일러 소스 코드입니다.
  • sscli/tests - 각종 테스트 프로그램이 있습니다. rrun.pl은 런타임 환경 자체를 테스트할 수 있는 Perl 스크립트입니다. sscli/tests/palsuite는 FreeBSD 환경에서 테스트할 수 있는 코드들이 있습니다. 테스트 프로그램들 중에는 CLR을 수정한 경우에 CLR 환경만 테스트 할 수 있는 것도 있고, BCL만 테스트할 수 있는 것등 다양한 버전이 있습니다.

이외에 sscli/samples/pigui/tk에서 Tcl/Tk 래퍼 클래스들을 컴파일할 수 있습니다. 컴파일하면 SharedSourceCLI.Tk.dll이 만들어집니다. 물론 Tcl/Tk가 시스템에 설치되어 있어야합니다.
http://www.activestate.com에서 Tck/Tk를 다운 받을 수 있습니다. pigui에는 GUI 예제들이 있습니다. 간단한 GUI 노트 패드도 있으니 사용해 보시기 바랍니다.
http://msdn.microsoft.com/net/sscli에 가면 SSCLI와 관련된 뉴스 그룹 목록과 관련된 자료를 볼 수 있는 곳에 대한 정보를 얻을 수 있습니다.
C#의 다음 버전에는 메소드 조인이 소개될지도 모릅니다. 닷넷 프레임워크에서 구현된 컴파일러는 있지만, 몇가지 문제점들을 해결하기 위해 노력하고 있는 모양입니다.
메소드 조인은 멀티 스레드와 관련된 Concurrent Abstraction을 제공하며, Concurrent Abstraction Programming 모델을 제공합니다. 교착상태가 발생하지 않게 할 수 있고, 지금까지와는 전혀 새로운 형태로 스레드 프로그래밍을 할 수 있을 것입니다.(저의 세미나 주제이기도 했는데, 정말 멋진 코드를 작성할 수 있고, 훌륭하게 실행된다는 사실에 즐거웠었습니다. 닷넷 프레임워크 v 2.0 정도가 나오고, 조인 메소드가 소개된다면 여러분에게 가장 먼저 깊이 있는 내용을 소개할 수 있게 되기를 고대해 보겠습니다)
자, 지금은 CLI 해킹을 즐겨볼까요?
참고

http://network.hanbitbook.co.kr/view.php?bi_id=402&pg=19

'Dev & Mng' 카테고리의 다른 글

Unix tools for dos  (0) 2005.08.31
Shared Source CLI 컴파일하기  (0) 2005.08.31
정규식 모음  (1) 2005.08.26
Windows API가 정리되어 있는곳  (0) 2005.08.09

Comment +0

정규식 모음

Dev & Mng2005.08.26 16:02
입력 유효성 검사 및 파일 구문 분석과 관련하여 정규식을 사용하여 수행할 수 있는 작업은 다양합니다. 가장 일반적인 식 중 일부는 사용할 수 있는 기능 및 옵션으로 인해 기억하기 어려운 경우가 많습니다. 다음은 일반적으로 사용되는 정규식 목록입니다.

용도 식
사회 보장 번호: \d{3}-\d{2}-\d{4}
미국 전화 번호: ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}
미국 우편 번호: \d{5}(-\d{4})?
인터넷 전자 메일 주소: [\w-]+@([\w-]+\.)+[\w-]+
인터넷 URL: http://([\w-]\.)+[\w-](/[\w- ./?%=]*)?
단순 암호(숫자): ^(?=.*\d).{4,8}$
고급 암호(대문자, 소문자, 숫자): ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$
공용 파일 마스크: ^(.+)\\(.+)\.(.+)
주요 신용 카드: \d{4}-?\d{4}-?\d{4}-?\d{4}
From: http://zylux.net/

http://www.idsu.net/bbs/view.php?wuser_id=tip&u_no=120

'Dev & Mng' 카테고리의 다른 글

Shared Source CLI 컴파일하기  (0) 2005.08.31
정규식 모음  (1) 2005.08.26
Windows API가 정리되어 있는곳  (0) 2005.08.09
Shuffle by Javascript Array  (0) 2005.07.30

1

http://www.pinvoke.net

Windows API가 정리되어 있는곳..

닷넷에서 Win32 API를 호출하기 위해서는 Win32 API 함수 선언을 해주어야 합니다. 수작업으로 하기에는 버거워 항상 검색해서 붙여 넣게됩니다. 여기 훌륭히 정리해 놓은 사이트가 있군요. 거의 모든 API를 망라한 방대함과 아무나 수정/추가 할 수 있는 위키 형식이라 내용이 계속 업데이트될 가능성. 검색 기능은 좋은 점입니다. 하지만 예제코드등 업데이트 된 것을 거의 찾아 볼 수 없는 것을 봐서 업데이트에 참여하는 사람이 많지 않은 듯하며 응답속도도 답답한 느낌인 것은 아쉬운 점이군요.

From: http://codian.net/blog

'Dev & Mng' 카테고리의 다른 글

정규식 모음  (1) 2005.08.26
Windows API가 정리되어 있는곳  (0) 2005.08.09
Shuffle by Javascript Array  (0) 2005.07.30
Upload Photo from SmartPhone  (0) 2005.07.30

Comment +0

JS배열에서의 shuffle
http://libphp.com/main/data/view.php?no=3214
[CODE]/* 제작자이름 : navyism 제작자메일 : navyism@chol.com 관련사이트 : http://navyism.com */ <script> var imagePool = new Array( 'http://miniwini.com/miniwinis/img/icon/i_talks_big.gif', 'http://miniwini.com/miniwinis/img/icon/i_ts_big.gif', 'http://miniwini.com/miniwinis/img/icon/i_sharefolder_big.gif' ); imagePool.sort(function(){return Math.random()*2-1;}); for(var i in imagePool) { document.write("<img src='" + imagePool[i] + "'><br/>"); } </script>[/CODE]

'Dev & Mng' 카테고리의 다른 글

Windows API가 정리되어 있는곳  (0) 2005.08.09
Shuffle by Javascript Array  (0) 2005.07.30
Upload Photo from SmartPhone  (0) 2005.07.30
Precompilation In ASP.NET 2.0  (0) 2005.07.30

Comment +0

Upload Photos to Your Web Site With
Your SmartPhone and the Compact Framework
http://www.eggheadcafe.com/articles/20050619.asp

'Dev & Mng' 카테고리의 다른 글

Shuffle by Javascript Array  (0) 2005.07.30
Upload Photo from SmartPhone  (0) 2005.07.30
Precompilation In ASP.NET 2.0  (0) 2005.07.30
테이블 대안  (2) 2005.07.13

Comment +0

Precompilation In ASP.NET 2.0
http://odetocode.com/Articles/417.aspx

'Dev & Mng' 카테고리의 다른 글

Upload Photo from SmartPhone  (0) 2005.07.30
Precompilation In ASP.NET 2.0  (0) 2005.07.30
테이블 대안  (2) 2005.07.13
문장의 한글자 또는 한라인에만 스타일을 적용할때..  (0) 2005.07.13

Comment +0

테이블 대안

Dev & Mng2005.07.13 22:29
Why tables for layout is stupid: problems defined, solutions offered의 번역문

http://www.softwant.com/standards/

Comment +2

  • 넘 잘되어있네요 넘 쉽게 내용을 이해할수있게되어있다는...

    • 음...
      걍 웹관련해서 일을 한다면 혹은 할 계획이라면 한번 읽어 보는 것이 좋을듯해서 올려두었습니다.

      사실 현업에서 시간에 &#51927;기다 보면 안좋은걸 알면서도 그냥 쓰는 경우가 많은데 읽어보고 숙지하고 있는다면 조금씩이라도 바꿔갈 수 있을것 같습니다.

http://blog.naver.com/tear230/100008462836

내용보기

Comment +0

http://blog.naver.com/tear230/100009982925

Example:


<select name="language">
<optgroup label="선택하세요" style="color:orange"></optgroup>
<optgroup label="Web" style="color:green">
<option>ASP</option>
<option>PHP</option>
<option>JSP</option>
</optgroup>
<optgroup label="Window" style="color:blue">
<option>VB</option>
<option>C++</option>
<option>JAVA</option>
</optgroup>
</select>

Comment +0

chmod 권한변경

Dev & Mng2005.07.06 04:20
chmod를 사용하면 파일이나 디렉토리의 접근허가를 쉽게 변경할 수 있다. chmod의 일반적인 사용법을 먼저 소개하고, 예제를 몇 개 들어서 이해를 돕도록 하겠다. chmod의 일반적인 서식은 다음과 같다.
[CODE]chmod [ -fR ] <mode> <filename>[/CODE]
명령어행 선택사양은 다른 명령에 비해서 비교적 단순하다.
f : 강제적(force)으로 수행한다.
R : 재귀적(Recursive)으로 수행한다. 즉 서브 디렉토리까지 모든 파일의 접근허가를 변경한다.

chomd의 가장 큰 특징은 가 절대 모드와 심볼릭 모드가 있다는 점이다. 절대 모드는 숫자로 접근허가를 결정하는데 사용하고 심볼릭 모드는 기호를 사용하여 접근허가를 결정하는데 사용한다. 일단 절대 모드에 사용되는 숫자를 설명하겠다. 개인적으로 절대 모드가 기억하기 더 쉽다고 생각함으로 절대 모드에 대해서만 설명하도록 하겠다.
400: 소유자에 의해서 읽힐 수 있다.
200: 소유자에 의해서 적힐 수 있다.
100: 소유자에 의해서 수행될(발견될) 수 있다.
040: 그룹에 의해서 읽힐 수 있다.
020: 그룹에 의해서 적힐 수 있다.
010: 그룹에 의해서 수행될(발견될) 수 있다.
004: 타인에 의해서 읽힐 수 있다.
002: 타인에 의해서 적힐 수 있다.
001: 타인에 의해서 수행될(발견될) 수 있다.
절대 모드에서는 필요한 접근허가에 해당하는 숫자를 전부 OR 시켜서 <mode&rl;란에 적어주면 된다.

이것은 8진수의 숫자 더하기 방식으로 사용합니다. 읽기는 4, 쓰기는 2, 실행은 1입니다.

r w x
4 2 1

이들 숫자들의 조합으로 생길 수 있는 경우는 다음과 같습니다:

1 = 실행만
2 = 쓰기만
3 = 쓰기와 읽기 (1+2)
4 = 읽기만
5 = 읽기와 실행 (4+1)
6 = 읽기와 쓰기 (4+2)
7 = 읽기와 쓰기와 실행 (4+2+1)

실제 사용되는 예로 다음과 같은 방식으로 사용됩니다.

소유주 그룹 다른이

chmod 640 file1 rw- r-- ---
chmod 754 file1 rwx r-x r--
chmod 664 file1 rw- rw- r--

'Dev & Mng' 카테고리의 다른 글

SELECT 목록 그룹별로 묶어서 표시하기  (0) 2005.07.13
chmod 권한변경  (5) 2005.07.06
Install and Configuration PROFTPD on Solaris 10  (0) 2005.06.27
정규식 강좌 and 링크..  (0) 2005.06.22

Comment +5

  • 어... 어... ... ...(...) 내가 찾던 건데...?? 어...?? 정말... 내가 찾던 건데... 이거... 근데... 리눅스 명령어 인가요... 아직 명령어 구분을 못 하는 초짜라서... - seitahyi

  • 윽..이번학기 때 배운 유닉스의 악몽이 생각납니다. -.,ㅡ; 기말 레포트가 간단한 유닉스 명령어를 구현한 자기자신만의 마이쉘을 작성하는 것이었건만... 쿨럭;

    • 이시태>>
      유닉스 계열(리눅스 포함)에서 사용가능 합니다.

      굴비>>
      음.. 학생이신가 보네요... 좋겠다...
      전 알바 하는 중에 권한 번호가 자꾸 햇갈려서 적어봤습니다.

  • 우어어억.. 이런거 알바도 있어요/ ;; 와~ 신기하네요. 흠...
    저희과가 신생과라 선배들이 별로 없어서.... T.T
    이런거 아르바이트도 잇군요..흐으음

참조: 솔라리스 스쿨

이글은 위 참조를 보고 실제 설치시 적용한 내용만 추려 놓은것임.

Start Now ->

root@solaris10:/usr/local/httpd# ftp ftp.proftpd.org
Connected to ftp.proftpd.org.
220 ProFTPD 1.3.0rc1 Server (proftpd.org Project) [81.223.20.36]
Name (ftp.proftpd.org:root): anonymous
331 Anonymous login ok, send your complete email address as your password.
Password:
230 Anonymous access granted, restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /distrib/source
250 CWD command successful
ftp> get proftpd-1.2.9.tar.gz
200 PORT command successful
150 Opening BINARY mode data connection for proftpd-1.2.9.tar.gz (995350 bytes)
226 Transfer complete.
local: proftpd-1.2.9.tar.gz remote: proftpd-1.2.9.tar.gz
995350 bytes received in 9.2 seconds (105.10 Kbytes/s)
ftp> quit
221 Goodbye.
root@solaris10:/usr/local/httpd# tar -zxvpf proftpd-1.2.9.tar.gz
root@solaris10:/usr/local/httpd# cd proftpd-1.2.9
root@solaris10:/usr/local/httpd/proftpd-1.2.9# ./configure --prefix=/usr/local/proftpd --enable-shadow
root@solaris10:/usr/local/httpd/proftpd-1.2.9# make;make install
root@solaris10:/usr/local/httpd/proftpd-1.2.9# vi /usr/local/proftpd/etc/proftpd.conf
root@solaris10:/usr/local/httpd/proftpd-1.2.9# /usr/local/proftpd/sbin/proftpd

'Dev & Mng' 카테고리의 다른 글

chmod 권한변경  (5) 2005.07.06
Install and Configuration PROFTPD on Solaris 10  (0) 2005.06.27
정규식 강좌 and 링크..  (0) 2005.06.22
솔라리스 GNU TOOL Instll  (0) 2005.06.20

Comment +0

뉴스그룹 리핵님 강좌 : 보기

Referance Site:
http://www.regexlib.com

'Dev & Mng' 카테고리의 다른 글

Install and Configuration PROFTPD on Solaris 10  (0) 2005.06.27
정규식 강좌 and 링크..  (0) 2005.06.22
솔라리스 GNU TOOL Instll  (0) 2005.06.20
설치된 Package info 보기  (0) 2005.06.20

Comment +0

http://www.sunfreeware.com/에서 받는다.

1. GCC를 받아서 압축풀고,
pkgadd -d gcc-2.95.3-sol8-intel-local 이런식으로 설치
2. M4도 받아서 압축풀고
pkgadd -d m4-1.4.2-sol10-sparc-local로 설치
3. autoconf 소스 받아서 ./configure -> make -> make install
4. automake도 소스 받아서 ./configure -> make -> make install

'Dev & Mng' 카테고리의 다른 글

정규식 강좌 and 링크..  (0) 2005.06.22
솔라리스 GNU TOOL Instll  (0) 2005.06.20
설치된 Package info 보기  (0) 2005.06.20
Slipstreamed CD  (3) 2005.06.17

Comment +0

pkginfo |grep [pkgname]

ex)
root@solaris10:/usr/local/httpd/autoconf-2.59# pkginfo |grep autoconf application SMCautoc autoconf root@solaris10:/usr/local/httpd/autoconf-2.59#

'Dev & Mng' 카테고리의 다른 글

솔라리스 GNU TOOL Instll  (0) 2005.06.20
설치된 Package info 보기  (0) 2005.06.20
Slipstreamed CD  (3) 2005.06.17
A Simpler Ajax Path  (0) 2005.06.16

Comment +0

Slipstreamed CD

Dev & Mng2005.06.17 13:27
Slipstreamed CD
ServicePack등 오리지널 WindowsCD에 각종패치를 적용시켜 만든 CD

서비스 팩과 핫픽스까지는 한 번에 설치하는 CD를 만들 수 있지요.
이렇게 하는 것을 "slipstream"이라고 하거든요.
integrated CD를 만든다고도 하구요.


이 문서대로 해 보세요. (URL이 무척 기네요. ^^)
http://www.microsoft.com/windo­ws2000/downloads/servicepacks/­sp4/spdep...

핫픽스도 마찬가지 방법으로 하면 됩니다.
From: 구글


참고자료


http://www.ntfaq.co.kr/support/view.asp?pid=76
http://www.ntfaq.co.kr/support/view.asp?pid=77
http://www.ntfaq.co.kr/support/view.asp?pid=84
http://www.ntfaq.co.kr/ntfaq_view.asp?faq_no=1157

http://support.microsoft.com/default.aspx?scid=kb;ko;814847

http://www.ezbox.net/windows/lectures/011103_win2k.sp3.asp

구글 그룹스 검색

http://www.google.com/search?sourceid=navclient&ie=UTF-8&rls=GGLD,GGLD:2005-09,GGLD:en&q=Slipstreamed+CD

'Dev & Mng' 카테고리의 다른 글

설치된 Package info 보기  (0) 2005.06.20
Slipstreamed CD  (3) 2005.06.17
A Simpler Ajax Path  (0) 2005.06.16
쓸데없는 윈도우 서비스  (0) 2005.06.12

Comment +3

  • 망고쥬스 2005.06.20 10:48 신고

    Goooooooooooooood~~~~!!

  • 몽당연필 2006.02.27 10:14 신고

    추가
    1. http://www.wxp21.com/zboard/zboard.php?id=pds_xp&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=패치&select_arrange=headnum&desc=asc&no=8780

    2. http://www.wxp21.com/zboard/view.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=20

A Simpler Ajax Path

Dev & Mng2005.06.16 10:35
http://network.hanbitbook.co.kr/view.php?bi_id=1088
저자: Matthew Eernisse, 한동훈 역
원문: A Simpler Ajax Path

내가 웹 응용 프로그램 분야에 일하기 시작했던 때는 매우 불운했던 시절로 돌아간다. 데스크탑 응용 프로그램처럼 동작하는 응용 프로그램을 만든다는 것은 프레임셋안에 프레임셋이 들어가고, 그 안에 다시 프레임셋이 들어간다거나 대여섯단계 이상 중첩시킨 테이블을 이용한 미궁처럼 뒤얽힌 레이아웃과 씨름하는 것을 의미했다.

다행히도 표준을 준수하는 브라우저, CSS, DHTML, DOM의 출현과 함께 웹 개발자들의 상황은 꾸준히 나아지고 있다. 광범위한 브로드밴드 액세스는 웹 응용 프로그램을 보다 빠르게 만들어주었다. 브라우저에 배포할 수 있는 보다 다양한 기능과 보다 강력한 상호운영성을 보다 쉽게 이끌어 낼 수 있는 XMLHttpRequest 객체가 등장했다.

XMLHttpRequest 객체는 새로운 것이 아니지만 최근에 웹 응용 프로그램 개발에 대한 새로운 접근방법의 핵심으로 부각되고 있다. 최근에 가장 많이 인용되고 있는 Ajax(비동기 자바스크립트와 XML)는 플리커(Flickr), 아마존의 A9.com, 웹 기반 인터액티비티(interactivity)의 떠오르는 별인 Google MapsGoogle Suggest 같은 사이트에서 기능을 십분 활용하고 있다. 멋진 Ajax 사용자들은 어떤 원동력을 갖고 있는 것처럼 보인다. - 웹로그 Ajaxian, 오라일리 미디어와 Adaptive Path가 공동으로 주관한 Ajax Summit을 포함해서 Ajax는 모든 장소에서 등장하고 있다.

멋진 약어이든 아니든간에, 나의 웹캐스트 라디오 방송국 EpiphanyRadio에 재생목록 검색 기능을 추가하려고 결정했을 때, XMLHttpRequest 객체가 제공하는 기능들을 보여줄 수 있는 좋은 기회라고 생각했다.

아니나 다를까, 데스크탑 응용 프로그램 처럼 동작하는 웹 응용 프로그램을 만들기 위해 XMLHttpRequest 객체를 이용하는 것은 너무나 쉬웠다. 물론, 사용자 입력을 위해 웹 폼과 같은 도구들도 그대로 사용할 수 있다. 또한, 골치아픈 디버깅을 줄이기 위해 서버측 에러를 처리할 수 있는 방법도 찾아낼 수 있었다.

XMLHttpRequest 객체 개요
XMLHttpRequest를 사용하면 iframe 트릭을 사용하거나 페이지를 리로드하지 않고 자바스크립트를 사용해서 서버에 HTTP 요청(GET과 POST)을 보낼 수 있다. 마이크로소프트는 인터넷 익스플로러 버전 5 부터 ActiveX 객체 형태로 XMLHttpRequest 객체를 구현했으며, 모질라 프로젝트는 모질라 1.0에, 애플은 사파리 1.2에 이를 추가했다.

이름이 의미하는 것과 달리 XMLHttpRequest 객체는 XML 이상의 기능을 수행한다. XMLHttpRequest를 사용해서 어떤 종류의 데이터든 처리할 수 있다. 염두해둘것은 서버로부터의 응답을 자바스크립트가 처리한다는 것이다. 예제에서는 브라우저에 DSV(delimiter-separated values, 구분자로 값을 분리한 형식) 형식으로 데이터를 반환한다.

POST로 폼데이터 보내기
XMLHttpRequest 객체를 다루는 다른 기사에서는 GET 요청을 어떻게 사용하는지 설명하고 있다. XMLHttpRequest 객체는 POST 요청을 사용할 수 있으며, 웹 응용 프로그램을 위한 보다 유용한 도구로 만들어준다.

POST 메서드를 사용하려면 데이터를 XMLHttpRequest 객체에 쿼리 스트링형식(예, ArtistName=Kolida&SongName=Wishes)으로 전달하고, 객체가 서버에 보통의 POST 형식으로 전송한다. 웹폼 요소로부터 한번에 데이터를 가져오고, 쿼리 스트링 형식으로 형식화하기 위해 자바스크립트를 사용한다. 나의 재생목록 검색 함수를 위해 이 같은 작업을 한다면 다음과 같은 코드를 사용할 것이다.

var searchForm = document.forms['searchForm'];
var artistName = searchForm.ArtistName.value;
var songName = searchForm.SongName.value;
var queryString = '?ArtistName=' + escape(artistName) + '&SongName=' +
escape(songName);

주의: 값에 URL 인코딩을 위해 escape를 사용해야한다.

Larry Wall의 프로그래머의 위대한 세가지 미덕을 염두에 두면서 폼에 있는 모든 데이터를 쿼리 스트링으로 바꿔주는 프로세스를 자동화하는 일반 함수를 작성했다. 이 함수를 사용하면 매번 번거로운 작업들을 하지 않고 XMLHttpRequest 객체에 폼 데이터를 POST할 수 있다. 이 같은 방법으로 기존 응용 프로그램 코드에 XMLHttpRequest 객체 사용을 보다 쉽게 통합할 수 있다.
함수의 첫부분을 살펴보자.

function formData2QueryString(docForm) {
var strSubmit = '';
var formElem;
var strLastElemName = '';

for (i = 0; i < docForm.elements.length; i++) {
formElem = docForm.elements[i];
switch (formElem.type) {
// Text, select, hidden, password, textarea elements
case 'text':
case 'select-one':
case 'hidden':
case 'password':
case 'textarea':
strSubmit += formElem.name +
'=' + escape(formElem.value) + '&'
break;

변수 docForm은 폼에 대한 참조이며, 데이터를 가져오기 위해 사용한다. 이런 방식은 다양한 장소에서 함수를 재사용할 수 있게 해준다.

이 함수는 폼의 elements 컬렉션을 반복하면서 각 element의 type을 사용해서 어떻게 값을 가져올지를 결정한다. 각 요소들에 대해서 쿼리 스트링 변수 strSubmit에 이름과 값을 저장한다. 그 다음에 POST를 위해 XMLHttpRequest 객체에 이 문자열을 전달한다.

폼 요소에 쓰이는 대부분의 타입들은 value 속성을 사용해서 값을 가져올 수 있지만 라디오 버튼과 체크 박스는 다른 작업을 해야한다. 체크 박스의 경우에 콤마(,)로 값을 구분하는 문자열을 만들었지만, 필요하다면 원하는 형태로 문자열을 처리할 수 있다. 이 함수를 사용하면 XMLHttpRequest 객체를 사용하는 것과 폼에서 사용자 데이터를 가져오는 데 있어 많은 시간을 절약할 수 있다.

전체 함수는 다운로드할 수 있다.

객체 생성하기
자바스크립트로 IE에서 객체를 생성하려면 new ActiveXObject( "Microsoft.XMLHTTP")를 사용하며, 모질라/파이어폭스/사파리에서는 new XMLHttpRequest()를 사용한다. 함수의 처음 절반은 객체를 생성하고 사용하는 부분이다.

function xmlhttpPost(strURL, strSubmit, strResultFunc) {
var xmlHttpReq = false;

// Mozilla/Safari
if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.overrideMimeType('text/xml');
}
// IE
else if (window.ActiveXObject) {
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}

이 함수를 재사용할 수 있는 일반 함수로 만들기 위해 세 개의 매개변수를 사용한다. 서버에서 처리중인 페이지에 대한 URL, 데이터를 전송하기 위해 쿼리 스트링 형식으로 저장된 데이터, 서버로부터의 응답을 처리하기 위한 자바스크립트 함수의 이름(나중에 eval을 사용해서 호출된다)을 매개변수로 사용한다.

모질라/사파리 코드에서 overrideMimeType 메서드를 호출하는 것을 볼 수 있다. 이 부분이 없으면 서버에서 XML아 아닌 것을 반환할 때 특정 버전의 모질라가 멈춰버리는 것을 일부 사람들이 경험했다고 한다.(개인적으로는 이 문제가 발생하지 않았기 때문에 이 문제를 확인할 수는 없다)

만약, 보다 낡은 버전의 브라우저들을 지원하려 한다면 xmlHttpReq 변수를 테스트하고, 객체가 존재하지 않으면 전송하려는 데이터를 다른 메서드에 전달하면 된다.

데이터를 POST하기
함수의 나머지 부분은 서버에 요청을 전송하는 부분이다.

xmlHttpReq.open('POST', strURL, true);
xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlHttpReq.onreadystatechange = function() {
if (xmlHttpReq.readyState == 4) {
eval(strResultFunc + '(xmlHttpReq.responseText;);');
}
}
xmlHttpReq.send(strSubmit);
}

open 메서드는 매개변수를 세개 사용한다. 첫번째는 요청 방법을 지정하고, 두번째는 처리중인 페이지이며, 세번째는 async 플래그를 지정한다. 이 플래그는 요청을 보낸후에 즉시 실행을 계속할 것인지 또는 응답을 받은 후에 계속 실행할 것인지를 결정한다.
참고: HTTP 1.1 스펙에 따르면, 요청 메서드는 대소문자를 구분한다. 요청 메서드를 소문자로 입력한 경우에 인터넷 익스플로러를 사용할 때는 문제가 되지 않지만 모질라에서는 요청이 실패한다.

onreadystatechange 속성은 readyState 속성이 바뀔 때 실행할 콜백 함수를 지정한다.(예를 들어, xmlHttpReq.onreadystatechange = handleResponse; ) readyState 값이 4로 변경될 때 요청이 완료된다. 위 코드는 결과를 전달할 별도의 함수를 사용하는 대신에 익명 함수를 사용하여 응답이 돌아오고, 결과값을 처리할 함수에 문자열로 전달할 때까지 기다린다.

마지막으로 send 메서드가 실제 요청을 전송한다. 서버에 전송할 데이터를 매개변수로 사용한다. 이 함수에서는 서버에 전송할 데이터는 앞에서 formData2QueryString 함수를 사용해서 폼 데이터에서 생성한 쿼리 스트링이다.

서버 응답
앞에서 언급한 것처럼 XMLHttpRequest 객체는 이름이 의미하는 것과는 달리 XML이 아닌 다른 형식의 데이터를 이용할 수 있다. 내 인터넷 라디오 방송국을 위한 검색 함수는 간단한 테이블 형식으로 트랙목록을 반환하기 때문에 다른 데이터 형식을 사용할 수 있다는 점이 마음에 든다. XML 형식 대신에 DSV 형식으로 결과를 반환하는 것은 반환데이터의 크기와 복잡도를 획기적으로 줄여줄 뿐만 아니라 데이터를 해석하는 것도 단순하게 해준다.(에릭 레이몬드(Eric S. Raymond)가 The Art of Unix Programming의 Data File Metaformats 챕터에서 얘기한 것처럼 "XML은 복잡한 데이터 형식에 잘 어울리지만... 그럼에도 불구하고 단순한 용도로는 지나치게 복잡하다) 구분자로 무엇이든 사용할 수 있지만 여기서는 파이프(|) 문자를 사용했다.

재생목록 검색 기능을 위한 백엔드 코드로는 대부분의 사이트와 마찬가지로 mod_ruby로 운영중인 Ruby를 사용했다. 루비는 PHP나 Perl과 같이 개발자들에게 대중적이지 않지만 루비의 유연성, 확장성, 깔끔한 구문은 이상적인 웹 개발 플랫폼이 될 수 있다.

nRowCount = sth.size
strContent += nRowCount.to_s + 10.chr + 10.chr
sth.each do |row|
strContent += row['artist'] + '|' + row['song'] + '|' +
row['album'] + '|' + row['comment'] + 10.chr
end

이 예제에서 sth는 Ruby DBI 모듈에서 수행되는 데이터베이스 쿼리 결과를 갖고 있는 배열이다. sth.each do |row|는 루비 개발자가 아닌 사람들에게는 낯설어 보이지만, 루비가 제공하는 가장 강력한 기능중에 하나인 iterator/block 조합을 사용한 것이다. 여기서는 독자가 추측한 것처럼 다른 언어의 foreach와 상당히 비숫하다.

10.chr는 라인피드 문자다. 이 코드는 로우 카운트 다음에 라인피드 문자를 2개 출력하고, 각 로우에 대해 파이프(|) 문자로 필드를 구분한 문자열을 작성한다. 예제 검색 결과는 다음과 같다.

4

Kush|New Life With Electricity|The Temptation Sessions||
Kush|Plaster Paris (Part Two)|The Temptation Sessions||
Kush|Reverse (Part One)|The Temptation Sessions||
Kush|The Beauty of Machines at Work|The Temptation Sessions||

마지막에 파이프(|) 문자 2개는 comment 컬럼에 대한 빈필드를 가리킨다.

응답 처리하기
서버에서 응답이 돌아올 때 XMLHttpRequest 객체는 responseXML(XML 문서 형태)와 responseText(문자열) 속성을 사용해서 액세스할 수 있다. 여기서는 XML의 복잡한 부분은 생략했기 때문에, 코드는 원래 함수로부터 해당 라인과 함께 반환된 데이터를 처리하고 표시하기 위한 자바스크립트에서 responseText를 전달한다.
eval(strResultFunc + '(xmlHttpReq.responseText;);');
xmlhttpPost 함수에서 전달된 함수 이름은 eval을 사용해서 실행하고, XMLHttpRequest 객체의 매개변수로 responseText를 전달한다.
코드에서 문자열을 배열로 자른후에, 테이블 형태로 보여주기 위해 다양한 방법들을 사용할 수 있다. DOM의 테이블 조작 방법에 대한 대단한 팬이 아닌한 innterHTML을 사용하는 보다 쉬운 접근방법을 택했다.(DOM은 XML과 마찬가지로 내 취향에는 지나치게 장황하다) 재생목록 검색 결과를 처리하기 위해 사용한 자바스크립트는 다음과 같다.

function displayResult(strIn) {

var strContent = '<table>';
var strPrompt = '';
var nRowCount = 0;
var strResponseArray;
var strContentArray;
var objTrack;

// Split row count / main results
strResponseArray = strIn.split('\n\n');

// Get row count, set prompt text
nRowCount = strResponseArray[0];
strPrompt = nRowCount + ' row(s) returned.';

// Actual records are in second array item --
// Split them into the array of DB rows
strContentArray = strResponseArray[1].split('\n');

// Create table rows
for (var i = 0; i < strContentArray.length-1; i++) {
// Create track object for each row
objTrack = new trackListing(strContentArray[i]);
// ----------
// Add code here to create rows --
// with objTrack.arist, objTrack.title, etc.
// ----------
}

strContent += '</table>';
// ----------
// Use innerHTML to display the prompt with rowcount and results
// ----------
}

서버에 있는 루비 코드는 라인피드 문자 2개를 사용해서 실제 데이터가 있는 로우와 로우 카운트를 분리시켰다. 따라서, 이 함수는 전체 결과를 라인피드 문자 2개로 자른 다음에 배열로 사용했다.

배열에서 실제 데이터 로우는 두번째 항목에 있다. 데이터 로우는 로우를 구분하는 라인피드를 1개씩 갖고 있기 때문에 각 항목에서 라인피드 문자 1개를 자르는 것은 페이지에 작성할 배열 데이터를 만드는 것이다. 테이블 내용을 생성하기 위해 코드는 이 배열을 반복하면서 각 로우에 대해 trackListring 객체를 생성하고, HTML 테이블 로우를 만들기 위해 객체를 사용한다. trackListring 함수는 trackListring 객체들을 생성한다.

function trackListing(strEntry) {
var strEntryArray = strEntry.split('|');
this.artist = strEntryArray[0];
this.title = strEntryArray[1];
this.album = strEntryArray[2];
this.label = strEntryArray[3];
}

각 로우에서 파이프로 구분된 문자열을 잘라내고, 각 오트젝트에 대해 데이터베이스의 컬럼 이름에 해당하는 속성을 설정한다. 이 과정을 생략하고 각 컬럼에 대해 이름 대신 숫자를 사용할 수 있지만, 이름을 사용하는 것이 참조하기 보다 쉬운 방법일 것이다.

에러 처리하기
XMLHttpRequest 객체는 굉장히 좋은 장점을 갖고 있다. XMLHttpRequest 객체를 사용하면 자바스크립트에서 브라우저의 페이지를 로딩하지 않고 서버와 직접 커뮤니케이션할 수 있다. 그러나, 이런 장점이 단점이 될 수도 있다. 브라우저 윈도우에 직접 에러를 반환하는 언어를 사용해서 작업하고 있다면, XMLHttpRequest 객체를 사용해서 페이지를 디버깅하는 것이 잘못된 것처럼 느껴질 수 있다. 서버 에러 로그에 쉽게 접근할 수 없는 환경에서 작업한다면 더욱 그럴 것이다.

XMLHttpRequest 객체는 서버에서 반환하는 숫자 코드 값(예, 404, 500, 200)을 갖는 status 속성을 갖고 있다. 또한, 간단한 문자열을 전달하는 statusText 속성도 있다. 서버측 오류(코드 500)가 발생한 경우 메시지는 단순히 "내부 서버 오류(Internal Server Error)"를 갖고 있으며, 사용자에게 보여주기엔 괜찮을지 몰라도 디버깅에 사용하기엔 의미가 없다.

서버에서 반환하는 500 에러 페이지는 에러 종류, 에러가 발생한 라인 번호, 에러에 대한 전체 추적정보와 같은 유용한 디버그 정보들이 포함된다. 불행히도, XMLHttpRequest 객체에서는 이런 내용들이 자바스크립트 문자열 변수 하나에 파묻혀버린다.

500 에러 메시지의 전체 페이지를 가져오고 보다 우아하게 디버깅을 수행하는 것은 간단하다. 이를 위해, XMLHttpRequest를 생성하고 이용하는 이전 함수에 다음 코드를 추가한다.

if (xmlHttpReq.readyState == 4) {
strResponse = xmlHttpReq.responseText;
switch (xmlHttpReq.status) {
// Page-not-found error
case 404:
alert('Error: Not Found. The requested URL ' +
strURL + ' could not be found.');
break;
// Display results in a full window for server-side errors
case 500:
handleErrFullPage(strResponse);
break;
default:
// Call JS alert for custom error or debug messages
if (strResponse.indexOf('Error:') > -1 ||
strResponse.indexOf('Debug:') > -1) {
alert(strResponse);
}
// Call the desired result function
else {
eval(strResultFunc + '(strResponse);');
}
break;
}
}

case 구문은 xmlHttpReq.status 값에 따라 서버로부터의 응답을 다르게 처리한다. 오류가 발생한 경우에는 응답을 오류 처리 함수에 전달하지만, 사용자에게 간단한 에러 메시지를 보여주거나 개발자에게 간단한 디버그 메시지를 출력하기 위해 자바스크립트의 alert를 사용할 수도 있다.( 물론, 이러한 에러들을 div에 멋지게 만든 텍스트로 보여줄 수도 있다)
다음은 500 에러 페이지를 생성하는 함수다.

function handleErrFullPage(strIn) {
var errorWin;

// Create new window and display error
try {
errorWin = window.open('', 'errorWin');
errorWin.document.body.innerHTML = strIn;
}
// If pop-up gets blocked, inform user
catch(e) {
alert('An error occurred, but the error message cannot be' +
' displayed because of your browser\'s pop-up blocker.\n' +
'Please allow pop-ups from this Web site.');
}
}

팝업 차단기가 보편적이기 때문에 try/catch는 중요하다. 사용자가 팝업을 차단하고 있다면, 사용자가 에러를 보고 적절하게 알려줄 수 있게 하기 위한 옵션을 제공해야 한다.

사용자가 팝업을 허용하고 있다면, 서버측 500 오류는 버그를 추적하고 제거하는데 유용한 온갖 종류의 정보를 보여주는 새 창을 보게될 것이다.(현재 창에 에러 메시지를 출력하도록 할수도 있지만, 나의 재생목록 검색은 작은 팝업창이기 때문에 전체 메시지를 제대로 보여줄 수 없다. 대부분의 표준 500 에러 페이지는 전체화면 크기를 요구한다)

참고
XMLHttpRequest 객체는 브라우저에 대한 일반 요청처럼 요청과 함께 쿠키를 전송하기 때문에 서버측 세션 작업을 위해 특별한 작업을 하지 않아도 된다.

다양한 요청을 위해 동일한 객체를 사용할 행운이 별로 없었기 때문에 각 요청에 대해 새로운 XMLHttpRequest 객체를 사용한다. 각 요청에 대해 새로운 객체를 생성하는 것이 복수 요청, 비동기 요청을 수행할 때 문제를 일으키지 않을 것이다.(역주: 하나의 객체를 공유하는 것은 얘기치 않은 병목현상을 일으킬 수 있다)

XMLHttpRequest 객체로 만든 요청은 브라우저 히스토리에 영향을 주지 않는다. 사용자가 브라우저의 "뒤로가기" 버튼을 클릭했을 때 이전 상태로 돌아가는 변화가 일어나지 않기 때문에 사용자가 혼란스러워할 수 있다. 사용자 액션에 해당하는 히스토리 단계가 필요하다면 HTTP 요청을 만들기 위해 iframe을 사용하는 것을 권한다. iframe을 사용하여 HTTP 요청을 하는 것은 각 요청에 대해 히스토리 항목을 생성한다.

결론 및 앞으로의 계획
XMLHttpRequest 객체는 웹 개발자가 보다 응답성있고, 동적인 웹 응용 프로그램을 만드는데 도움을 주는 다양한 기술을 제공하며, 데스크탑 응용 프로그램처럼 수행하게 해준다. 객체를 다루기 위한 formData2QueryString, handleErrFullPage 함수와 같은 몇가지 사전작업만 있으면, 여러분의 개발 프로세스를 크게 변경하지 않고도 AJAX 액션을 이용할 수 있다.

물론, AJAX를 시작했다면 각자의 응용 프로그램에서 AJAX가 가장 적합한 부분을 찾아보는 것이다. 내 경우엔 이미 EpiphanyRadio에서 이전에 재생한 곡 기능에 AJAX를 활용하고 있다. SHOUTcase 서버에 주기적으로 Song History 페이지를 갱신하는 XMLHttpRequest 객체를 가질 수 있다. HTML 페이지 응답에서 곡 목록을 자바스크립트로 가져오고, div에 DHTML로 목록을 작성한다. 이전에 재생된 곡 목록은 브라우저에서 페이지를 재로딩하지 않고 계속해서 업데이트된다.

나는 로그인 페이지에서 완전히 다른 페이지로 재전송하는 대신 원래 로그인 화면에 멋지게 만든 로그인 에러 메시지를 보여주기 위해 AJAX를 청취자 로그인 페이지에도 사용한다. SHOUTcast 사이트 메인페이지를 폴링해서 현재 청취자 숫자를 지속적으로 갱신하고, 똑똑한 정규식을 사용하여 응답에서 숫자들을 가져올 수 있다.

참고자료

'Dev & Mng' 카테고리의 다른 글

Slipstreamed CD  (3) 2005.06.17
A Simpler Ajax Path  (0) 2005.06.16
쓸데없는 윈도우 서비스  (0) 2005.06.12
최대공약수  (0) 2005.06.12

Comment +0

http://www.jiniya.net/wiki/wiki.php/%EC%93%B8%EB%8D%B0%EC%97%86%EB%8A%94%20%EC%9C%88%EB%8F%84%EC%9A%B0%20%EC%84%9C%EB%B9%84%EC%8A%A4

이것만은 꼭 중지해야 하는 서비스
Automatic Updates
중요한 윈도우 업데이트를 다운로드하고 설치할 수 있도록 하는 애플리케이션으로 백그라운드 로딩이 되는 만큼 시스템 리소스를 확보하고 있으므로 크게 사용 용도가 없는 애플리케이션이다.

Distributed Link Tracking Client
네트워크 도메인의 여러 컴퓨터나 일반 컴퓨터에서 NTFS 파일간의 연결을 관리하는 도구로 네트워크가 연결되어 있지 않은 가정용 PC에서는 필요 없는 애플리케이션이다.

Remote Registry
원격 사용자가 이 컴퓨터에서 레지스트리 설정을 수정할 수 있도록 설정하는 애플리케이션으로 원격 지원을 하더라도 컴퓨터에 치명적인 레지스트리 수정은 막을 수 있다.

Task Scheduler
사용자가 컴퓨터에서 자동화된 작업을 구성하고 예약할 수 있는 도구이다. 자동 구성은 간편한 점도 있지만 매일 사용하는 도구가 아니라면 오히려 문제점을 유발하고 이 또한 리소스를 차지하므로 서비스를 중지한다.

Wireless Zero Configuration
802.11 어댑터에 대해 자동 구성을 공급하는 기본적인 도구로, 노트북이 아닌 이상 일반 데스크탑에서는 필요 없는 기능이다.

Alerter
네트워크상에서 사용자와 컴퓨터에 관리용 경고 메시지를 전송하는 기능을 수행한다. 하지만 서버 기능을 사용하지 않는 개인용 홈과 프로를 사용하는 경우 필요 없는 기능 중 하나다.

Computer Browser
네트워크에 있는 모든 컴퓨터의 목록을 업데이트하고 관리하는 기능이다. 일반적인 개인용 PC의 경우 다량의 PC 네트워크에 종속되어 있지 않으므로 불필요한 서비스다.

Cryptographic Services
생소하지만 윈도우 파일의 서명을 확인하는 카탈로그 데이터베이스 서비스를 총괄한다. 쉽게 말해 이 서비스를 비활성화하면 모든 윈도우 프로그램을 설치할 때 인증되지 않은 드라이버라는 메시지를 표시한다. 하지만 사용 빈도가 낮고 시스템 리소스를 차지하므로 중지하는 것이 좋다.

DNS Client
컴퓨터에 대한 도메인 이름 시스템(DNS) 이름을 확인하고 캐시에 보관하는 기능이다. 따라서 서버가 아닌 시스템에서는 유명무실하며, 개인용 PC에서 인터넷의 DNS를 해석하는 데에는 문제가 없다. 단, IPSEC을 사용하는 경우 필요한 경우도 있다.

Error Reporting Service
프로그램 오류가 나면 쉽게 볼 수 있는 응용 프로그램의 오류를 마이크로소프트에 보고한다는 내용을 표시하는 기능이다. 하지만 오히려 귀찮게 여겨지는 경우가 대부분이니 비활성화하고 사용한다.

Help and Support
컴퓨터 초보자에게는 어려운 용어로 가득 차 있는 도움말 및 지원 센터를 총괄하는 기능을 수행한다. 사용 안함 이나 수동으로 변경하고 사용하면, 그만큼 시스템 리소스를 절약할 수 있다.

Messenger
요즘 무작위로 자주 뜨는 팝업 창의 원인이기도 하다. 클라이언트와 서버 사이에 net send 및 경고 서비스 메시지를 전송하는 기능을 한다. 이 서비스는 메신저 서비스와는 아무런 상관이 없으므로 꺼놓고 사용하는 것이 좋다.

?NetMeeting Remote Desktop Sharing
윈도우9X 운영체제부터 인증된 사용자가 넷미팅을 사용해서 원격으로 컴퓨터에 접근할 수 있도록 하는 기능을 가지고 있다. 하지만 익명의 사용자가 자신의 PC를 컨트롤할 수 있는 기능도 갖고 있으므로 꺼놓고 사용하는 것이 시스템 리소스뿐만 아니라 보안에도 도움이 된다.

Portable Media Serial Number
컴퓨터에 연결된 이동성 음악 연주기(미디 기기)의 등록 번호를 복원하는 기능을 갖고 있다. 하지만 PC로 음악을 연주하는 사용자는 거의 없으므로 일반 사용자에게는 유명무실한 기능이기도 하다. 따라서 사용 안 함으로 설정한다.

Application Layer Gateway Service
인터넷 연결 공유 및 인터넷 연결 방화벽에 대한 타사의 플러그 인을 지원할 수 있도록 한다. 하지만 1대의 PC만 독립적으로 사용할 경우 필요 없는 서비스 항목이다. 따라서 사용 안 함으로 설정해도 무방하다.

Background Intelligent Transfer Service
네트워크 대역폭을 보다 효율적으로 사용할 때 이용하는 서비스다. 하지만 개인용 PC에서는 필요 없으므로 사용 안 함으로 설정한다.

COM+ System Application
COM+ 기반의 구성 요소의 설정 및 추적을 관리한다. 통상적으로 사용 안 함으로 설정해도 무방하나 사용자에 따라 System Event Notification 서비스를 사용하는 경우 반드시 필요하므로 자신의 환경을 살펴봐야 한다.

DHCP Client
IP 주소와 DNS 이름을 DHCP 서버에 등록하거나 DHCP 서버로부터 동적으로 IP 주소를 가져오는 기능을 수행한다. 따라서 ADSL에 연결되어 있는 PC에서는 꼭 필요한 기능 중 하나다. 하지만 단독으로 시스템을 수행하면서 고정 IP를 사용하는 경우 중지해도 무방하다.

Distributed Link Tracking Client
소규모 네트워크 도메인의 여러 컴퓨터나 일반 컴퓨터에서 NTFS 파일간의 연결을 관리하는 기능이다. 하지만 개인용PC 환경에서 NTFS 파일 형식을 사용하지 않는 경우에는 필요 없는 항목이다.

Fast User Switching Compatibility
PC를 혼자 사용할 경우에는 유명무실하다. 따라서 필요 없는 기능이다.

Fax Service
컴퓨터로 팩스를 주고받을 수 있게 하는 것이다. 기본적으로 표시되지 않지만 원본 윈도우XP CD에서 설치하면 표시된다. 기능이 미약해 설치하지 않거나 필요에 의해 설치했다고 해도 서비스를 사용 안 함으로 두면 된다.

FTP Publishing Service
윈도우XP에서 FTP 서비스를 운영할 수 있게 하는 기능을 총괄한다. 이 서비스를 사용하기 위해서는 원본 CD에서 설치해야 한다. 하지만 윈도우XP 기반 서버가 아닌 개인용 PC의 경우에는 별도의 프로그램이 더욱 좋은 기능을 제공하므로 필요 없는 기능 중 하나다.

IMAPI CD-Burning COM Service
윈도우XP에 기본적으로 포함된 IMAPI COM 인터페이스를 사용하여 CD 굽기를 관리한다. 기본 프로그램 이외에 몇몇 프로그램에서는 필요하지만, 네로 버닝 프로그램을 사용한다면 필요 없는 서비스 항목이다. CD 굽기 프로그램을 사용하는 경우에는 불필요한 서비스이다.

Indexing Service
로컬 및 원격 컴퓨터에 있는 파일의 내용 및 속성을 인덱싱하며 Query 언어를 통해 파일을 빠르게 접근하는 기능을 수행한다. 편한 만큼 윈도우XP에서 가장 큰 리소스를 차지한다. 하지만 특별한 기능을 제외하고는 개인용 PC에서는 유명무실하므로 비활성화시키면 시스템 리소스 확보에 도움을 준다.

Net Login
도메인 제어기에 로그인하는 데 사용되는 서비스 항목이다. 따라서 일반 사용자에게는 필요 없는 기능이기도 하다. 기본값은 수동으로 표시되어 있는데 사용 안 함으로 표시하는 것이 좋다.

NLA(Network Location Awareness)
네트워크 구성 및 위치 정보를 수집하고 저장하는 기능을 가지고 있다. 사용 안 함으로 해도 무방하나 ADSL 인터넷 연결 공유 서비스를 사용할 경우에는 자동으로 작동하도록 설정해야 한다.

Print Spooler
인쇄 과정에 있는 스풀링을 관리하는 서비스다. 프린터가 있는 경우에는 반드시 필요하나 프린터가 없는 PC에서는 사용 안 함으로 설정하면 리소스 확보에 오히려 도움이 된다.

Protected Storage
개인용 PC에서 개인 키 같은 중요한 데이터를 안전한 곳에 저장하는 기능을 가지고 있다. 일반적으로 웹 브라우저에서 문자 입력 자동 완성을 저장하는 데 주로 사용된다. 하지만 오히려 번거로운 경우가 있으므로 비활성화한다.

절대 중지하면 안 되는 서비스항목
Event Log
이벤트 뷰어에 있는 구성 요소와 윈도우 기반의 프로그램에서 만든 이벤트 메시지를 기록하도록 설정한 것이다. 기본적으로 중지할 수 없으며, 시스템 운영상 응용 프로그램의 문제점을 파악하는 데 도움을 준다.

Human Interface Device Access
시스템의 키보드와 원격 제어, 기타 멀티미디어 장치에서 사전에 정의된 버튼을 사용할 수 있도록 하는 기능을 수행한다. 근래 들어 많은 키보드 등이 단축키를 지원하므로 되도록 초기값인 수동으로 그대로 놔두는 것이 현명하다.

IIS Admin
윈도우XP에서 인터넷 서비스인 웹 서버, FTP 서버를 관리하는 기능을 수행한다. 웹 서버나 FTP 서버를 사용하기 위해서는 반드시 필요한 기능이므로 기본값을 변경하면 안 된다. (웹서버 및 FTP서버로 사용하지 않는다면 필요 없습니다)

Internet Connection Firewall and Internet Connection Sharing
인터넷상에서 방화벽 기능을 사용하는 서비스로 해킹의 염려가 없는 방화벽 하단에 있는 PC는 필요 없는 기능이기도 하다. 하지만 근래 들어 해킹에 대한 우려가 부각되므로 기본값을 그대로 두는 편이 보안상 이롭다.

Logical Disk Manager
새 하드디스크 드라이브를 검색하고 모니터링하며 디스크 볼륨 정보를 로컬 디스크 관리자 관리 서비스로 보내는 기능을 수행한다. 따라서 하드디스크 관리를 위해서는 필수 항목이다. 기본값을 그대로 두는 것이 좋다.

Plug and Play
운영체제가 새로운 하드웨어의 변경 내용을 인식하고 자동으로 적용하는 기능을 가지고 있다. 따라서 반드시 사용해야 하는 서비스이다. 기본값인 자동으로 둔다

Tools
이 모든 일들을 자동화 해주는 도구인 mserv.exe를 소개한다. 이 도구는 간단하게 불필요한 서비스를 한방에 제거해주는 강력한 기능을 가지고 있다. 프로그램 사용법은 아래 그림을 참고하자.

'Dev & Mng' 카테고리의 다른 글

A Simpler Ajax Path  (0) 2005.06.16
쓸데없는 윈도우 서비스  (0) 2005.06.12
최대공약수  (0) 2005.06.12
Uploading and Downloading Pictures to from a SQL Server  (0) 2005.06.10

Comment +0

최대공약수

Dev & Mng2005.06.12 11:47
http://www.jiniya.net/wiki/wiki.php/%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98


Algorithm in C
int GCD(int x, int y)
{
x = abs(x);
y = abs(y);

while(n > 0)
{
n = x % y;

x = y;
y = n;
}

return x;
}


Written by assembly
include irvine32.inc

CalcGCD PROTO x:DWORD, y:DWORD ; CalcGCD 프로토 타입
ABS PROTO x:DWORD ; ABS 프로토 타입

.data
input_msg byte "Input num ==> ", 0 ; 입력 메시지
res_msg1 byte " GCD ", 0 ; 결과 출력 메시지 1
res_msg2 byte " = ", 0 ; 결과 출력 메시지 2

val sdword ?, ? ; 사용자가 입력한 값 배열

.code
main PROC

mov ecx, 2 ; 정수 두개를 입력 받음
mov esi, 0 ; esi는 val의 오프셋. 0으로 초기화

L:
mov edx, offset input_msg
call WriteString ; 입력 요청 메시지 출력
call ReadInt ; 사용자에게 정수 입력
mov val[esi], eax ; val에 저장
add esi, 4 ; esi를 다음 오프셋으로 증가

loop L ; 푸프 반복

mov eax, val[0]
call WriteInt ; val1 출력

mov edx, offset res_msg1
call WriteString ; GCD 출력

mov eax, val[4]
call WriteInt ; val2 출력

mov edx, offset res_msg2
call WriteString ; = 출력

INVOKE CalcGCD, val[0], val[4] ; GCD 계산
call WriteInt ; 계산 결과 출력

exit ; 프로그램 종료
main ENDP

ABS PROC, ; ABS 함수
x:DWORD

mov eax, x ; eax를 x로 초기화
cmp x, 0 ; x를 0과 비교
jge Positive ; 0이상인 경우 Positive로 점프

neg eax ; 0보다 작은 경우 2의 보수로 반전

Positive:
ret
ABS ENDP

CalcGCD PROC, ; GCD 계산 함수
x:DWORD,
y:DWORD

LOCAL n:DWORD ; 지역 변수

INVOKE ABS, x
mov x, eax ; x = ABS(x)

INVOKE ABS, y
mov y, eax ; y = ABS(y)

L:
mov edx, 0
mov eax, x
mov ebx, y
div ebx ; x / y

mov eax, y
mov x, eax ; x = y

mov y, edx ; y = x % y

cmp edx, 0 ; 나머지가 0인지 비교
ja L ; 0보다 크면 루프 반복

mov eax, x ; eax에 x 대입
ret
CalcGCD ENDP

END main

'Dev & Mng' 카테고리의 다른 글

쓸데없는 윈도우 서비스  (0) 2005.06.12
최대공약수  (0) 2005.06.12
Uploading and Downloading Pictures to from a SQL Server  (0) 2005.06.10
테이블은 이제 그만 쉬어야 할 때.  (0) 2005.06.10

Comment +0

Uploading and Downloading Pictures to from a SQL Server



MS-SQL Server에 이미지를 저장하고 불러오는 방법을 설명해 놓은 문서임.
전에 어디선가(아마 Devpia.com 일듯) 받아둔것..
먼가 하고 받았는데.. 이미 알고 있던거 였..;;

하드 정리 하다가 있길래 여기 올려둠..

'Dev & Mng' 카테고리의 다른 글

최대공약수  (0) 2005.06.12
Uploading and Downloading Pictures to from a SQL Server  (0) 2005.06.10
테이블은 이제 그만 쉬어야 할 때.  (0) 2005.06.10
매일 한가지씩 도전하라.  (2) 2005.06.07

Comment +0

테이블은 이제 그만 쉬어야 할 때..

http://ilmol.com/wp/2005/06/09/25/

맞는 말이다.
홈피블로그도 아직은 테이블을 사용 하고 있지만 시간이 되는대로.. 그리고 앞으로 만드는 것들은 W3C 표준을 따라 만들려고 노력중이다.

Comment +0