Search Results for '프로그래밍'


1206 posts related to '프로그래밍'

  1. 2011/11/14 리눅스 상에서 오라클 설치
  2. 2011/11/14 Windows 개인사용자를 위한 MS Security Essentials
  3. 2011/11/14 윈도우7 원격제어 간단하게하기
  4. 2011/11/14 Windows Server 2008 R2로 업그레이드해야 하는 10가지 이유
  5. 2011/11/09 Microsoft® SQL Server® 2008 Express with Advanced Services 입니다.
  6. 2011/11/09 asp용 JSON 라이브러리
  7. 2011/11/09 [ASP] imagemagick 사용법 - 바탕 그림에 글자 쓰기
  8. 2011/11/09 입력한 내용에 맞는 체크박스만 보여주기
  9. 2011/11/09 jQuery each 거꾸로 반환하기
  10. 2011/11/09 실시간 검색어 순위 순서대로 보여주기 1
  11. 2011/11/09 jquery를 이용한 오른쪽 퀵메뉴
  12. 2011/11/03 웹표준에 관한 타입 선언
  13. 2011/11/03 textarea 글자수 카운트 1
  14. 2011/11/03 모바일로 접속했을때는 모바일 전용 페이지로 리다이렉트 시키거가
  15. 2011/11/01 JQuery - 제이쿼리 1.7 버전이 릴리즈 되었네요
  16. 2011/10/31 엑셀 다운시 스타일,함수 적용하는 방법
  17. 2011/10/27 블로그 상위노출 기준과 블로그 상위노출 방법
  18. 2011/10/24 토렌트 검색기 소스
  19. 2011/10/23 URL에서 특수문자 오류나는 것 처리하기(escape, unescape)
  20. 2011/10/23 khtml 이용하여 URL 로 부터 스크린샷 얻어 저장하기
  21. 2011/10/23 [Win2003]CDO.Message.1 오류 80070005 액세스가 거부되었습니다.
  22. 2011/10/23 [정보] Fake 웹 자동화 프로그램
  23. 2011/10/21 ASP용 로그 기록 클래스
  24. 2011/10/21 GeoIP 국가별 IP체크
  25. 2011/10/21 Classic ASP용 Database Object
  26. 2011/10/21 jQuery plugin, Pager 입니다 .
  27. 2011/10/21 썸네일 생성 dll (codeproject에서 다운받은놈)
  28. 2011/10/21 실시간 스팸차단리스트(RBL) 이용방법
  29. 2011/10/21 [KISA] 이메일 발송포트(25번) 차단 시행 안내
  30. 2011/10/21 호스트 파일 관리 프로그램

ImageMagick는 방대한 옵션을 가진 사용하기 까다로운 도구이다.

그 중에서도 한글 표현을 위해서는 좀 더 까다로운 과정을 거쳐야 한다.


1. 일단 ImageMagick을 설치하자.

http://www.imagemagick.org/script/binary-releases.php#windows

내려 받아서 서버에 설치하면 된다.

물론 ASP니까 VBScript!용 OLE 어쩌구를 선택하고 설치한다.

사용자 삽입 이미지

2. 한글을 표현하려면 두 가지에 주의해야 한다.

-font와 -encoding (-encoding은 중요하지 않다. 변경)

예제)

%@Language="VBScript!" CODEPAGE="65001"%

<%option explicit%>

<%

response.charset="utf-8"

session.codepage="65001"

response.codepage="65001"

Response.ContentType="text/html;charset=UTF-8"

Dim objImg

Set objImg = Server.CreateObject("ImageMagickObject.MagickImage.1")

objImg.Convert "-background=lightblue","-fill=blue","-font=Gulim-&-GulimChe-&-Dotum-&-DotumChe","-encoding=Unicode","-pointsize=36","-size=320x","caption:한글 Test입니다.",server.mappath("test.jpg")

Set objImg = Nothing

%>

<img src=test.jpg>


흔히 gulim.ttf 정도를 쓰면 폰트 파일이 지정이 되는데 2008부터는 폰트 파일 이름이 달라서 고생 좀 했다.

서버 시스템의 폰트 이름을 확인하려면 아래 명령어를 실행하면 된다.

설치할 때 Path를 잡아 주지 않았다면 설치된 폴더에서 실행하자.

convert -list font | more

처음에는 자체 포스트스크립트 폰트(한글 미지원)가 나오고, 이후 시스템에 설치되어 있는 폰트들이 나온다.

-family로 지정해서 사용하는 방법은 실패했다.

-font 방법이 성공해서 더 이상 실험해 보지 않는다.


-encoding이 unicode일 때 이미지 생성할 때 1분 12초가 걸렸고, wansung일 때 1분 8초가 걸렸다.

이 정도는 유의미한 차이가 없다고 볼 수 있고, 둘 다 느리기는 마찬가지다.

참고로, 예제의 짧은 문장이 아니라 200자가 넘는 상당히 긴 문장으로 실험을 했다.


Malgun-Gothic으로 -font를 변경하니 1초만에 결과물이 나온다.

예제의 Gulim-&-GulimChe-&-Dotum-&-DotumChe를 Malgun-Gothic으로 바꿔서 사용하시길.

2008에서 실험한 결과임을 상기하고 2003 이하에서는 각자 실험해서 사용하시길.


2011/11/19 11:36 2011/11/19 11:36

리눅스 상에서 오라클 설치

# centOS 설치

- centOS 설치시에 xwindow 설치

# 패키지 설치

# yum -y install binutils compat-db control-center gcc gcc-c++ \
glibc glibc-common gnome-libs libstdc++ libstdc++-devel make \
pdksh sysstat xscreensaver compat-libstdc++-33 libaio-devel \
unixODBC unixODBC-devel

# 오라클 계정 설정

# groupadd dba

# useradd -d /oracle -g dba oracle

# passwd oracle

# chmod 755 -R /oracle

# chown -R oracle.dba /oracle

# /etc/sysctl.conf 파일 수정 및 적용

# vi /etc/sysctl.conf

-> 아래 내용 추가

### oracle ###
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576

# /sbin/sysctl -p

-> 위 명령어로 /etc/sysctl.conf 파일에서 추가한 내용 적용

# /etc/security/limits.conf 파일에서 실행되는 프로세스 수 제한

# vi /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

# /etc/pam.d/login 파일에 /lib/security/pam_limits.so 관련 내용 추가

# vi /etc/pam.d/login

-> 맨 아래 줄에 아래 내용 추가

session required /lib/security/pam_limits.so

# oracle 계정의 .bash_profile에서 환경 변수 수정

# vi /oracle/.bash_profile

export ORACLE_BASE=/oracle
export ORACLE_SID=ORCL
export ORACLE_HOME=$ORACLE_BASE/product
export PATH=$PATH:$ORACLE_HOME/bin
export DISPLAY=:0.

# 오라클 계정으로 su 후 파일 압축풀기

# su oracle

# unzip linux_11gR2_database_1of2.zip

# unzip linux_11gR2_database_2of2.zip

# chown -R oracle.dba database

# 압축을 풀면 database라는 디렉토리가 생성되고 runInstaller를 실행한다

- database 디렉토리는 ORACLE_HOME에 있어야 한다

# startx

- Xwindows로 부팅이 되면 터미널에서 runInstaller 파일을 실행

# ./runInstaller

# 오라클 자동 시작 설정

- /etc/oratab 파일에서 맨 아래 내용의 N을 Y로 변경

orcl:/oracle/11g:Y

# 리스너 파일 링크

# ln -s /oracle/product/bin/lsnrctl /usr/bin/lsnrctl

# 오라클 자동실행 스크립트

#!/bin/bash
ORA_HOME="/oracle/product"
ORA_OWNER="oracle"

if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle Startup: failed"
exit 1
fi

case "$1" in
start)
echo -n "Oracle Start: "
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle
echo "OK"
;;
stop)
echo -n "ORACLE Shutdown: "
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle
echo "OK"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
esac
exit 0

2011/11/14 16:25 2011/11/14 16:25
Windows OS 를 사용하면서 바이러스에 고생을 하는것은 누구나 한두번을 경험하게 된다.
그래서 백신을 찾게 되는데, 가격에 부담이 되고 무료백신을 사용하자니 믿음이 가지 않고 고민이 된다.

이럴때 Microsoft 사에서 제공하는 MS Security Essentials 를 사용해 보는것도 좋은 대안이다.
일단 Windows 정품사용자에게 제공되고 OS 제작사에서 제공해서 믿을만 하고
결정적으로 무료 제공이다.

아래는 MSSE(Microsoft Security Essentials) 홈페이지에서 제공하는 내용이다.

=========================================================================================================

Microsoft Security Essentials 정보

Microsoft Security Essentials는 바이러스, 스파이웨어 및 기타 악성 소프트웨어로부터 PC를 안전하게 지키는 실시간 보호를 제공합니다.

Microsoft Security Essentials는 설치가 간단하고, 사용하기 편리하며, 최신 기술로 PC 보호를 유지하는 Microsoft의 무료* 소프트웨어입니다. 녹색으로 표시되는 한 PC는 안전합니다.

Microsoft Security Essentials는 백그라운드에서 조용히 효율적으로 실행되므로 중단이나 긴 대기 시간 없이 Windows 기반 PC를 사용할 수 있습니다.

Microsoft 맬웨어 보호 센터에서 자세한 내용 보기

Microsoft Security Essentials가 보호할 수 있는 모든 신종 위협 요소에 대한 정보, 정의 및 분석을 Microsoft 맬웨어 보호 센터 (영어로만 제공)에서 확인하세요.

기업에 보안이 필요하신가요?
Microsoft Forefront Client Security로 컴퓨터 보호

*Microsoft Security Essentials를 설치하려면 PC가 Windows 정품을 실행하고 있어야 합니다. 정품에 대한 자세한 내용
===========================================================================================================

개인적으로 사용하고 있는데 업데이트도 방법도 윈도우 업데이트 방법과 유사해서 사용도 편리하다.
그리고 보안 룰에 대한 제공도 꾸준히 업데이트되는데 지금까지 보안때문에 문제된적이 없었다.

Windows 를 사용하고 기존백신에 불신을 가지신 분들은 한번 사용해 볼만하다.

홈페이지 링크
http://www.microsoft.com/security_essentials/default.aspx

2011/11/14 16:23 2011/11/14 16:23

현재 네이트온으로는 윈도우7의 원격지원을 행할수가없다(단, 사용자 계정 컨트롤을 해제하면 가능하다. 해제후 재부팅 사용후 원래대로 돌려놓고 재부팅의 과정은 불가피하다)
윈도우7은 별로 복잡하지 않는 방법으로도 원격 지원을 받을수 있다.(32bit/64bit 모두)
Xp에서 윈도우7. 윈도우7 에서 윈도우7 원격제어 모두 가능하다.

1. 제어판 > 모든 제어판 항목 > 문제해결 로 들어가서 좌측에 "친구에게 도움요청" 클릭
- 제어판에서 보기 기준 을 작은아이콘 으로 하면 문제해결 아이콘을 바로 클릭할수있고, 보기기준범주 로 한경우는 시스템보안 범주에 문제 찾기 및 해결 을 클릭하면 좌측으로 친구에게 도움요청 링크가 보인다.

사용자 삽입 이미지


2. 새로운 사용자에게 도움요청 클릭
- 다른 사용자의 도움요청에 응할 경우라면 하단에 원격지원으로 다른 사용지 지원 을 클릭하여 받은 도움요청 파일과 임호를 넣거나 간단 연결을 이용하면 제어가능

사용자 삽입 이미지

3. 새로운 사용자에게 도움요청 클릭시 도움 요청 종류가 총 3가지가 뜬다.
- 이 도움요청을 파일로저장 : 파일로 저장하고 개인 메일이나, 메신져등으로 전송. (지금은 이 방법으로 진행하여 설명하기로 한다)
- 전자메일을 사용하여 도움요청 : 도움요청파일을 바로 메일로 전송(해당 컴퓨터에 메일 클라이언트가 설정 되어있어야 한다)
- 간단한 연결 사용 : 도와주는 상대방도 간단 연결을 사용할수있다면 이메뉴를 클릭.

사용자 삽입 이미지


4. 이 도움 요청을 파일로 저장 : 찾기 편한 곳으로 선택하여 저장한다. ( 필자는 바탕화면에 저장)
- 초대.msrcIncident 이라는 파일이 저장된다.

사용자 삽입 이미지


5. 해당 파일을 저장하면 바로 윈도우 원격지원 세션창이 뜨는데 이창을 닫으면 원격제어가 종료 되고, 그 첫화면으로 도우미에게 도움 요충 파일과 암호를 알려주세요 라는 문구와 함게 암호가 나온다.

사용자 삽입 이미지


6. 저장한 파일을 전송하고 제어 를 해줄 도우미에게 암호를 알려준다.
- 도우미는 해당 파일을 더블릭하고 암호를 입력하면 제어를 할수있다.
- 원격제어 창에서 채트 라는 메뉴를 클릭하면 채팅 도 가능하다.(채팅/파일보내기 모두 가능하다.)

7. 파일을 받은 도우미는 받은 파일을 더블클릭하면 암호 입력창을 볼수있고 암호를 입력시 원격제어 요청 상태가 되고, 도움을 요청한 사용자가 해당 요청을 허가하면 바로 원격제어가 가능해진다.
2011/11/14 16:22 2011/11/14 16:22

Windows Server 2008 R2로 업그레이드해야 하는 10가지 이유

기업이 운영 비용을 줄이고 업무 효율성을 높일 수 있도록 개발된Windows Server 2008 R2는 기업 전반의
다양한 자원들에 대해 보다 강화된 관리 능력을 제공할 것입니다. 또한 전력 소비를 줄이고 경비를 절감함으로
써 보다 높은 에너지 효율과 성능을 제공하도록 설계되었습니다. 더불어 향상된 지점 기능과 새로운 원격 액세
스 능력, 유연한 서버 관리 기능을 제공하며, 클라이언트와 서버 컴퓨터에 대한 마이크로소프트의 가상화 전략
을 확대합니다.

1. 강력한 하드웨어와 확장 기능들
Windows Server 2008 R2는Windows Server 2008과 동일한 하드웨어 기반에서 보다 잘 운영되도록 설계되었
고, R2는 64비트 아키텍처로 완벽하게 이동할 수 있는 최초의Windows Server 운영 체제입니다
먼저 CPU 지원 능력을 확대하여 고객이 논리 프로세서를 최대 256개까지 운영할 수 있게 해 줍니다.
또한 SLAT(Second Level Translation)을 지원하기 때문에 R2는 최신AMD CPU에서 발견할 수 있는
Enhanced Page Tables 기능과Intel의 최신 프로세스에서 제공되는 유사한Nested Page Tables
기능도 사용할 수 있습니다.
R2 서버가 훨씬 강화된 메모리 관리 능력을 제공.
Windows Server 2008 R2의 Hyper-V는 호스트 컴퓨터에서 최대 64개까지 논리 CPU에 액세스할 수
있습니다.
이러한 능력은 새로운 멀티코어 시스템의 이점을 활용할 수 있게 해 주며, 이는 동시에 각 호스트당
가상 컴퓨터 통합 비율이 보다 향상되었음을 의미하기도 합니다.
2. 전력 소비 감소
서버 상에 있는 프로세서들의 사용 수준을 모니터링하고 그 결과에 맞춰 작업에 필요한 수준으로 전력을 제
한하도록 프로세서의 성능 상태를 수시로 조정하였습니다. Windows Server 2008 R2는 서버와 서버 CPU
전력 소비량을 관리하고 모니터링하는 보다 정밀한 기능을 추가하고 이런 기능을 새로운 전원 기반 그룹
정책 설정을 통해 데스크톱에까지 확장함으로써 절전 기능을 더욱 향상시켰습니다.

3. Windows Server 2008 R2의Hyper-V™

Windows Server 2008 R2는 마이크로소프트의 가상화 기술인 Hyper-V™에 대한 예상 업데이트도 감안하였
습니다.
새로운 Hyper-V™는 기존의 가상 컴퓨터 관리 능력을 증진시키고 특히 서버 마이그레이션과 관련해 구체적
인 IT 문제들을 해결할 수 있도록 설계되었습니다.
Hyper-V™는 Windows Server 2008 R2의 Live Migration을 위해 활성화된 기능입니다. Hyper-V version 1.0
을 통해 Windows Server 2008은Quick Migration이 가능했고, 이는 몇 초가 안 되는 중단 시간 동안 실제 호
스트들 간에 신속하게 가상 컴퓨터들을 이동할 있게 해 주었습니다. 그러나 이러한 수 초의 시간에도 특정한
상황에서는 충분히 문제가 발생할 수 있습니다. 가상 컴퓨터를 호스트하는 서버로 클라이언트를 연결하는
상황이 그러한 예입니다. 그러나 Live Migration 기능을 활용하면 실제 대상 간의 이동이 수 밀리초 안에 이루
어집니다. 이는 마이그레이션 작업이 접속 중인 사용자들에게는 느껴지지 않게 되었다는 것을 의미합니다.
Hyper-V를 위해 System Center Virtual Machine Manager를 설치한 고객은 새로운 VM 기반 성능 및 자원
최적화 기능과 장애 조치 클러스터를 위해 업데이트된 지원 기능들을 비롯해, 추가적인 관리 및 오케스트레이
션 기능을 활용할 수 있을 것입니다.
새로운 Hyper-V™는 또한 중요한 성능 개선 내용들도 선보입니다. 앞서 언급한대로 최대 64개까지 논리 프로
세서를 활용할 수 있으며 SLAT(Second Level Translation)을 위한 호스트 지원 기능을 통해 해당 CPU 성능
을 보강할 수 있습니다. 더불어 VM이 재부팅 이나 VHD로부터의 부팅 없이 바로 저장소를 추가, 제거할 수 있
게 되었습니다.

4. VDI를 통한 데스크톱 비용 절감

Windows Server 2008 R2는 향상된 VDI(Virtual Desktop Integration) 기능을 제공하여 터미널 서비스 기능을
확장함으로써 특정 비즈니스 프로그램을 직원들의 원격지 데스크톱으로 전달할 수 있게 해 줍니다. VDI를 사
용하면 원격 데스크톱 서비스가 컴퓨터에 전송하는 프로그램들을 로컬 컴퓨터의 시작 메뉴에서 해당 기기에
설치되어 있는 프로그램과 함께 언제든 바로 사용할 수 있습니다. 이는 데스크톱 가상화 능력을 향상시키고
보다 뛰어난 응용 프로그램 가상화 기능을 제공합니다.
데스크톱 가상화는 강화된 개별 관리 기능, Windows 7의 가상화 데스크톱과 응용 프로그램의 거의 보이지
않는 통합 능력, 보다 나은 오디오 및 그래픽 성능, 뛰어난 웹 액세스 업데이트 기능 등을 비롯해 다양한 기능
들을 활용할 수 있게 해 줄 것입니다.
VDI는 가상화된 자원들을 보다 효율적으로 사용할 수 있게 해 주고 새롭고 강력한 가상화 관리 기능들은 물론
로컬에 있는 주변 하드웨어 장치들과의 보다 나은 통합 능력을 제공합니다.

5. 보다 효율적이면서도 더욱 쉬워진 서버 관리 기능

• 향상된 데이터센터 전력 소비 및 관리 능력
• 원격으로 설치 가능한 Server Manager(서버 관리자)를 비롯한 향상된 원격 관리 기능
• 업데이트되고 보다 간편해진 Active Directory Domain Services 및 Active Directory Federated Services
를 통한 향상된 ID 관리 기능

6. 어디서든 가능한 원격 액세스

Windows Server 2008 R2는DirectAccess라고 불리는 새로운 유형의 연결 기능을 소개하고 있습니다. 이는
원격 사용자들이 일반적 인 VPN 연결과 클라이언트 소프트웨어를 요구하지 않고 유연하게 기업 리소스에
액세스할 수 있게 해 주는 강력한 기능입니다.
Windows Server 2008에 포함된 기술들을 사용하여 마이크로소프트는 관리자들이 기본적인 DirectAccess
연결이 가능하도록 Windows 7 클라이언트와 R2 모두에 SSTP와 IPv6를 구성하고, 관리 정책 및 NAP을 비롯
한 추가 R2 관리 및 보안 도구들을 활용해 해당 연결을 확장할 수 있는 간편한 관리 마법사를 추가하였습니
다.

7. 향상된 지점 성능 및 관리 기능

많은 지점 IT 아키텍처가 상대적으로 낮은 대역폭을 가지고 있습니다. 느린 WAN 연결은 본사 콘텐츠에 액세
스하기 위해 대기해야 하는 지점 직원들의 업무 생산성에 영향을 미치고, 지점 대역폭 할당을 위한 비용은 전
체 기업 IT 비용의 33%나 되는 많은 부분을 차지하기도 합니다. 이러한 문제를 해결하기 위해Windows
Server 2008 R2는BranchCache™라고 불리는 기능을 도입하였는데, 이는 WAN 사용률을 줄이고 네트워크 응
용 프로그램의 응답 능력을 향상시킵니다.
BranchCache™로 인해, 이제 기업 네트워크 상에 존재하는 데이터에 대한 액세스를 요청한 클라이언트는 만
약 해당 파일이 전에 요청된 적이 있었을 경우 로컬(지점) 네트워크 상에 존재하는 해당 파일로 연결됩니다.
파일이 로컬에 저장되어 있다면 이제 클라이언트는 바로 고속 액세스가 가능해진 것입니다. 그리고 그러한 파
일들은 보다 큰 지점을 위한BranchCache™ 서버나 로컬 Windows 7 PC 상에 저장 가능합니다.

8. SMB에 대한 간편한 관리

Windows Server 2008 R2에서 마이크로소프트는 SMB와 미드마켓(mid-marke) 고객에 보다 집중하고 있습
니다. 이러한 관심은 해당 고객들에게 Small Business Server에서 Windows Essential Business Server 및
현재의 Windows Server 2008 Standard에 이르기까지 마이크로소프트 제품에 대한 다양한 선택 기회를 제공
합니다. 모든 SKU는 새로운 관리 도구들을 갖추게 되어 SMB IT 전문가들이 보다 쉽게 IT 환경을 운영해 갈
수 있게 해 줍니다.
Active Directory의 새 Active Directory Administration Center가 그러한 예입니다. 모든 이종의 관리 GUI들이
이제 하나의 인터페이스 안에서 호스트되고, 모두PowerShell을 기반으로 합니다. 또한Best Practice
Analyzers도 빼놓을 수 없는데, 마이크로소프트는 이를 모든 서버 역할에 확장하여 모든 서버 구성이 최신 기
술 정보에 부합하게 그 구성을 유지할 수 있도록 하였습니다.
끝으로 매우 중요한 새Windows Server Backup 유틸리티 기능이 있습니다. 이 업데이트된 백업 응용 프로그
램은 시스템 상태 운영 지원 등을 비롯해 백업 작업을 설계하는 데 필요한 보다 세분화된 지원 기능들을 포함
하도록 업그레이드 되었습니다. 또한 보다 빠른 운영 속도와 보다 적은 디스크 공간 활용을 위해 최적화되었
습니다.

9. 가장 강력한 웹 및 응용 프로그램 서버

Windows Server 2008 R2에는 이를 최고의 Windows Server 응용 프로그램 플랫폼으로 만들 다양한 업데이
트들이 포함되어 있습니다
이 가운데서 가장 중요한 것 중 하나가 새로운 Internet Information Services 7.5 (IIS 7.5)입니다.
업데이트된 웹 서버에는 확장된 IIS Manager를 통해 관리 작업을 간소화하는 기능들이 포함되어 있으며, 이
는 IIS PowerShell Provider를 구현하고 Server Core에서 .NET을 활용할 수 있게 해 줍니다. IIS 7.5는 또한
구성 로깅 및 전용 Best Practice Analyzer등을 비롯한 새로운 지원 및 문제 해결 기능들을 통합합니다. 끝으
로 마이크로소프트는 URLScan 3.0 (현재 Request Filter Module로 알려져 있음)을 비롯해 Windows Server
2008과 관련해 자주 사용되는 몇 개의 선택적인 확장 기능들을 통합하였 습니다.

10. 저장소가 아닌 데이터 관리

저장소 관리는 단순한 디스크 관리가 아닙니다. IDC*에 따르면 저장소 볼륨은 2008년에서 2012년 사이에 연
성장률 51%를 기록하며 갈수록 늘어날 것입니다. 경쟁력을 유지하기 위해 기업은 디스크 관리가 아닌 데이터
관리를 시작해야 합니다. Windows Server 2008 R2는 IT 관리자들에게 새로운 FCI (File Classification
Infrastructure)와 함께 이러한 이니셔티브를 위한 도구들을 제공합 니다. 이 새로운 기능은 기존의 공유 파일
아키텍처에 확장 가능한 자동 분류 메커니즘을 구현합니다. 이로 인해 IT 관리자들은 전체적인 사용자 지정
분류 내용을 기준으로 특정 파일로 특정 작업을 연결할 수 있습니다. FCI는 또한 파트너에게도 확장 가능한
데 이는 Windows Server 2008 R2 사용자들이 머지 않아 ISV들이 제공할 FCI에서도 추가적인 기능들을 기대
할 수 있다는 뜻입니다.

2011/11/14 16:20 2011/11/14 16:20

아티보드로 홈페이지를 제작하면서 SQL 서버에 접속해서 작업을 할 경우가 자주 있는데요

퀴리분석기로 들어가서 모든작업이 가능하긴 하지만 가끔은 EM (엔터프라이즈관리자) 도 사용해야할 경우가 있지요

이때 편리한 프로그램을 소개합니다
Microsoft® SQL Server® 2008 Express with Advanced Services 라는 것으로 인터페이스는 SQL2008 를
닮았으며 SQL 2008 처럼 퀴리분석기과 EM 이 같이 합쳐진듯한 느낌의 인터페이스 입니다

무료로 마이크로소프트에서 배포하는 프로그램입니다


Microsoft SQL Server 2008 Express with Tools는 사용이 용이한 SQL Server Express 데이터 플랫폼의 무료 버전입니다. 이 버전에는 웹 또는 로컬 데스크톱용으로 강력한 데이터 기반 응용 프로그램을 더욱 손쉽게 개발할 수 있는 그래픽 관리 도구가 포함되어 있습니다.

개요

Microsoft SQL Server 2008 Express with Tools는 그래픽 관리 도구인 SQL Server Management Studio (SMSS) Express가 포함되어 있는 사용이 용이한 SQL Server Express의 무료 버전입니다. SQL Server 2008 Express는 다양한 기능, 데이터 보호 및 빠른 성능을 제공하며 소규모 서버 응용 프로그램과 로컬 데이터 저장소에 적합합니다.

응용 프로그램의 포함된 일부로 무료 다운로드, 배포 및 재배포가 가능한 SQL Server Express with Tools를 통해 데이터 기반 응용 프로그램을 쉽고 빠르게 개발하고 관리할 수 있습니다.

시스템 요구 사항


  • 지원하는 운영 체제:Windows Server 2003 Service Pack 2;Windows Server 2008;Windows Vista;Windows Vista Service Pack 1;Windows XP Service Pack 2;Windows XP Service Pack 3
    • 32비트 시스템: Intel 또는 호환 가능한 1GHz 이상의 프로세서가 장착된 컴퓨터(2GHz 이상 권장, 단일 프로세서만 지원됨)
    • 64비트 시스템: 1.4 GHz 이상의 프로세서(2GHz 이상 권장, 단일 프로세서만 지원됨)
    • 최소 512MB RAM(1GB 이상 권장)
    • 1GB의 여유 하드 디스크 공간

    참고: 이 릴리스에서는 Windows XP Embedded Edition은 지원하지 않습니다.

    참고: SQL Server Express를 설치하려면 컴퓨터에 대한 관리 권한이 있어야 합니다.

    SQL Server Express with Tools를 설치하기 전에 릴리스 정보추가 정보를 읽는 것이 좋습니다.

    1단계: Microsoft .Net Framework 3.5 SP1을 다운로드하고 설치합니다.

    2단계: Windows Installer 4.5를 다운로드하고 설치합니다.

    3단계: Windows PowerShell 1.0을 다운로드하고 설치합니다.

    참고: Windows Powershell 1.0 설치에 대한 자세한 내용은 다음 기술 자료 문서를 참조하십시오.

  • 926139: Windows Server 2003 및 WindowsXP 용 PowerShell 1.0 영어 설치 패키지
  • 926140: Windows Server 2003 및 Windows XP용 PowerShell 1.0 다국어 설치 패키지
  • 926141: Windows Server 2003 및 Windows XP용 PowerShell 1.0 MUI(Multilingual User Interface) 언어 팩
  • 928439: Windows Vista용 Windows PowerShell 1.0 설치 패키지(모든 언어 포함)
  • 4단계: 이 페이지 뒷부분의 적절한 링크를 클릭하여 SQL Server 2008 Express with Advanced Services를 다운로드합니다. 즉시 설치를 시작하려면 실행을 클릭하고, 나중에 SQL Server Express를 설치하려면 저장을 클릭합니다.

    2011/11/09 18:19 2011/11/09 18:19
    jQuery.ajax 로 JSON 사용시 euc-kr등에서 유니코드 문자 안깨지게 처리하는게 귀찮아서 만들었습니다

    대충 아래처럼 씁니다

    <!--#include file="json_disp.asp"-->
    <%
    Function AjaxTest1(result)
    result.Add "ip", Request.ServerVariables("REMOTE_ADDR")

    AjaxTest1 = True
    End Function

    Set json = new JsonDispatcher
    Call json.AcceptParamValue("AjaxTest1", "mode", "test1")
    %>
    <script type="text/javascript">
    $(function(){
    $.post('test.asp',{mode:'test1'},function(result){
    alert(result.ip);
    },'json');
    });
    </script>
    2011/11/09 17:50 2011/11/09 17:50
    아래 소스는 렌터카 회사에서 차량 대여 확인서를 발급하기 위해서 만든 소스이다.
    각각의 글 내용들을 그림으로 만든 후 바탕 그림과 합성을 하는 방법을 사용한다. (공식 사이트에서도 같은 방법을 쓴다.)

    Dim objImg
    Set objImg = Server.CreateObject("ImageMagickObject.MagickImage.1")
    '차종
    objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=800x","caption:차종",server.mappath("차종경로")
    '차량번호
    objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=800x","caption:차량번호",server.mappath("차량번호경로")
    '확인서 내용
    objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=900x","caption:확인서 내용, 엔터는 vbcrlf를 쓰거나 \n를 쓸 수 있다. 사용법은 각각 asp와 자바스크립트에 준한다.",server.mappath("확인서 내용경로")
    '발급일
    objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=300x","-gravity=East","caption:발급일",server.mappath("발급일경로")
    '발급자
    objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=800x","-gravity=East","caption:발급자",server.mappath("발급자경로")

    '차종 합성
    objImg.composite "-geometry=+270+295",server.mappath("차종경로"),server.mappath("원본경로"),server.mappath("확인서경로")
    '차량번호 합성
    objImg.composite "-geometry=+270+330",server.mappath("차량번호경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
    '확인서 내용 합성
    objImg.composite "-geometry=+90+520",server.mappath("확인서 내용경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
    '발급일 합성
    objImg.composite "-geometry=+700+1100",server.mappath("발급일경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
    '발급자 합성
    objImg.composite "-geometry=+130+1270",server.mappath("발급자경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
    Set objImg = Nothing


    1. 엔터는 vbcrlf를 쓰거나 \n를 쓸 수 있다. 사용법은 각각 asp와 자바스크립트에 준한다.
    2. gravity는 정렬을 나타낸다. 8방위(NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast)를 사용한다.
    3. geometry는 왼쪽 제일 위를 0,0으로 하는 좌표다.                                       
    2011/11/09 17:46 2011/11/09 17:46
    체크 박스 옵션이 많아져서 원하는 걸 찾기 어려울 때 사용하시면 됩니다.

    몇 번 언급한 적이 있는 Coffeescript를 사용했습니다.



    [index.html]

    <!DOCTYPE html>
    <html xmlns='http://www.w3.org/1999/xhtml'>
    <head>
    <title>Checkbox Filter</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link href="stylesheet.css" media="screen" rel="stylesheet" type="text/css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
    <script src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js" type="text/javascript"></script>
    <script src="application.coffee" type="text/coffeescript"></script>
    </head>
    <body>
    <div id="container">
    <form method="post" action="/">
    <label for="input-filter">Filter:</label>
    <input id="input-filter" type="text" name="filter" />
    <ul>
    <li>
    <input id="id_1" type="checkbox" name="ids[]" value="1" />
    <label for="id_1">#1 - AA</label>
    </li>
    <li>
    <input id="id_2" type="checkbox" name="ids[]" value="2" />
    <label for="id_2">#2 - BA</label>
    </li>
    <li>
    <input id="id_3" type="checkbox" name="ids[]" value="3" />
    <label for="id_3">#3 - AB</label>
    </li>
    <li>
    <input id="id_4" type="checkbox" name="ids[]" value="4" />
    <label for="id_4">#4 - BB</label>
    </li>
    <li>
    <input id="id_5" type="checkbox" name="ids[]" value="5" />
    <label for="id_5">#5 - ABC</label>
    </li>
    </ul>
    </form>
    </div>
    </body>
    </html>


    [stylesheet.css]

    body {
    font-size: 12px;
    background: #FFF;
    color: #333;
    margin: 0;
    }

    #container {
    margin: 10px auto;
    width: 600px;
    padding: 10px;
    }


    [application,coffee]

    $ ->
    $('form').submit ->
    false

    $('input[name=filter]').live 'keyup', ->
    query = $(this).val().toLowerCase()
    if $(query).is(':blank')
    $('form li').show()
    else
    $('form li').each (i, item) ->
    text = $(item).find('label').text().toLowerCase()
    if text.search(query) < 0
    $(item).hide()
    else
    $(item).show()
    2011/11/09 17:33 2011/11/09 17:33
    <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
    </ul>
    $($("li").get().reverse()).each(function() { });

    출처 : http://stackoverflow.com/questions/1394020/jquery-each-backwards
    2011/11/09 17:31 2011/11/09 17:31
    <!DOCTYPE html>
    <html xmlns='http://www.w3.org/1999/xhtml'>
    <head>
    <title>Real-time Rank</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link href="stylesheet.css" media="screen" rel="stylesheet" type="text/css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
    <script src="application.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="content">
    <dl id="rank-list">
    <dt>실시간 급상승 검색어</dt>
    <dd>
    <ol>
    <li><a href="#">1 순위</a></li>
    <li><a href="#">2 순위</a></li>
    <li><a href="#">3 순위</a></li>
    <li><a href="#">4 순위</a></li>
    <li><a href="#">5 순위</a></li>
    <li><a href="#">6 순위</a></li>
    <li><a href="#">7 순위</a></li>
    <li><a href="#">8 순위</a></li>
    <li><a href="#">9 순위</a></li>
    <li><a href="#">10 순위</a></li>
    </ol>
    </dd>
    </dl>
    </div>
    </body>
    </html>


    stylesheet.css

    body {
    font-size: 12px;
    background: #FFF;
    color: #333;
    margin: 0;
    }

    #content {
    margin: 20px;
    padding: 10px;
    background: #393;
    }

    #rank-list a {
    color: #FFF;
    text-decoration: none;
    }

    #rank-list a:hover {
    text-decoration: underline;
    }

    #rank-list {
    overflow: hidden;
    width: 160px;
    height: 20px;
    margin: 0;
    }

    #rank-list dt {
    display: none;
    }

    #rank-list dd {
    position: relative;
    margin: 0;
    }

    #rank-list ol {
    position: absolute;
    top: 0;
    left: 0;
    margin: 0;
    padding: 0;
    list-style-type: none;
    }

    #rank-list li {
    height: 20px;
    line-height: 20px;
    }


    application.js

    $(function() {
    var count = $('#rank-list li').length;
    var height = $('#rank-list li').height();

    function step(index) {
    $('#rank-list ol').delay(2000).animate({
    top: -height * index,
    }, 500, function() {
    step((index + 1) % count);
    });
    }

    step(1);
    });

    2011/11/09 17:29 2011/11/09 17:29
    <div style='position:absolute;'>퀵메뉴 내용</div> 형식이 아닌
    //-----------------------------------
    <div style='position:relative or absolute'>
    <div style='position:absolute;'>퀵메뉴 내용</div>
    </div>
    이동하는 간단 오른쪽 퀵메뉴
    //---------------------------------
    //테스트 예제
    <table height='2000'>
    <tr>
    <td width='100'>
    </td>
    <td valign=top><BR><BR><BR><BR><BR>
    <div style='position:relative'><div style='position:absolute;border:1px solid #ccc;' id='test'>ffffffff</div></div>
    </td>
    </tr>
    </table>
    <scRIPT LANGUAGE="Javascript">
    <!--
    //테스트 처럼 absolute 어미로 relative , absolute 가 있어야 합니다
    var top_y_limit = 0 ; //오른쪽 이동 레이어 값 정의
    var fix_top = 20 ; //상단에서 어느정도 떨어질것인지 정의
    var move_speed = 800; // 이동 감지 시간 0.8초(너무 짧으면 민감함)
    var id_value = 'test'; //아이디 값 정의
    jQuery(document).ready(function(){
    //----------------------------------
    //이동 레이어 정의
    var offset = jQuery("#"+id_value).offset(); //레이어 위치 정의
    top_y_limit = offset.top-fix_top; //항상 상단보다 fix_top 아래에서
    var rightmenu_t = setInterval(rightmenu_move,move_speed); //오른쪽 위아래이동 적용
    //----------------------------------
    });
    //----------------------------------
    //오른쪽 이동 함수를 정의
    function rightmenu_move()
    {
    var scrolltop = jQuery(window).scrollTop();
    if(scrolltop > top_y_limit){ jQuery("#"+id_value).animate({"top": (parseInt(scrolltop)-parseInt(top_y_limit))+"px"},"slow");}
    else {jQuery("#"+id_value).animate({"top": "0px"},"slow"); }
    }
    //----------------------------------
    //-->
    </scRIPT>
    </BODY>
    </HTML>
    2011/11/09 17:27 2011/11/09 17:27

    DOCTYPE은 현재 웹 문서가 어떤 HTML 버전에 맞게 작성되었는지를 알려주는 부분입니다. 문서가 HTML 표준안을 따르는지, XHTML 표준안을 따르는지, 그리고 표준안 중에서도 권장 표준안(strict)을 지키는지, 완화된 표준안(Traditional)을 지키는지에 따라 특정 태그를 사용할 수 없기도 하고, 처음 예상했던 것과 다른 결과가 나타나기도 합니다.

    DOCTYPE을 따로 선언하지 않으면 브라우저에서 HTML 문서로 인식하기 때문에 사용하지 않는 경우도 많지만, XHTML 언어를 사용할 경우에는 반드시 선언해 주어야 의도한대로 웹 문서를 표시할 수 있습니다.

    :namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    가장 기본적인 문서 타입 선언은 다음과 같습니다.

    ● HTML 4.01 호환 모드 : 가장 최근의 CSS 규격을 따르며 자유롭게 요소들을 배치할 수 있습니다. 프레임은 사용할 수 없습니다. 따로 지정하지 않을 경우 브라우저에서는 이 형식으로 인식합니다.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/html4/loose.dtd">

    ● HTML 4.01 엄격 모드 : 권장하지 않는 요소들은 전혀 사용할 수 없고 요소를 배치할 때 규칙을 지켜야 합니다. HTML 문법에 맞는 가장 이상적인 문서를 만들 수 있습니다.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    ● XHTML 1.0 호환 모드 : 프레임셋을 사용할 수 있지만 파이어폭스에서는 프레임을 사용할 수 없음

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    2011/11/03 04:40 2011/11/03 04:40
    트위터처럼 140자 제한이 있는 경우, 남은 글자수를 보여줍니다.

    0보다 아래로 떨어지면 붉은 글씨로 바뀌고 submit을 할 수 없게 했습니다.


    index.html

    <!DOCTYPE html>
    <html xmlns='http://www.w3.org/1999/xhtml'>
    <head>
    <title>Input Counter</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link href="stylesheet.css" media="screen" rel="stylesheet" type="text/css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
    <script src="application.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="container">
    <form action="index.html" method="POST">
    <textarea></textarea>
    <span class="input-counter"></span>
    <input type="submit" id="input-submit" value="등록" />
    </form>
    </div>
    </body>
    </html>


    stylesheet.js

    body {
    font-size: 12px;
    background: #FFF;
    color: #333;
    margin: 0;
    }

    #container {
    margin: 10px auto;
    width: 500px;
    padding: 10px;
    background: #CCC;
    }

    form {
    overflow: hidden;
    height: 100%;
    }

    textarea {
    display: block;
    width: 99%;
    height: 5.0em;
    margin-bottom: 0.5em;
    }

    span.input-counter {
    float: left;
    font-weight: bold;
    color: #000;
    }

    span.input-counter.disabled {
    color: #F00;
    }

    input#input-submit {
    float: right;
    }


    application.js

    $(function() {
    var maxLength = 140;

    function updateInputCount() {
    var textLength = $('textarea').val().length;
    var count = maxLength - textLength;
    $('span.input-counter').text(count);
    if (count < 0) {
    $('span.input-counter').addClass('disabled');
    $('input#input-submit').prop('disabled', true);
    } else {
    $('span.input-counter').removeClass('disabled');
    $('input#input-submit').prop('disabled', false);
    }
    }

    $('textarea')
    .focus(updateInputCount)
    .blur(updateInputCount)
    .keypress(updateInputCount);
    window.setInterval(updateInputCount, 100);

    updateInputCount();
    });
    2011/11/03 04:39 2011/11/03 04:39
    모바일로 접속했을때는 모바일 전용 페이지로 리다이렉트 시키거가 
    모바일 전용 view 페이지를 보여주고싶을때 확인하는 부분입니다.
    <?php
    if (preg_match('/(iPhone|Android|iPod|BlackBerry|IEMobile|HTC|Server_KO_SKT|SonyEricssonX1|SKT)/', 
    $_SERVER['HTTP_USER_AGENT']) ) {
        define('BROWSER_TYPE', 'M'); // mobile	
    } else {
        define('BROWSER_TYPE', 'W'); // web (iPad 는 웹으로 간주)
    }
    if(BROWSER_TYPE == "M")
    {
    	// 모바일 페이지
    }else
    {
    	// 웹페이지
    }
    ?>
    2011/11/03 04:38 2011/11/03 04:38
    지난 11월 3일 제이쿼리 1.7 버전이 릴리즈 되었네요
    간략하게 정리한 개선 또는 삭제사항은 아래와같아요.

    http://blog.jquery.com/2011/11/03/jquery-1-7-released/


    추가 & 개선된 사항

    .on() .off() API 추가 (bind() 랑 비슷한거같은데요?)


    $('a').bind('click', myHandler);
    $('a').on('click', myHandler);

    $('form').bind('submit', { val: 42 }, fn);
    $('form').on('submit', { val: 42 }, fn);

    $(window).unbind('scroll.myPlugin');
    $(window).off('scroll.myPlugin');

    $('.comment').delegate('a.add', 'click', addNew);
    $('.comment').on('click', 'a.add', addNew);

    $('.dialog').undelegate('a', 'click.myDlg');
    $('.dialog').off('click.myDlg', 'a');

    $('a').live('click', fn);
    $(document).on('click', 'a', fn);

    $('a').die('click');
    $(document).off('click', 'a');


    Delegated 이벤트의 성능 향상 (속도말하는거같아요)
    IE6/IE7/IE8에서 HTML5의 더 나은 지원
    토글링 애니메이션의 직관적인 동작
    AMD(Asynchronous Module Definition) API 지원
    jQuery.Deferred 객체 확장
    jQuery.isNumeric() 추가 - 매개변수의 정수 여부 체크 함수                                       
    2011/11/01 12:21 2011/11/01 12:21
    틀고정 및 숫자 콤마적용,합계처리를 하는 방법입니다.
    --------------------------------------------------------------------------------------------

    <html xmlns:x='urn:schemas-microsoft-com:office:excel'>
    <meta http-equiv="Content-Type" content="application/vnd.ms-excel;charset=euc-kr">
    <meta http-equiv='cache-control' content='no-cache'>
    <meta http-equiv='pragma' content='no-cache'>
    <meta name=Generator content="Microsoft Excel 9">


    <style>
    td{font-size:9pt; font-family:굴림}
    br{mso-data-placement:same-cell;}
    BR{mso-data-placement:same-cell;}
    .title{font-size:12pt;font-weight: bold}
    .title2{font-size:8pt;font-weight: normal}
    .title3{font-weight: normal;mso-text-control:shrinktofit;white-space:nowrap;}
    .font{font-size:9pt}
    .int{mso-number-format:"0_ ";mso-text-control:shrinktofit;white-space:nowrap;}/*숫자타입*/
    .decimal2{mso-number-format:"\#\,\#\#0\.00_ \;\[Red\]\\-\#\,\#\#0\.00\\ ";mso-text-control:shrinktofit;white-space:nowrap;}/*숫자타입(콤마표시,소수점2자리)*/
    .percent{mso-style-parent:style0;mso-number-format:Percent;} /*백분율(소수2자리)*/
    .other{mso-number-format:"\@";mso-text-control:shrinktofit;white-space:nowrap;}/*문자타입*/
    .text{mso-number-format:"\@";mso-text-control:shrinktofit;white-space:nowrap;}/*문자타입*/
    </style>
    <!--[if gte mso 9]><xml>
    <x:ExcelWorkbook>
    <x:ExcelWorksheets>

    <x:ExcelWorksheet>
    <x:Name><?=$Excel_Title?></x:Name>
    <x:WorksheetOptions>
    <x:DefaultRowHeight>270</x:DefaultRowHeight>
    <x:Print>
    <x:ValidPrinterInfo/>
    <x:PaperSizeIndex>9</x:PaperSizeIndex>
    <x:HorizontalResolution>600</x:HorizontalResolution>
    <x:VerticalResolution>600</x:VerticalResolution>
    </x:Print>
    <x:Selected/>

    <?if($_POST[Excel_SplitHorizontal] || $_POST[Excel_SplitVertical]){//틀고정시 적용?>
    <x:FreezePanes/>
    <x:FrozenNoSplit/>
    <x:SplitHorizontal><?=$_POST[Excel_SplitHorizontal]?></x:SplitHorizontal>
    <x:TopRowBottomPane><?=$_POST[Excel_SplitHorizontal]?></x:TopRowBottomPane>
    <x:SplitVertical><?=$_POST[Excel_SplitVertical]?></x:SplitVertical>
    <x:LeftColumnRightPane><?=$_POST[Excel_SplitVertical]?></x:LeftColumnRightPane>
    <x:ActivePane>0</x:ActivePane>
    <?}?>

    <x:Panes>
    <x:Pane>
    <x:Number>3</x:Number>
    <x:ActiveRow>0</x:ActiveRow>
    <x:ActiveCol>0</x:ActiveCol>
    <x:RangeSelection>$G$19:$G$20</x:RangeSelection>
    </x:Pane>
    </x:Panes>
    <x:ProtectContents>False</x:ProtectContents>
    <x:ProtectObjects>False</x:ProtectObjects>
    <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
    </x:ExcelWorksheet>
    </x:ExcelWorksheets>
    <x:WindowHeight>11475</x:WindowHeight>
    <x:WindowWidth>17745</x:WindowWidth>
    <x:WindowTopX>120</x:WindowTopX>
    <x:WindowTopY>90</x:WindowTopY>
    <x:ProtectStructure>False</x:ProtectStructure>
    <x:ProtectWindows>False</x:ProtectWindows>
    </x:ExcelWorkbook>
    </xml><![endif]-->

    <table border=1>
    <tr><td class=int x:num=1000>1000</td></tr>
    <tr><td class=int x:num=1000>1000</td></tr>
    <tr><td class=int x:num=1000>1000</td></tr>
    <tr><td class=int x:fmla='=sum(A1:A3)'></td></tr>
    </table>                                       
    2011/10/31 18:29 2011/10/31 18:29

    제가 왜 '블로그 상위노출 기준과 방법'이라고 작성하지 않고 '블로그 상위노출 기준과 블로그 상위노출 방법'이라하고 빨강색과 크기를 크게 했을까요? N검색 사이트의 검색로봇의 상위 노출에 유리하게 판단할 수 있도록 하기 위함입니다.


    검색포털의 검색로봇이 수집한 정보는 단어별로 색인되어 DB에 보관한 후 검색자의 검색어와 일치되는 단어를 검색하여 검색 결과에 노출합니다.


    이 과정에서 동일한 단어의 검색어들이 노출되게 되는데, 어떤 정보를 상위에 노출시켜야 할 지 사전에 어떠한 기준이 있어야 합니다.


    그 기준은 통합 검색의 검색 탭(블로그, 카페, 이미지, 동영상, 지식iN, 지식쇼핑, 뉴스 등)별로 다르지만 검색 상위 노출의 일정한 규칙을 가지고 있습니다.


    검색로봇이 판단하는 검색 상위 노출의 기본적인 요인은 정확도, 인기도, 등록일이며, 정확도에는 블로그 포스트의 제목에서 검색어의 위치와 반복 횟수, 본문에서 대표 검색어의 반복 회수, 본문 글자의 크기와 색상, 포스트의 전체 크기를 의미합니다.


    블로그 상위 노출 기준과 블로그 상위 노출 방법을 터특하기 전에 우선 선행되어야 할 항목이

    검색 포털의 검색로봇과 검색엔진의 동작원리와 노출 원리와 규칙을 이해한 후 그에 맞는 포스트를 작성하고 블로그를 관리해야 합니다.

     

     

    1.키워드를 잘 선택한다

    2.키워드가 검색 카테고리에 적당하게 등록이 되어야한다

    3.제목에 키워드가 들어가야하고 내용 앞부분에 키워드를 2~3번 넣어주면 좋다

    4.블로그지수가 높아야한다

    5.남의 글을 복사한 것이 아닌 자신의 창작글이어야한다

    6.내용 속에 이미지,사진,동영상이 있으면 확률이 더 높다

    7.제목(주제)과 내용이 연관성이 있어야한다.

     

    블로그를 운영하시는 분 입장에서는 나의 글이 무조건 상위에 노출이 되었으면 하는 바람을 지니고 있겠지만 검색엔진에서는 검색 사용자가 원하는 결과를 보여줘야 한다는 과제를 안고 있습니다.


    때문에 블로그 상위노출을 위한 첫 걸음은 검색엔진의 입장이 되어 보는 것입니다.


    1. 검색 사용자가 입력한 검색어와의 관련성을 높여라.


    이 부분에 대한 과제 때문에 검색 사용자가 입력한 검색어가 블로그의 포스트 내에 적절히 포함되어 있어야 합니다.

    가장 중요한 위치는 물론 제목이며 본문 내에도 다수 포함되어 있는 것이 관련성을 높이는 방법입니다.


    2. 정성스럽게 작성된 컨텐츠여야 한다.


    네티즌들이 좋아하는 페이지의 구성은 적절한 량의 텍스트와 이미지 혹은 동영상이 적절히 섞여 있는 것입니다. 해서 포스트 내용이 텍스트로만 구성되어 있을 것이 아니라 이미지 혹은 동영상이 적절히 섞여 있는 형태를 선호합니다.


    3. 컨텐츠 소비자의 호응도를 높여라.


    검색로봇이 로직에 의해 1차적으로 점수를 부여하여 순위를 결정하여 노출시킬 것입니다. 그 다음에는 해당 포스트에 게재된 컨텐츠를 소비한 이들이 댓글, 공감, 스크랩 등으로 얼마나 호응했는지를 보고서 이 포스트의 진실성 여부를 판단하여 순위 조정을 할 것입니다.


    4. 성실한 블로그 운영자여야 한다.


    컨텐츠를 꾸준히 업데이트하는지, 복사한 컨텐츠가 아닌 직접 생성한 컨텐츠인지, 이웃은 얼마나 많은지 등을 보고서 블로그 자체의 신뢰 점수를 부여할 것입니다.


    이 4가지가 기본이 되는 요소라고 볼 수 있습니다. 이 요소들의 점수를 적절히 연산하여 점수를 계산하고 이 점수에 따라 상위노출이 결정될 것입니다.

    2011/10/27 13:51 2011/10/27 13:51
    Snoopy.class.php 다운받으셔서 경로만 맞춰주세요

    <?
    $g4_path = ".";
    include_once("$g4_path/common.php");
    include_once("$g4[path]/lib/mw.builder.lib.php");
    if($shotbirdie_tkey){
    $ti_de = urldecode($shotbirdie_tkey);
    $g4[title] = "자료실 > 토렌트검색 : $ti_de";
    }else{
    $g4[title] = "자료실 > 토렌트검색";
    }
    @include_once("$g4[path]/head.php");
    ?>
    <script language="Javascript" type="text/Javascript">
    <!--
    function MM_popupMsg(msg) { //v1.0
    alert(msg);
    }
    //-->
    </script>
    <style>

    .jyGuideBox {margin-top:30px; padding:20px; background:#f2f2f2;}
    .jyGuideBox .txt_title {padding-left:20px; height:17px; line-height:19px; font-weight:bold; color:#333; background:url('./img/ico_sprites_bule.gif') no-repeat 2px 2px;}
    .jyGuideBox ul {padding-top:8px;}
    .jyGuideBox li {padding-left:20px; height:18px; line-height:20px; font-size:11px; color:#999; list-style:none; background:url('./img/ico_sprites_bule.gif') no-repeat 10px -30px;}
    </style>
    <!--상단검색-->
    <table width="730" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
    <td width="29"><img src="http://soncook2.cdn2.cafe24.com/shotbirdie/search_left.gif" width="29" height="79"></td>
    <td valign="top" background="http://soncook2.cdn2.cafe24.com/shotbirdie/search_bodybg.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td height="40"><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="3" height="6"></td>
    <td height="6"></td>
    </tr>
    <tr>
    <td> </td>
    <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="150" class="search_txt">토렌트검색</td>
    <td class="search_txt"><div align="right">
    <?
    $k01 = urlencode("1박2일");
    $k02 = urlencode("무한도전");
    $k03 = urlencode("런닝맨");
    $k04 = urlencode("남자의자격");
    $k05 = urlencode("영어공부");
    $k06 = urlencode("음악");
    $k07 = urlencode("성인");
    $k08 = urlencode("서식");
    $k09 = urlencode("자막");
    $k10 = urlencode("강좌");
    $k11 = urlencode("나는가수다");

    ?>
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k05?>'><span class='search_txt'><u>영어공부</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k11?>'><span class='search_txt'><u>나는 가수다</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k01?>'><span class='search_txt'><u>1박2일</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k02?>'><span class='search_txt'><u>무한도전</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k03?>'><span class='search_txt'><u>런닝맨</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k04?>'><span class='search_txt'><u>남자의자격</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k06?>'><span class='search_txt'><u>음악</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k07?>'><span class='search_txt'><u>성인</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k08?>'><span class='search_txt'><u>무료서식</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k09?>'><span class='search_txt'><u>자막</u></span></a> |
    <a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k10?>'><span class='search_txt'><u>강좌</u></span></a>

    </div></td>
    </tr>
    </table></td>
    </tr>
    </table></td>
    </tr>
    <tr>
    <td height="39"><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <form type="get" action="<?=$PHP_SELF_SELF?>">
    <tr>
    <td><input name=shotbirdie_tkey maxlength=30 itemname="토렌트 검색어" required value='<?=$shotbirdie_tkey?>' style="width:620; height:22px;"></td>
    <td width="60"><div align="right">
    <input name="image" type=image src="http://soncook2.cdn2.cafe24.com/shotbirdie/search_bt.gif" align=absmiddle width="49" height="21" border=0>
    </div></td>
    </tr>
    </form>
    </table></td>
    </tr>
    </table></td>
    <td width="20"><img src="http://soncook2.cdn2.cafe24.com/shotbirdie/search_right.gif" width="20" height="79"></td>
    </tr>
    </table>
    <!--상단검색-->
    <center>매일 10~11시, 15~16시, 20~23시는 비회원 다운로드 가능(회원은 언제나 가능)</center>
    <?
    if($shotbirdie_tkey == ''){ }else{
    require './lib/Snoopy.class.php';
    ini_set("allow_url_fopen","1");

    switch($sort_code){
    case 'a': //최근
    $sort = "a/d/";
    $scolor01 = "style='color: #990000;'";
    break;
    case 'c': //인기
    $sort = "c/d/";
    $scolor02 = "style='color: #990000;'";
    break;
    case 's': //시더
    $sort = "s/d/";
    $scolor03 = "style='color: #990000;'";
    break;
    case 'n': //이름
    $sort = "n/d/";
    $scolor04 = "style='color: #990000;'";
    break;
    case 'z': //크기
    $sort = "z/d/";
    $scolor05 = "style='color: #990000;'";
    break;
    default: //인기
    $sort = "c/d/";
    $scolor02 = "style='color: #990000;'";
    $tpage = 1;
    break;
    }
    switch($tpage){
    case '1':
    $tcolor01 = "style='color: #990000; font-weight:bold;'";
    break;
    case '2':
    $tcolor02 = "style='color: #990000; font-weight:bold;'";
    break;
    case '3':
    $tcolor03 = "style='color: #990000; font-weight:bold;'";
    break;
    default:
    $tcolor02 = "style='color: #990000; font-weight:bold;'";
    break;
    }
    $url = "http://bitsnoop.com/search/all/".$shotbirdie_tkey."/".$sort.$tpage."/?fmt=rss";
    $snoopy = new Snoopy;
    $snoopy->fetch($url);
    $xml = @simplexml_load_string($snoopy->results);
    $listct = '30'; //첫 파싱후 2번째부터는 수량조절용으로 사용(최적화를 위해)
    //$listct = count($xml->item);

    //테이블상단
    echo "
    <br><br>
    <table width='730' height='30' border='0' align='center' cellpadding='0' cellspacing='0'>
    <tr>
    <td>
    <table width='100%' border='0' cellspacing='5' cellpadding='0'>
    <tr>
    <td width='50%' align='left'><a href='./bbs/board.php?bo_table=notice&wr_id=3' target='_blank'><font color='#990000'>토렌트 설치 및 사용법</a></td>
    <td width='50%' align='right'>
    <!--순서-->
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=a&tpage=$tpage'><span $scolor01>최신순</span></a> |
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=c&tpage=$tpage'><span $scolor02>인기순</span></a> |
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=s&tpage=$tpage'><span $scolor03>시드순</span></a> |
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=n&tpage=$tpage'><span $scolor04>이름순</span></a> |
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=z&tpage=$tpage'><span $scolor05>크기순</span></a>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    <table width='730' border='0' align='center' cellpadding='0' cellspacing='0'>
    <tr>
    <td><table width='100%' border='0' cellspacing='0' cellpadding='0'>
    <tr>
    <td height='1' bgcolor='BFBFBF'></td>
    </tr>
    <tr>
    <td height='32' bgcolor='FAFAFA'><table width='100%' border='0' cellspacing='0' cellpadding='0'>
    <tr>
    <td width='38' align='center'>번호</td>
    <td width='500' align='center'>제목</td>
    <td width='66' align='center'>크기</td>
    <td width='38' align='center'>시드</td>
    <td width='44' align='center'>마그넷</td>
    <td width='44' align='center'>토렌트</td>
    </tr>
    </table></td>
    </tr>
    <tr>
    <td height='1' bgcolor='EDEDED'></td>
    </tr>
    </table></td>
    </tr>
    <tr>
    <td>
    ";
    for($i=0; $i<$listct; $i++){
    $wr_subject[$i] = $xml->channel->item[$i]->title;
    $category[$i] = $xml->channel->item[$i]->category;
    $link[$i] = $xml->channel->item[$i]->link;
    $pubDate[$i] = $xml->channel->item[$i]->pubDate;
    $numSeeders[$i] = $xml->channel->item[$i]->numSeeders;
    $numLeechers[$i] = $xml->channel->item[$i]->numLeechers;
    $numFiles[$i] = $xml->channel->item[$i]->numFiles;
    $numComments[$i] = $xml->channel->item[$i]->numComments;
    $size[$i] = $xml->channel->item[$i]->size;
    $fileName[$i] = $xml->channel->item[$i]->torrent->fileName;
    $url_join[$i] = 'http://torrage.com/torrent/'.$fileName[$i];
    $contentLength[$i] = $xml->channel->item[$i]->torrent->contentLength;
    $infoHash[$i] = $xml->channel->item[$i]->torrent->infoHash;
    $magnetURI[$i] = $xml->channel->item[$i]->torrent->magnetURI;
    $wr_content[$i] = $xml->channel->item[$i]->description;
    //echo "$wr_subject / $fileName / $url_join<br>";
    //순번
    $num = $i+1;
    //파일용량
    $size[$i] = round(($size[$i] / 1024)/1024);

    //회원가입에 따른차등
    if(!$member['mb_id']){
    //안내메세지
    $tmsg = "매일 10~11시, 15~16시, 20~23시는 비회원 다운로드 가능하세요^^";

    $timeinfo = getdate(time());
    if(($timeinfo[hours] >= '10' and $timeinfo[hours] < '11') or ($timeinfo[hours] >= '15' and $timeinfo[hours] < '16') or ($timeinfo[hours] >= '20' and $timeinfo[hours] < '23')){
    $magnetURI_m[$i] = "<a href='$magnetURI[$i]' target='_blank' onClick=\"MM_popupMsg('$tmsg')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img01.GIF' border='0'></a>";
    $url_join_m[$i] = "<a href='$url_join[$i]' target='_blank' onClick=\"MM_popupMsg('$tmsg')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img02.GIF' border='0'></a>";
    }else{
    $magnetURI_m[$i] = "<a href='http://web.search.naver.com/search.naver?where=site&sm=dir_hty&query=%BC%A6%B9%F6%B5%F0&ctgids=' target='_blank' onClick=\"MM_popupMsg('$tmsg-샷버디 클릭후에 로그인 해주시면 됩니다')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img01.GIF' border='0'></a>";
    $url_join_m[$i] = "<a href='http://web.search.naver.com/search.naver?where=site&sm=dir_hty&query=%BC%A6%B9%F6%B5%F0&ctgids=' target='_blank' onClick=\"MM_popupMsg('$tmsg-샷버디 클릭후에 로그인 해주시면 됩니다')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img02.GIF' border='0'></a>";
    }
    }else{ //로그인시
    $magnetURI_m[$i] = "<a href='$magnetURI[$i]'><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img01.GIF' border='0'></a>";
    $url_join_m[$i] = "<a href='$url_join[$i]'><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img02.GIF' border='0'></a>";
    }

    //중복내용
    echo "
    <table width='100%' border='0' cellspacing='0' cellpadding='0'>
    <tr>
    <td><table width='100%' height='33' border='0' cellpadding='0' cellspacing='0'>
    <tr>
    <td width='38' align='center'>$num</td>
    <td width='500'>$wr_subject[$i]</td>
    <td width='66' align='center'>$size[$i]MB</td>
    <td width='38' align='center'>$numSeeders[$i]</td>
    <td width='44' align='center'>$magnetURI_m[$i]</td>
    <td width='44' align='center'>$url_join_m[$i]</td>
    </tr>
    </table></td>
    </tr>
    <tr>
    <td height='1' bgcolor='EDEDED'></td>
    </tr>
    </table>
    ";
    //echo "$num - <a href='$url_join[$i]' target='_blank'>$wr_subject[$i]</a><br>";
    }//end for($i)
    //테이블하단
    echo "
    </td>
    </tr>
    <tr>
    <td align='center'>
    <!--페이지-->
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=$sort_code&tpage=1'><span $tcolor01>1</span></a> |
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=$sort_code&tpage=2'><span $tcolor02>2</span></a> |
    <a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=$sort_code&tpage=3'><span $tcolor03>3</span></a>
    </td>
    </tr>
    </table>
    ";
    } //end if(shotbirdie_tkey)
    ?>
    <div class="jyGuideBox">
    <p class="txt_title">반드시 읽어보세요.</p>
    <ul>
    <li>본 서비스는 토렌트 외부 검색기로, 토렌트 통합검색을 제공합니다.</li>
    <li>검색자료는 서버에 저장, 관리 하지 않으며, 검색 및 다운로드만을 제공합니다.</li>
    <li>업로드 서비스는 제공되지 않으며, 이미지를 제공하지 않습니다.</li>
    <li>일부 파일은 다운로드 되지 않을 수 있으며, 자료의 질에 대해서는 보장하지 않습니다.</li>
    </ul>
    </div>
    <?
    //유가정보

    ?>
    <?
    @include_once("$g4[path]/tail.php");
    ?>      
                                    
    2011/10/24 12:20 2011/10/24 12:20
    1. 자바스크립트로 이용할경우
    <script language=javascript>
    function goPage(cc_val) {
    var param = "";
    param += "?aa=11";
    param += "&bb=22";
    param += "&cc=" + escape(cc_val);

    location = "test.asp" + param;
    }
    < /script>

    2. 자바스크립트를 서버단 스크립트 언어로 이용
    <script language=javascript runat=server>
    function asp_escape(val) {
    return escape(val)
    }
    < /script>
    < a href="test.asp?aa=11&bb=22&cc=<%=asp_escape(cc_val)%>">링크다</a>
    2011/10/23 12:08 2011/10/23 12:08
    예전에 제 블로그에 올렸던 글인데요 재탕할께요.

    How to Capture a Website Screenshot in Linux

    http://blog.naver.com/belladonnaf/50094171932

    1. 필요한 것.
    Linux Server with Centos/RHEL
    Khtml2Png (http://khtml2png.sourceforge.net)
    ImageMagick (http://imagemagick.org)
    KDE Desktop Environment
    Cmake - http://www.cmake.org

    2. 설치방법

    yum install Xvfb ImageMagick
    yum install firefox

    Xvfb :2 -screen 0 1024x768x24&
    export DISPLAY=:2
    import -window root example.png

    Install Basic Tools

    yum install gcc gcc-c++ automake autoconf nano zlib zlib-devel

    Install KDE desktop environment

    yum groupinstall "X Window System" "KDE (K Desktop Environment)"

    Install KDE developer libraries

    yum install kdelibs kdelibs-devel

    Install Xvfb Virtual Frame Buffer

    yum install Xvfb xorg xorg-x11-font*

    Install Cmake

    Cmake is cross plaform make utility. You cannot install using yum so you have to download the source files and compile it.

    wget <path/of/cmake.tar.gz>
    tar zxf cmake-2.7.1.tar.gz
    cd cmake-2.7.1

    then

    ./bootstrap
    make
    make install

    Install Khtml2PNG

    Download the source files from sourceforge.

    wget <path/to/khtml2png-2.7.5.tar.gz>
    tar xzf khtml2png-2.7.5

    ./configure
    make install

    마지막으로 ..

    Start Xvfb virtual server, then launch the khtml2png to grab a website screenshot

    > Xvfb :2 -screen 0 1024x768x24&
    > export DISPLAY=localhost:2.0

    then run khtml2png2

    > khtml2png2 --sw 200 --sh 150 http://www.example.com example.png

    --sh and --sw indicates both scaled width and height

    khtml 이 정말 단순한 브라우저에요                                       
    2011/10/23 12:00 2011/10/23 12:00

    사용자 삽입 이미지
    서버 : 윈도우 2003
    프로그램 : 익스체인지서버

    인 경우에 CDO.Message를 이용하고자 할 경우

    웹사이트 등록정보에서 응용프로그램 풀을 다음과 같이 변경한다.

    DefaultPool => ExchangeApplicantPool


    혹시 이렇게 해도 안되면...
    c:\windows\system32\cdosys.dll 파일에 웹게스트권한 추가해 준다

    2011/10/23 11:49 2011/10/23 11:49
    웹 자동화 프로그램의 대표는 selenium 이고 이전과 다르게 google web driver를 많이 이용하고 있죠. 맥쪽에 오래전부터 사용중인 괜찮은 프로그램이 있어서 소개해드립니다.

    Fake 라는 반올림해서 30$ 유료 소프트웨어로 편리한 인터페이스와 다양한 기능을 지원합니다.
    내부 엔진은 Webkit만 지원하기 떄문에 단점이 될 수 있지만 기능적으로는 충분한 메리트가 있습니다.

    조건 분기는 물론이고 에러 처리, 반복, 랜덤 데이터 입력, Assert, 쉘 명령어 실행, 등 다양한 것들을 사용할수 있고 작성된 작업을 저장하여 언제든지 실행하여 테스트할수 있습니다.

    다음은 공식 사이트고 앱스토어에도 등록되어 있습니다.
    http://fakeapp.com/

    다음은 데모 영상입니다.
    http://vimeo.com/14697494


    윈도우즈용은 없고, 개발할 생각도 없다고 하네요. 아쉽..                                       
    2011/10/23 11:29 2011/10/23 11:29
    ASP용 로그 기록 클래스

    많은 개발자들이 개발을 하면서 중간 중간 소스에 Response.Write 변수 를 추가 합니다.

    이유는 디버깅 용이죠! ^^

    하지만, 개발 완료 후 삭제도 해야 하고 혹여나 깜빡하고서 누락하는 경우가 있는데요.

    누락한 것 중 지저분 해지기만 하고 문제가 되진 않지만 어떤 사람들은 dB 커넥션 문자열을 찍어서

    노출이 되는 경우도 있기도 합니다. ㅎㅎㅎ

    공개 소스 중에는 Log4J라는 모듈이 있습니다만, 이건 JSP, Ruby, .Net 용으로만 있고 ASP용은 없지요.

    그래서 아쉬운 대로 만들어 봤습니다.

    제가 생각했을 때 이 클래스를 사용하므로서 얻을 수 있는 이득을 나열해 보죠.


    1. 운영 중에도 에러나 기타 정보를 기록하여 디버깅 및 유지보수에 용의합니다.
    2. 실수로 중요 정보가 외부에 노출되는 것을 방지합니다. (예: Response.Write에 의해)
    3. 확장 함수를 이용하여 받아들인 파라미터 등을 기록하는 것이 가능합니다.
    4. 로그 레벨을 이용 하여 기록 기준을 정의 할 수 있으므로 성능이 나빠지는 것에 대응 할 수 있습니다.
    5. 파일에 기록이 되므로 언제든 역 추적이 가능합니다. ( 1번과 비슷 한 내용이네요 ^^ )

    다음은 사용 예입니다.

    <!--#include virtual="ClsLogger.asp"//-->
    <%On Error Resume Next%>
    <%
    '// Logger
    Dim oLog : Set oLog = New ClsLogger

    '// Request Log
    TraceRequestParameter oLog

    '//      FATAL : 치명적 에러
    oLog.Fetal "치명적 에러!!! 관리자 빨리 보삼. : " & Err.Description

    '//      ERROR : 수행 가능한 정도의 에러
    oLog.Error "또 에러냐!!! : " & Err.Description

    '//      WARN : 문제를 일으킬 가능성의 정보
    oLog.Warn "이건 귀찮아서 처릴 안했단 말이오!!! : "

    '//      INFO : 정보를 나타낼 때 사용
    oLog.Info "게시판 목록 시작"

    '//      DEBUG : 상세 정보를 나타낼 때 사용
    oLog.Debug "지금은 개발 중..."

    If ( Err.Number = 0 ) Then
       oLog.Debug "완료"
    Else
       oLog.Error Err.Description
    End If


    '------------------------------------------------------------------------------------
    '// Request 객체의 파라미터 값을 로그에 기록한다.
    '// 이 함수는 ClsLogger에 포함 시킬지 말지 고민중 ... ㅠㅠ
    '------------------------------------------------------------------------------------
    Sub TraceRequestParameter(ByRef pLog)

       On Error Resume Next

       Dim pContentType : pContentType = LTrim(Request.ServerVariables("CONTENT_TYPE"))

       If ( InStr(pContentType, "multipart/form-data") > 0 ) Then
          Exit Sub
       End If

       If ( Not IsObject(pLog) ) Then
          Exit Sub
       End If

       Dim z
       Dim pKeyName
       pLog.Debug "============= FORM PARAMETER ============="
       For z = 1 To Request.Form.Count
          pKeyName = Request.Form.Key(z)
          pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestForm(""" &
    pKeyName & """)"
       Next

       For z = 1 To Request.Form.Count
          pLog.Debug Request.Form.Key(z) & " : " & Request.Form(z)
       Next

       pLog.Debug "========== QUERYSTRING PARAMETER ========="
       For z = 1 To Request.QueryString.Count
          pKeyName = Request.QueryString.Key(z)
          pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestQuery(""" &
    pKeyName & """)"
       Next

       For z = 1 To Request.QueryString.Count
          pLog.Debug Request.QueryString.Key(z) & " : " & Request.QueryString(z)
       Next  
       pLog.Debug "=========================================="

       Err.Clear

       On Error GoTo 0

    End Sub
    %>

    저의 경우 주로 .Error와 .Debug를 사용합니다.

    일단 속는 셈 치고 한번 사용해보셔요. ^^

    많은 분들이 자기가 원하던 거라고 하시더군요. 다행 다행.

    아 그리고 로그뷰어는 "mtail" 이라는 프로그램을 이용합니다. 네이년에서 mtail로 검색을 하시면 쉽게 구 할 수 있어요.

    간단하게 소개하면
       기록되는 로그를 실시간으로 모니터링 할 수 있고,
       필터링도 가능합니다. 이 필터링을 이용하면 Error만 볼수도 있고 Debug만 볼수도 있습니다.
    2011/10/21 02:07 2011/10/21 02:07
    국가별 IP체크 꼭 필요한 사항은 아니나 사이트 접속정보 구성시 고려해볼 만한 사항이며
    로그분석 업체에서는 이미 사용중인 기능이기도 합니다.

    로그분석에 어떤 국가의 IP인지 확인할 수 있다면 악의적인 IP의 접근 차단도 할수 있을것이며
    인젝션 공격등 방어를 위해 특정 국가의 접속을 막을수도 있을 것입니다.

    위 사이트에서는 데모 버전이 올라와 있습니다.
    ASP 버전으로 데모버전에는 데모데이터를 활용하고 있습니다.
    데모데이터를 실제 마지막으로 업데이트된 데이터로 교체하여 사용하시면 된답니다.

    첨부파일에는 2009년 2월 데이터와 예제 프로그램이 있으니 필요하신 분은 첨부파일을 받아 사용하세요~

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

    사용법
    1. GeoIPCOM.dll을 system32 폴더에 복사
    2. regsvr32 GeoIPCOM.dll - 레지스트리에 DLL등록
    3. ASP 프로그램에 적용

    set geoip = Server.CreateObject("GeoIPCOM.GeoIP")

    geoip.loadDataFile("C:\Program Files\GeoIP\GeoIP.dat")
    country_code = geoip.country_code_by_name(hostname)
    country_name = geoip.country_name_by_name(hostname)
    2011/10/21 02:05 2011/10/21 02:05
    말은 거창하지만... 뜯어보면 별것 아닙니다 -.-;
    설명이 뭐 필요하겠습니까 예제부터 보시죠

    예제)
    Dim objRS : Set objRS = New GDO
    Dim objHash : Set objHash = New Hashtable
    objHash.Define "title", "monoless 킹왕짱 미남!!"

    Call objRS.ExecuteQuery("update taeyo_board set title=?", objHash)

    Set objHash = Nothing
    Set objRS = Nothing

    예제 2)
    Dim objRS : Set objRS = New GDO
    Dim objHash : Set objHash = New Hashtable
    objHash.Define "title", "monoless 킹왕짱 미남!!"

    Dim objData : objData = objRS.OpenQuery("select * from taeyo_board where title=?", objHash)

    If IsEmpty(objData) = False Then
    Dim curData
    For Each curData In objData
    Response.Write "Title : " & curData.Item("title") & "<br />"
    Response.Write "Name : " & curData.Item("name") & "<br />"
    Next
    End If

    Set objHash = Nothing
    Set objRS = Nothing

    생성자)
    * [void] GDO() - GDO Class를 생성합니다.

    Method)
    * [void] ExecuteProc(proc, params) - 프로시져를 실행합니다.
    - [String] proc - 실행할 프로시져명
    - [Object Hashtable] params - 입력할 파라메터

    * [void] ExecuteQuery(query, params) - 쿼리를 실행합니다.
    - [String] query - 실행할 쿼리
    - [Object Hashtable] params - 입력할 파라메터

    * [Array] OpenProc(proc, params) - 프로시져를 실행합니다. 결과값은 Object Hashtable을 가진 배열로 반
    환합니다.
    - [String] proc - 실행할 프로시져명
    - [Object Hashtable] params - 입력할 파라메터

    * [Array] OpenQuery(query, params) - 쿼리를 실행합니다. 결과값은 Object Hashtable을 가진 배열로 반환
    합니다.
    - [String] query - 실행할 쿼리
    - [Object Hashtable] params - 입력할 파라메터

    Property)
    * [String] ConnectString - 접속할 DB 연결구문입니다.
    2011/10/21 02:04 2011/10/21 02:04
    페이저 애드인은 ajax 방식으로 게시판이나 다양한 데이터를 로드하면서 
    페이징 기능을 덧붙이고자 하는 경우에 도움이 되는 애드인입니다.
    (단, 이 플러그인은 단일 페이지에서 여러 번 사용될 수 없습니다)

    다만, 이는 실제 데이터를 가져오거나 하는 애드인이 아니며, 오로지 전체 레코드 수(totalItemCount)와 페이지 당 출력할 레코드 수(RecordPerPage)에 따라서 전체 페이지 수와 페이징 구역을 계산 및 출력 하는 애드인입니다.

    실제로 해당 페이지의 데이터를 가져오는 함수는 여러분이 직접 작성하셔야 하며,
    페이저 사용 규칙에 맞게 함수를 호출하시면 페이징이 자동으로 렌더될 것입니다.

    샘플은 http://taeyo.net/jQuery/Sample/pager.htm 을 참고하십시오.
    현재, 태오 사이트의 새로운 디지털 다이어리는 이 애드인을 사용하여 만들어지고 있습니다.

    다음은 사용방법입니다.

    1. 페이저를 출력할 위치를 html 태그로 작성한다.
    예 : <span id="pager"></span>

    2. jQuery의 ready 함수 안에서 다음과 같이 페이저를 초기화 한다. (지정이 필요없는 속성은 지정하지 않으셔도 됩니다)
    $("#pager").pager({
    pager: "#pager",
    pagerMode: "image", //text, image 중 선택
    totalItemCount: _totalItemCount,
    recordPerPage: _recordPerPage,
    currentPage: _currentPage,
    pageIndexChanged: Pager.pageIndexChanged,
    prev10Text: "<<",
    next10Text: ">>",
    prev10ImgSrc: "images/Prev10.gif",
    next10ImgSrc: "images/next10.gif",
    selectedPageFontColor: "orange"
    });

    _totalItemCount와 _recordPerPage, _currentPage는 전역변수로 선언되어야 할 것이다.
    그리고, 이 값은 여러분이 적절하게 설정하면 된다.

    3. 페이저의 클릭 이벤트와 관련된 콜백 메서드들을 여러분에게 맞게 정의하자.

    var Pager = {
    pageIndexChanged: function(selectedPage) {
    _currentPage = selectedPage;
    loadBoardData(); //목록 조회 및 출력 메서드 호출
    }
    }
    여기서의 loadBoardData() 메서드는 여러분이 데이터베이스에서 데이터를 조회하는 메서드이다.
    메서드 명은 여러분의 상황에 맞게 바꾸면 된다.
    강조했듯이, 페이저 애드인이 실제 데이터를 로드해주지는 않는다.

    4. loadBoardData() 메서드 안에서 여러분의 작업이 모두 끝난 다음, 제일 마지막에 다음과 같은 코드를 추가하여
    페이저를 갱신하도록 한다. 갱신을 하지 않으면, 페이저의 페이징 정보가 실제 갯수와 동기화 되지 않을테니 말이다.
    갱신을 위해서는 다음의 메서드를 호출하면 된다. 반드시 refresh의 인자로 _totalItemCount, _recordPerPage를 넘겨줘야만
    제대로 갱신된다는 점에 주의하자.
    또한, refresh 메서드는 계산된 전체 페이지 갯수를 반환한다.

    function loadBoardData()
    {
    //여러분의 작업
    //...
    //...

    var pageCount = $("#pager").pager.refresh(_totalItemCount, _recordPerPage);
    }

    끝.

    ps :
    1차 배포 후, 일부 로직을 개선하여 좀 더 코드를 줄였습니다. 현재 파일은 2차 배포버전입니다.
    2011/10/21 02:03 2011/10/21 02:03
    asp 용 썸넬 생성 dll 입니다.

    나누미플러스나, KMS썸넬등은 2003 서버에서 뻗어버리는 경우가 많아서..
    코드프로젝트에 올려진 소스에서 쓰잘데기 없는부분 빼버리고,
    썸넬만 만드는 부분 함수로 만들어놨습니다. (sub 함수로 전환시켜서 쓰는게 더 편할듯 하네요)

    참고로.. 덱스트든 abc든 일단 업로드 끝나고, 저장한 원본 파일명 던져주면 됩니다.

    DLL 은 가장 최근꺼구요..
    원 개발자가 만든 소스나 메서드 종류 보시려면.. 다운 받아서 살펴보심 되요.. (물론 C++ 소스일껍니다)
    2011/10/21 02:02 2011/10/21 02:02
    스팸메일 수신을 차단하기 위하여 실시간 스팸차단리스트(KISA-RBL)를 활용하는 방법입니다.

    KISA-RBL 서버에서 스팸리스트를 다운로드하는 방법과
    메일 서버(Sendmail, qmail, Postfix, Exchange Server)에서 참조할 수 있는 방법이 설명되어 있습니다.

    첨부파일을 참고해 주세요.

    출처 : kisarbl.or.kr (한국인터넷진흥원 스팸대응팀)

    2011/10/21 02:01 2011/10/21 02:01
    안녕하십니까?
    한국인터넷진흥원(KISA) 입니다.

    나날이 증가하는 이메일 스팸을 감축하기 위하여,
    방송통신위원회와 한국인터넷진흥원은 악성코드에 감염된
    일반 이용자의 PC에서 발송되는 스팸을 차단하기 위하여
    ISP/MSO의 네트워크에서 이메일 발송포트인 25번를 사용제한하고
    587번 포트를 대체하여 사용하는 정책(초고속인터넷가입자 대상 이메일 발송포트 사용제한, block25)을
    추진하고 있습니다.

    동 정책은 '10년 12월부터 주요 ISP/MSO 사업자를 대상으로
    초고속인터넷가입자(유동IP대역)를 대상으로 이메일 발송포트인 25번을 차단하게 되며,
    스팸 메일 이외의 정상 이용자의 이메일도 발송이 차단되므로 정상 이용자의
    이메일 프로그램과 서버 관리자가 운영하는 메일서버를 대상으로 설정 변경이필요합니다.

    첨부. 메일서버관리자 설정변경 매뉴얼(4종)

    보다 자세한 정책 설명과 설정변경 매뉴얼은 홈페이지(www.block25.or.kr)을 통해 확인할 수 있습니다.

    감사합니다.
    2011/10/21 02:00 2011/10/21 02:00