Search Results for '프로그래밍'


1206 posts related to '프로그래밍'

  1. 2011/09/07 실시간 스팸차단리스트(RBL) 이용방법
  2. 2011/09/07 웹표준 카페솔루션 소개 - 아티보드 3.0 기반으로 제작
  3. 2011/09/07 모바일 홈페이지 구축 - 웹아티 1
  4. 2011/09/07 웹아티 홈페이지 제작후 - 유지보수 서비스 안내
  5. 2011/09/07 홈페이지 제작 과정 - 웹아티 편 - 웹표준 아티보드 3.0
  6. 2011/09/07 웹표준이란? 2
  7. 2011/09/07 [쉘 스크립트] 특정 디렉토리의 파일들 중 html, inc, php 파일들만 찾아서 파일 인코딩 변경 처리 쉘 스크립트
  8. 2011/09/07 PHP MSSQL 프로시져 사용
  9. 2011/09/07 Javascript 예약어 1
  10. 2011/09/07 Javascript 에서 PHP 함수 사용
  11. 2011/09/07 HTML 5 Cache manifest (HTML 5 Application Cache)
  12. 2011/09/07 Linux DD 명령 Win32용
  13. 2011/09/07 PHP OpenSSH2 (libssh2) 설치 및 사용법
  14. 2011/09/07 PHP 세션 공유 - memcache 이용
  15. 2011/09/05 네임서버 zone 파일 인쿠르드
  16. 2011/09/05 대용량 파일 업로드 프로그래스바 - jquery
  17. 2011/09/05 jQuery UI class 를 animate
  18. 2011/09/05 특정 디렉토리의 파일들 중 html, inc, php 파일들만 찾아서 파일 인코딩 변경 처리 쉘 스크립트
  19. 2011/09/05 wget 사용법 - ftp
  20. 2011/09/02 특정일자 파일 삭제 BAT 프로그램
  21. 2011/09/02 원도우 특정 일자 이후 파일 삭제 방법 (delete files older than x days) forfiles
  22. 2011/09/02 네이버 블로그 / 카페에서 우클릭 및 내용 선택하기
  23. 2011/09/02 무료 웹표준 홈페이지 제작 솔루션 아티보드 3.0 출시 및 소개
  24. 2011/08/31 HTML5 Video Player 소개
  25. 2011/08/27 FOAF와 XFN 이란?
  26. 2011/08/27 기존 euc-kr 사이트를 utf-8사이트로 변경하는 방법
  27. 2011/08/27 웹 2.0 - 웹표준 홈페이지 통합 제작 솔루션 아티보드 3.0 소개 - 최강
  28. 2011/08/24 리눅스 (RHEL5) 기반 VOD 동영상 Streaming 서비스 환경 구축 하기
  29. 2011/08/24 [정보] 플레시를 이용한 멀티업로더. 1
  30. 2011/08/24 [정보] Fake 웹 자동화 프로그램

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

MySQL 로그 파일 관리

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


Mysql 의 로그 파일은 다음과 같이 크게 3종류가 있습니다.

1. 에러로그
2. 일반적인 로그
3. UPDATE 로그

첫번째 에러 로그는 hostname.err 의 이름으로 서버 실행시 에러를 기록하는 파일입
니다. 두번째 로그파일은 mysql 에 접근하는 사용자와 그들이 파일과 관련된 쿼리를
실행할 경우에 기록되는 로그 파일로 /usr/local/mysql/var 밑에 host_name.log 으로
저장이 되어집니다. Mysql 데이터에 파일을 기록하므로 파일과 관련된 쿼리는 DB 생
성/삭제 , 테이블 생성/삭제 , 레크드 삽입/갱신 이 있습니다.
이 로그 파일은 Mysql 실행시 --log 옵션을 주어 활성화 시키면 된다.

# /usr/local/mysql/bin/safe_mysqld --log &

업데이터로그는 테이블이 변경될때마다 해당 쿼리가 기록 됩니다. 기본적으로 활성
화 되지 않고 Mysql 실행시 --log-update 옵션으로 가능하다.

# /usr/local/mysql/bin/safe_mysql --log-update &

업데이터 로그는 /usr/local/mysql/var 밑에 host_name.00X 식으로 서버가 다시
실행되거나 mysqladmin reflesh 혹은 mysqladmin flush-logs 명령을 내릴때마다
뒤의 번호가 1씩 증가 한다. 혹은 --log-update=mysql.log 와 같이 로그파일명을
정해줄수도 있다. Update 로그는 update 쿼리만 저장하거 같지만 ..
delete , create 등의 쿼리도 모두 저장한다.

mysql 의 사용량이 많은 사이트는 이런 로그파일이 쌓이므로 해서 디스크 용량에
문제가 생길수 있다. 관리자는 수시로 점검하여 삭제를 해어야 한다.

로그 파일을 관리하는 방법으로는 두가지가 있다.

먼저 /usr/local/mysql/share/mysql/mysql-log-rotate 파일을 이용하는 방법과
간단한 스크립트를 작성하여 cron 에 등록한뒤 관리하는 방법이 있다.

/usr/local/mysql/share/mysql/mysql-log-rotate 파일을 이용하는 방법은 ..
--log-update=mysqld.log 와 같이 로그파일을 정해서 관리할때 이용하면 된다.

# vi /usr/local/mysql/share/mysql/mysql-log-rotate
-------------------------------------------------------------------------
----
# This logname is set in mysql.server.sh that ends up in /etc/rc.d/init.d/mysql
#
# If the root user has a password you have to create a
# /root/.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
# password = <secret>
# user= root
#
# where "<secret>" is the password.
#
# ATTENTION: This /root/.my.cnf should be readable ONLY
# for root !

/usr/local/mysql/var/mysqld.log {
# create 600 mysql mysql
notifempty
daily
rotate 3
missingok
compress
postrotate
# just if mysqld is really running
if test -n "`ps acx|grep mysqld`"; then
/usr/local/mysql/bin/mysqladmin flush-logs
fi
endscript
}

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

위의 파일을 /etc/logrotate.d 디렉토리에 복사만 하면 알아서 로테이트 하게 된다.
단..로그파일을 교체한후 mysqladmin flush-logs 를 적용하므로 root 홈디렉토리에
.my.cnf 파일을 만든후 MySQL 의 root 사용자의 암호와 사용자 명을 적어주어야 한
다.

vi /root/.my.cnf
--------------------------------------
[mysqladmin]
password = xxxxxxxxx
user = root

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

정상적인 로그 교체의 확인은 다음과 같이 하면 된다.

# logrotate -f /etc/logrotate.d/mysql-log-rotate


이밖에 --log-update 등의 옵션을 이용하면 수시로 로그파일의 뒤에 001,002 씩으로
번호가 증가 되면서 저장이 되므로 별도의 스크립트를 작성하여 관리해야 한다.

이는 각자 머리를 잘 짜면 될거 같다.

#!/bin/sh

find /usr/local/mysql/var -name "*.[0-9]*" -type f -mtime +3 -exec rm -f {} \;
/usr/local/mysql/bin/mysqladmin flush-logs

위와 같은 만들면 된다. 이는 "3일 지난 파일은 지워라" 로 cron 에 등록한뒤 적절한
시간마다 실행해주면 된다.

2011/09/11 20:24 2011/09/11 20:24
스팸메일 수신을 차단하기 위하여 실시간 스팸차단리스트(KISA-RBL)를 활용하는 방법입니다.

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

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

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

2011/09/07 20:26 2011/09/07 20:26
출처 : http://webarty.com 웹표준 국내 최초 카페 솔루션 출시 - 아티카페

사용자 삽입 이미지


아티카페 특징

  • 윈도우 기반의 ASP 언어 및 MS-SQL 2005 DB 사용으로 보다 안정적인 시스템

    - Windows Server 지원
    - MS-SQL 2005 또는 그 이상의 DB 서버
    - 스토어드 프로시져 기반으로 DB를 액세스 하기 때문에 보안이 강화되었습니다.
  • UTF-8 방식으로 개발되어 다국어 지원가능

    - 한글 뿐만 아니라 일어, 중국어 등 다양한 언어로 변환해서 사용이 가능합니다.
  • 쉬운 인터페이스와 관리자 기능 제공

    - 직관적인 인터페이스 구현으로 누구나 손쉽게 사용이 가능
    - 카페 별 개별 관리자 기능 제공
    - 최신, 인기, 주제별 카페 목록 출력 기능
    - 각종 통계 기능
    - 카페 디자인 변경이 쉽고 스킨을 신규로 제작해서 사용 가능
  • 웹 에디터 적용으로 편리한 문서 편집 및 높은 컨텐츠 생산성 확보

    - 각종 정보 첨부 기능 제공
    - 편리한 편집 기능 제공
  • 스킨 형태의 디자인

    - 다양한 스킨 제공으로 카페 운영자는 취향에 맞는 디자인 선택
    - 스킨을 사용하지 않고 개인 취향에 맞게 디자인을 변경해서 사용가능
  • 확장 및 커스트 마이징 용이

    - 자체 웹 솔루션을 보유하고 있어 클라이언트의 요구에 맞게 맞춤형 서비스로 확장 제공 가능
  • 빠른 처리 속도

    - 사용자가 증가 시 속도 향상의 효과 탁월
  • 다양한 광고설정

    - 사이트 총괄 관리 메뉴에서 배너를 등록으로 개설된 카페 노출

기능 및 특징

  • 카페 개설

    카페 개설

    운영하는 사이트에 회원으로 가입된 회원이 로그인 후 카페개설 메뉴를 통해 빠르게 실시간으로 카페 개설이 가능합니다.
    한 명의 회원은 여러 개의 카페를 개설 또는 관리할 수 있습니다.

  • 카페 기본정보

    카페 기본정보

    카페 운영에 관련되어 카페 운영 성격에 맞게 다양한 설정이 가능하며, 필요시 카페에 배경 음악의 삽입도 가능합니다.

  • 카페 메뉴 관리

    카페 메뉴 관리

    카페에서 사용할 메뉴를 카페 운영자가 추가하거나 삭제가 가능합니다.
    통합게시판, 사진게시판, 스탭게시판, 메모게시판, 출석부의 메뉴를 추가할 수 있으며, 메뉴를 그룹 지어 사용이 가능합니다.
    또한 메뉴의 출력순서를 자유롭게 변경할 수 있으며, 카페 상단에 출력되는 메뉴도 수정이 가능합니다.

  • 등록된 글 관리

    등록된 글 관리

    카페에서 등록된 글을 회원이 삭제시 복구가 가능한 휴지통 기능이 있으며, 등록된 글을 타 회원이 불량글로 신고한 경우 카페 운영자가 확인 후 조취를 취할 수 있는 기능이 포함되어 있습니다.
    게시물 등록시 태그를 입력한 경우 등록된 태그에서 카페 대표 태그로 지정할 수 있습니다.

  • 카페 멤버 관리

    카페 멤버 관리

    운영하는 카페에 신규로 회원 가입 시 가입 조건을 설정하거나, 운영회칙 및 히스토리 등록이 가능합니다.
    가입된 회원 중 활동이 두드러진 회원을 스탭으로 선정해서 카페를 함께 운영할 수 있으며, 카페 운영자는 스탭 마다 특정한 권한을 부여 할 수 있습니다.
    카페에 회의 가입 및 탈퇴가 쉬우며, 회원별로 등급을 지정해서 특정 메뉴에 접근하도록 할 수 있습니다.
    회원에게 메시지를 발송하거나, 간단한 이벤트를 진행할 수 있습니다.
    회원가입 통계를 확인할 수 있는 카페 통계 메뉴도 제공됩니다.

  • 카페 패쇄 및 위임

    카페 패쇄 및 위임

    카페 운영자는 카페를 패쇄 하거나 운영 권한을 다른 회원에게 넘길 수 있습니다.
    카페 패쇄시 패쇄 안내 공지를 등록하거나 가입된 카페 회원에게 안내 메일을 발송할 수 있습니다.
    15일단 회원들에게 패쇄 안내를 진행 후 패쇄가 가능하며, 매니저 위임은 실시간으로 처리됩니다.

  • 레이아웃 설정

    레이아웃 설정

    카페의 기본 레이아웃을 4가지 형태로 선택이 가능하며, 카페 메인에 원하는 메뉴를 넣거나 삭제 또는 게시물의 출력 개수를 설정할 수 있습니다.
    웹 위젯을 사용하거나 인기 검색어, 게시물랭킹, 멤버랭킹, 멤버소식의 기타 메뉴를 메인에 출력할 수 있습니다.

  • 디자인

    디자인

    카페 대문을 사용할 경우 노출되는 영역의 수정이 가능하며, 기본적으로 제공되는 스킨을 이용해서 카페의 디자인 변경을 손쉽게 할 수 있습니다.
    또한 사용자가 직접 세부적으로 디자인을 변경할 수 있으며, 타 업체에서 제공되는 웹 위젯을 추가해서 사용이 가능합니다.
    사이트 총괄 운영자는 각 카페 운영자에게 필요한 스킨을 제작해서 추가가 가능합니다.

  • 게시물 등록 에디터

    게시물 등록 에디터

    게시물을 등록하거나 카페 관리시 필요한 정보를 입력해야 하는 경우 에디터를 제공하기 때문에 편리한 문서 편집 및 높은 컨텐츠 생산성 확보가 가능합니다.
    에디터에서 제공하는 사진 업로드 기능으로 사용자는 편리하게 사진 및 파일 업로드가 가능합니다.

  • 총괄 운영자 관리 기능

    총괄 운영자 관리 기능

    카페 운영자 이외에 카페를 총괄 운영하는 관리자에게 별도의 관리자 프로그램이 제공되어 카페 사이트 운영에 편리합니다.
    등록된 카페를 한눈에 확인하거나 수정이 가능하며, 카페가 패쇄된 경우 패쇄 로그를 확인할 수 있습니다.
    카페 운영자에게 필요한 디자인 스킨을 직접 만들어서 업데이트가 가능하며, 각 카페에 노출되는 배너 관리 프로그램도 제공됩니다.

구축절차

아티카페 구축절차 구축 상담 및 견적 > 구축 계약체결 > 카페 솔루션 구축 > 비용결제 > 카페 솔루션 사용

카페 솔루션을 적용하시려면 먼저 구축 상담 및 견적을 받고 계약을 체결해야 합니다.
사이트 규모 및 사용자 수에 따라 비용이 달라집니다.

2011/09/07 20:05 2011/09/07 20:05
출처 : http://webarty.com 모바일 홈페이지 구축 웹아티 사이트 - 웹표준 및 국내 최고 아티보드 3.0 솔루션으로 제작

         스마트폰 으로 위 웹아티 사이트에 접속 하면 정상 적인 화면을 볼수 있습니다.
         
         구글 에서 [ 웹아티 ] 검색하면  검색 엔진에서 가장 선호 하는 검색이 이루어질수 있습니다.
         
          이건 국내 최고 홈페이지 솔루션 [ 아티보드 3.0 ] 으로 제작 되어 가능한 일입니다.  
MOBILE Homepage 이제 모바일 홈페이지가 트랜드입니다.

스마트폰 가입자가 1000만 시대에 더 이상 모바일 홈페이지는 선택이 아닌 필수가 되었습니다.
모바일로 접속하면 모바일 홈페이지가!
사용기기가 모바일인지 일반 PC인지 체크하여 자동으로 사용자 환경에 맞는 버전의 홈페이지로 자동접속됩니다.

코딩방법: 웹접근성 코딩을 기반으로 합니다.


모바일로 접속하면 모바일 홈페이지가!

모바일 사이트 & 모바일 오피스란

휴대폰에서 일반 웹에 접속할 수 있는 브라우징 기술로 모바일 웹에 최적화된 웹사이트를 의미한다.
스마트폰이 점점 대중화되고 무료 Wi-Fi존이 확산되면서 휴대폰을 이용한 인터넷 이용자가 급증하고 있는 현실 속에서 e-비즈니스를 꿈꾸는 사업장이라면,이제는 모바일웹은 선택이 아닌 필수의 시대가 된 것이다.

모바일 사이트 & 모바일 오피스의 특징

  • 휴대폰의 휴대성이 최대 장점으로 언제 어디서나 사이트 방문이 가능
  • 모바일에서 보기 편한 글씨체,크기,작은 이미지 사용으로 속도가 빠르고 보기 편함
  • 내용 위주로 구성된 최적화된 사이트로 사용자 인터페이스 구조를 가지고 있음

모바일 사이트 & 모바일 오피스 내에서 활용 가능한 기능들

  • 인터넷 시장과 함께 모바일 시장으로 새로운 비즈니스 시장으로 급성장(블루오션)
  • 무료 Wi-Fi,무제한 요금제로 모바일 데이터 통화료가 낮아지고 있습니다.
  • 언제 어디서든 홈페이지에 접속하여 고객과의 커뮤니케이션이 가능하고 관리가 편리합니다.
  • 연령대,지역,성별,관심도를 타겟설정이 가능합니다.
  • 일본에서 전자상거래 매출의 20%가 모바일을 통하여 발생하고 있습니다.

적용사례

모바일로 접속하면 모바일 홈페이지가!

기능안내

  • 전화바로걸기

    전화바로걸기

    모바일웹 접속하고 바로 전화 걸 수 있는 기능입니다.
    전화번호 누르지 않고 클릭! 한번으로 전화 걸기가 가능합니다.

  • 지도API 서비스

    지도API 서비스

    모바일웹상의 지도에 원하는 메시지나,전화번호등 여러 형태의 문구를 널어 주면 건물이나 정확한 위치를 확인 할 수 있습니다.API서비스는 구글,다음 지도를 지원합니다.

  • QR코드

    QR코드

    흑백 격자무늬로 정보를 나타내는 1차원 바코드입니다.
    일반적인 숫자정보가 저장된 바코드와는 달리 숫자,알파벳,한자등의 문자 데이터를 저장할 수 있습니다.

  • 예약폼서비스

    예약폼서비스

    예약접수 문의접수 증 다양한 용도로 사용할 수 있는 입력폼입니다.

  • 기타기능안내

    모바일로 접속하면 모바일 홈페이지가!

2011/09/07 20:00 2011/09/07 20:00
출처 : http://webarty.com


서비스안내

웹아티의 유지보수 정책

  • 정책1

    웹아티는 한번 만들고 거기서 끝나지 않습니다. 신속하고 안정적인 유지보수서비스를 제공하기 위해 웹사이트제작 고객에 한하여 유지 보수 계약을 맺고 있습니다.

  • 정책2

    웹아티는 한번 만들고 거기서 끝나지 않습니다. 신속하고 안정적인 유지보수서비스를 제공하기 위해 웹사이트제작 고객에 한하여 유지 보수 계약을 맺고 있습니다.

  • 정책3

    웹아티는 한번 만들고 거기서 끝나지 않습니다. 신속하고 안정적인 유지보수서비스를 제공하기 위해 웹사이트제작 고객에 한하여 유지 보수 계약을 맺고 있습니다.

유지보수 정책

웹아티 홈페이지 유지보수 서비스는 이런 업체에 필요합니다!

  • 웹아티에서 홈페이지를 제작한 경우
  • 기존에 홈페이지가 있는 상태에서 홈페이지 전문관리 인원을 두기 어려운 경우
  • 현재 관리를 맡고 있는 업체와 의사소통이 어려운 경우
  • 홈페이지 제작업체가 폐업한 경우
  • 홈페이지를 계속해서 관리를 맡겨야 할 경우
  • 편안하고 친절한 상담과 정확한 작업 처리를 원하는 경우
2011/09/07 19:55 2011/09/07 19:55
출처 : http://webarty.com 공개용 국내 최고 홈페이지 제작 솔루션 아티보드 3.0 다운 받아서 설치 할수 있습니다.

서비스 안내 서비스 Promise

서비스의 장점

  • Web2.0으로 UE 제작

    기존의 HTML 코딩 방식을 떠나 웹표준 방식으로 홈페이지를 구축해서 외부 브라우저 호환성을 높이고 모바일 및 Personal assistants 기기와 호환성을 위한 작업 방식 제안 W3C 웹표준화 정책에 따른 CSS 작업으로 제작됩니다.

  • 풍부한 제작경험

    수많은 홈페이지를 제작한 경험과 노하우를 종합하여 홈페이지의 방향과 컨셉을 결정하며, 메인 메뉴의 종류와 타이틀 및 첫 페이지 내용, 각 하부의 페이지에 들어갈 제목과 내용등을 결정합니다.

  • 자체적으로 제작된 솔루션 제공

    홈페이지 운영 및 관리를 보다 편리하게 할 수 있도록 자체적으로 제작된 솔루션을 제공해 드립니다.
    이미 수많은 사용자에게 검증된 솔루션은 안정적이며, 다양한 부가 기능을 장착하고 있습니다.
    게시판, 회원관리, 통계, 팝업, 설문조사 등의 다양한 기능을 갖추고 있으며, 필요한 경우 자체적으로 개발해 드립니다.

  • 디자인 트랜드

    빠르게 변화하는 디자인 트랜드와 고객님의 요청 컨셉을 조화시켜 최고의 퀄리티와 개성있는 홈페이지를 구축합니다.

  • 브랜드 가치의 최대화

    최대의 브랜드 가치를 살리기 위해 메인페이지의 플래시 이미지로 제품 또는 상품의 가치를 높이며, 메인 페이지의 구성과 분위기에 맞게 각각의 하부 페이지 디자인을 통일감 있게 구성합니다.

  • 고객과의 커뮤니케이션을 제공

    홈페이지에 필요한 게시판, 갤러리, 웹진, 설문조사, 회원관리등의 프로그램을 제공하여 홈페이지를 방문한 사용자들과의 정보교환 및 새로운 업데이트 내용을 실시간으로 구현합니다.

  • 사후관리

    홈페이지 제작이 완료되었다고 하더라도 홈페이지의 문제가 발생하면 해결해 드립니다.
    또한 요청에 따라 홈페이지 업그레이드가 필요한 경우 저렴한 가격으로 서비스를 해 드립니다.

  • 자체 서버 운영

    자체적으로 다수의 서버를 운영하고 있어, 고객님의 홈페이지 제작완료 후 웹호스팅 서비스를 해 드립니다.
    수년간 서버 관리 및 운영 노하우로 고객님의 홈페이지가 안정적으로 서비스가 될 수 있도록 도와 드립니다.
    좋은 웹사이트는 업체와 고객이 함께 만들어 갑니다.
    고객님이 제작을 원하시는 홈페이지의 고품격 퀄리티와 안전을 위해 위해 반드시 체크할 사항입니다.

2011/09/07 19:54 2011/09/07 19:54

출처 : http://webarty.com 공개용 웹표준 통합 솔루션 아티보드 3.0

웹표준이란?

홈페이지가 보일 수 있는 모든 곳에서 정상적으로 똑같이 보이게 하는 것
오프라인 문서를 웹에 동일하게 작성한 것으로 국제 표준화 단체인 w3c가 권고한 표준안에 따라 목적과 방법에 맞게 웹에서 표준으로 사용되는 기술을 말합니다.
현재 사용자들은 IE뿐만 아니라 파이어폭스, 오페라, 사파리 등 다양한 브라우저를 사용함에 따라 비표준방식의 제작형태로는 원활한 접근이 어려워졌습니다. 따라서 어떠한 운영체제나 브라우저를 이용하더라도 같은 결과물을 볼 수 있도록 하기 위하여 표준을 지켜 코딩하도록 해야 합니다.

웹표준의 장점

  • 수정과 관리용이
    콘텐츠의 올바른 구조화, CSS로 시각표현을 통일하여 제어하게 되어 페이지 제작의 부담이 감소됩니다.
  • 웹 접근성 향상
    다양한 브라우징 환경에 대응이 가능, 핸디캡을 가진 사용자(시각장애인 등)들을 배려할 수 있다.
  • 검색엔진 최적화
    검색엔진의 크롤러(Crawler)는 웹페이지 소스를 있는 그대로 해석하므로 적절하게 구조화된 웹페이지는 검색 로봇이 잘 검색할 수 있으며 그만큼 비즈니스 기회가 많아집니다.
  • File Size 축소, 서버 저장 공간 절약
    소스의 효율적 작성은 파일사이즈와 서버공간을 절약할 수 있으며, 동시에 화면표시에 소요되는 시간을 줄일 수 있습니다.
  • 휴대폰, PDA 등의 장치 호환
    별도의 모바일 홈페이지를 제작하지 않아도 모바일에서 깨지지 않는 홈페이지의 형태 그대로 보입니다.

누가 웹표준을 정하는가?

  • - W3C (World Wide Web Consortium) - 다른 단체들도 있으며 관여는 하지만 가장 중심적인 역할 수행
  • - 웹표준의 대두 - 미국 Wired News가 2002년 9월 XHTML + CSS 기반으로 재구축(웹표준 엄격히 준수)되면서 파일사이즈가 줄어들고
  • - 랜더링속도가 향상, 각종 업데이트의 효율적 진행 등으로 웹표준 준수의 경제효과 입증

인프라와 트렌드에서 생각하는 웹표준

  • - 웹표준 경시와 브라우저 전쟁 - 화려한 요소에만 치우친 상태에서 웹브라우저의 경쟁 가속화
  • - ISO(국제표준화기구) - 공업규격 국제표준화 단체: 언어코드, 유니코드, ISO-HTML 규정
  • - IETF - 인터넷기술 표준화 단체: 통신프로토콜에 관여
  • - IANA - IP어드레스와 도메인명 등의 주소 자원 표준화와 분배를 담당
  • - OASIS - e비지니스의 표준개발, SGML과 XML툴, 웹서비스 등의 표준화 담당

구조언어와 표현언어

구조언어
HTML : 가장 잘 알려진 마크업 언어, Strict, Transitional, Frameset DTD 세가지 문서형
XHTML 1.0 : HTML을 XML로 재구축한 마크업언어. HTML처럼 Strict, Transitional, Frameset DTD 세가지 문서형
XHTML 1.1 : 모듈화된 XHTML. 1.0의 Strict만 인정
XML 1.0 : 기반언어이며 기반기술에 Namespaces, Base, Events, Infoset, XIncludes가 있고, 확장기술에 Schema, XQuery
Xpath, XLink, XForm, XSL 등이 있다. XML 작성 어플리케이션으로 마크업언어 'XHTML'과 수식기술언어 MathML, 그래픽언어 SVG 멀티미디어언어 SMIL이 있다
HTML이 아니라 XHTML인 이유
빠른 데이터 처리와 안정적 브라우저 동작, 데이터 재이용성과 정보공유 촉진, 네임스페이스 이용과 다양한 기계에 대응

표현언어
CSS : 웹페이지의 시각표현을 지정하는 언어.

구조언어와 표현언어

웹접근성이란?

누구나 웹에 접근할 수 있어야 한다
웹접근성이란 모든 인터넷 사용자가(장애인, 고령자 등이 포함된) 웹 사이트에서 제공하는 정보에 접근하고 이해할 수 있도록 보장하는 것입니다.
일반적으로 웹 사이트는 장애를 가지지 않은 일반 사용자를 대상으로 만들어져 있어 특정 장애(시각, 청각 등)를 가진 사용자가 접근할 수 없거나 접근하기 불편하도록 되어 있습니다.

웹 접근성은 이러한 사용자의 신체적, 환경적 조건에 관계없이 웹에 접근할 수 있고 정보를 이용할 수 있도록 하는 지침을 말합니다. 여기서 신체적 조건이란 장애인, 노인, 저시력자와 같이 분류할 수 있으며, 환경적 조건이란 네트워크 환경, 브라우저 유형, 저속사양컴퓨터, PDA 같이 기타 하드웨어적인 측면을 말할 수 있습니다.

웹접근성의 장점

  • 장애인, 고령자 등을 포함한 모든 사람들이 웹에서 원하는 정보들을 자유롭게 접근하고 이용할 수 있습니다.
  • 2008년 4월 11일 부터 시행된 「장애인차별금지 및 권리구제 등에 관한 법률」 및 동법 시행령들 관련 규정을 준수할 수 있게 됩니다.
  • 소음이 많은 환경 등 주변 환경에 영향 없이, 모바일, PDA 등과 같은 새로운 기기등장과 상관 없이 사용 가능한 웹을 제공하게 됩니다.
  • 웹 페이지 구성이 논리적으로 최적화되어, 디자인 및 설계의 효율성 제고는 물론 개발, 유지보수, 개편 비용 절감 효과를 가져오게 됩니다.
  • 기업의 사해적 책임(CSR)이 중요하게 부각되고 있는 시점에서 홈페이지를 운영하고 있는 기관 및 단체에 대한 긍정적 이미지 형성에 도움이 됩니다.

Cross Browsing

익스플로러, 파이어폭스, 구글크롬, 사파리, 오페라 등
어느 웹 브라우저로 접속해도 깨짐없이 볼 수 있도록 최적화 작업

Cross Browsing

2011/09/07 19:51 2011/09/07 19:51
개발을 하다보면 euc-kr 파일인코딩을 utf-8 로 변경할 경우나 그 반대의 경우 등등 여러가지 경우가 발생한다.

인터넷 검색해서 나오는 쉘 스크립트의 경우 이미 utf-8일 경우도 다시 utf-8로 변환해서 깨지는 현상이 발생하여 변환시 에러가 안날 경우만 변경되도록 처리가 필요하였다.

그럴 경우를 위해 일괄적으로 특정 디렉토리의 파일들을 찾아서 euc-kr -> utf-8 로 만드는 쉘 스크립트를 만들어서 돌려보니 잘 작동해서 올린다.

html, inc, php 이외의 파일을 변환하려면 중간에 "*[php|inc|html?]" 부분을 수정하면 된다.

================ 스크립트 시작 ==================

#!/bin/bash
if [ $# != 3 ]
then
echo "Usage : char_convert.sh [char_from] [char_to] [dir]"
exit 0
fi

charfrom=$1
charto=$2
objdir=$3

for x in $(find $objdir -type f -name "*[php|inc|html?]") ; do

iconv -f $charfrom -t $charto $x > $x.utf-8
if [ $? != 0 ]
then
echo "-----------------------------------"
rm -f $x.utf-8
echo "deleted $x.utf-8"
else
echo "-----------------------------------"
rm -f '$x'
echo "deleted $x"
mv $x.utf-8 $x
echo "mv $x.utf-8 -> $x"
fi

done

exit 0

================ 스크립트 종료 ==================

PS. 리눅스 iconv 기능을 이용했으므로 없다면 설치해야 함.
PS. PHP 를 사용하는 분들이라면 기본적으로 있을거라 생각함.                                       
2011/09/07 01:36 2011/09/07 01:36
FreeTDS 나 php_mssql.dll 을 이용하여 Microsoft SQL 서버에 프로시져를 호출 할때에 해당 프로시져의 인자를 설정하고 그에 해당하는 자료 형을 지정하여 실행하는 방법

SET ANSI_NULLS ON
Null 값과 함께 사용될 경우 Equals(=)와 Not Equal To(<>) 비교 연산자의 ISO 호환 동작을 지정합니다.

SET ANSI_WARNINGS ON
여러 오류 상황에 대한 ISO 표준 동작을 지정합니다.





자료형
SQLCHAR DBCHAR
SQLVARCHAR DBCHAR
SQLTEXT DBCHAR
SQLBINARY DBBINARY
SQLVARBINARY DBBINARY
SQLIMAGE DBBINARY
SQLINT1 DBTINYINT
SQLINT2 DBSMALLINT

SQLINT4 DBINT
SQLFLT4 DBFLT4
SQLFLT8 DBFLT8
SQLBIT DBBIT
SQLMONEY4 DBMONEY4
SQLMONEY DBMONEY
SQLDATETIM4 DBDATETIM4
SQLDATETIME DBDATETIME
SQLDECIMAL DBDECIMAL
SQLNUMERIC DBNUMERIC
2011/09/07 01:30 2011/09/07 01:30
Javascript 예약어
break continue do for import new this void case default else function in return typeof while comment delete export if label switch var with

Java keyword (Javascript 예약됨)
abstract implements protected boolean instanceOf public byte int short char interface static double long synchronized false native throws final null transient float package true goto private

ECMAScript 예약어
catch enum throw class extends try const finally debugger super

그외 예약어
alert eval Link outerHeight scrollTo Anchor FileUpload location outerWidth Select Area find Location Packages self arguments focus locationbar pageXoffset setInterval Array Form Math pageYoffset setTimeout assign Frame menubar parent status blur frames MimeType parseFloat statusbar Boolean Function moveBy parseInt stop Button getClass moveTo Password String callee Hidden name personalbar Submit caller history NaN Plugin sun captureEvents History navigate print taint Checkbox home navigator prompt Text clearInterval Image Navigator prototype Textarea clearTimeout Infinity netscape Radio toolbar close innerHeight Number ref top closed innerWidth Object RegExp toString confirm isFinite onBlur releaseEvents unescape constructor isNan onError Reset untaint Date java onFocus resizeBy unwatch defaultStatus JavaArray onLoad resizeTo valueOf document JavaClass onUnload routeEvent watch Document JavaObject open scroll window Element JavaPackage opener scrollbars Window escape length Option scrollBy

출처 :
http://www.quackit.com/javascript/javascript_reserved_words.cfm
2011/09/07 01:28 2011/09/07 01:28

Javascript 에서 PHP 함수 사용

Javascript 에서 PHP에서 많이 사용되는 함수를 사용하고자 할때 함수를 다시 만들거나 , 또는 PHP에서 출력을 한후에 Javascript 에서 사용할수 있도록 변수 등에 저장한 후 사용을 합니다. 기본적인 함수를 일일이 만들거나 또는 PHP에서 출력을 하지 않고 바로 PHP의 유용한 함수들을 사용할수 있는 PHP.js 프로젝트가 있습니다. 많은 브라우저에서 동일하게 동작을 하고 사용방법또한 손쉽게 사용가능합니다.

PHP.js (http://www.phpjs.org)

사용자 삽입 이미지
PHP.js

다운로드 (http://phpjs.org/packages/download/308/name:php.default.min.js)

PHP.js 지원 함수 리스트
Function overview (http://phpjs.org/functions/index)
2011/09/07 01:27 2011/09/07 01:27

HTML 5 를 이용한 웹 애플리케이션을 개발할때 실시간으로 표현시 느린 부분 이나 즉시 수행해야 할 부분을 미리 읽어 들이거나, 다음 접속때, 오프라인된 내용을 이용할때 미리 저장된 데이터를 사용할 수 있도록 하는 방법입니다. 예를 들어 특정 버튼 클릭시 음성 파일을 재생한다고 했을때 캐시 되지 않고 실시간으로 표현하기 위해서는 이벤트가 발생한 후 음성 파일을 다운로드 후 재생을 하게 됩니다. 이때 발생하는 문제점 중에 하나가 버튼을 클릭 한 후 바로 재생을 못하고 다른 동작이 일어 났을때 재생이 될 수 있다는 점이죠. 이런 것을 최소한 방지 하기 위해 미리 읽어 들일 파일을 브라우저에게 알려주는 것입니다.

W3C HTML Application Cache

<DOCTYPE html>


캐시 파일의 MIME 타입은 text/cache-manifest 입니다.

CACHE MANIFEST
#해당 캐시 파일에 대한 설명 , 버전, 갱신일 등.

# 해당 웹 페이지에서 캐시할 내용입니다.
CACHE:
#캐시할 파일 
./cache.jpg
http://example.com/cache.png

# 네트웍 장애(또는 비슷한 현상 : 연결실패등)시 사용할 내용입니다.
FALLBACK:
#대상 파일	#대체할 오프라인 파일
./cache.jpg ./cache_offline.jpg

# 오프라인시 사용 불가능 한 파일 입니다. (온라인에서만 접근 가능한 파일)
NETWORK:
./networkimg.jpg

위 처럼 사용합니다.
HTML 5 Application cache 는 이벤트를 발생시킵니다.

interface ApplicationCache {

	// 상수 : 업데이트 상태
	const unsigned short UNCACHED = 0;	// 캐시가 안되었음 (캐싱전)
	const unsigned short IDLE = 1;	// 유휴상태 
	const unsigned short CHECKING = 2;	// 캐시 채크중
	const unsigned short DOWNLOADING = 3;	// 다운로드중
	const unsigned short UPDATEREADY = 4;	// 업데이트 준비
	const unsigned short OBSOLETE = 5;	// 캐시 크룹이 사용할 수 없는 상태임
	
	// 상태 값
	readonly attribute unsigned short status;
	
	// 업데이트
	void update();	// 업데이트를 다운로드 하도록함
	void swapCache();	// 캐시된 내용 중 최근 변경된 값을 확인합니다. 
	
	// 이벤트 핸들러 
	attribute Function onchecking;	// 캐시를 체크하고 있음
	attribute Function onerror;	// 오류발생
	attribute Function onnoupdate;	// 업데이트가 안되었다. 
	attribute Function ondownloading;	// 다운로드 중
	attribute Function onprogress;	// 다운로드 비율
	attribute Function onupdateready;	// 업데이트 준비 됨
	attribute Function oncached;	// 캐시 완료
	attribute Function onobsolete;	// 캐시 사용 할 수 없음
};
ApplicationCache implements EventTarget;

// cache 객체 
var cache = window.ApplicationCache;	// window 에서 가져옴
2011/09/07 01:26 2011/09/07 01:26
리눅스에서 사용하는 dd 를 Windows용으로 포팅한 것이다.

부트섹터 덤프나 디스크를 덤프할때 많이 사용하는 프로그램이다.

dd for Win32


배포 : http://www.chrysocome.net/dd

최신버전 0.6beta-source    

dd for windows

dd - convert and copy a file

This version does not actually do any conversion but it allows the flexible copying of data under in a win32 environment. At the moment block devices under Win9x are not supported but that will be added soon.

Read more in the Wikipedia entry for dd

Usage

dd [bs=SIZE[SUFFIX]] [count=BLOCKS[SUFFIX]] if=FILE of=FILE [seek=BLOCKS[SUFFIX]] [skip=BLOCKS[SUFFIX]] [--size] [--list] [--progress]

bs is the block size. The block size can be specified in bytes or with one of the following suffix

DescriptionSuffixSize
Charactersc1
Wordsw2
Double Wordsd4
Quad Wordsq8
Kilobytesk1,024
MegabytesM1,048,576
GigabytesG1,073,741,824

The default block size is 512 which will work for most files and devices but the copy will be a lot faster if you use a larger block size. For example a floppy disk read with bs=1k count=1440 takes almost twice as long than if you use bs=1440k count=1. Don't make the block size too large because windows will run out of memory. 1M is probably a good size and upper limit. Most CD/DVDs have a 2k sector size and probably will not work with a block size which is not a multiple of that.

skip is the distance to skip over the input file before reading is commenced. It is in blocks so the distance will be skip * blocksize. You can also use a suffix here so skip=1k will skip 1024 blocks. You can remember that skip relates to the input file by thinking of a 'skipping rope'.

seek is the distance to seek over in the output file before writing is commenced. It is also in blocks do the distance will be seek * blocksize. You can also use a suffix here so seek=1k will seek 1024 blocks. You just have to remember that if skip is for in then seek is for out.

count is the number of blocks to copy. If it is not specified then the dd will continue until the end of the file/device is reached. On many usb devices this is not reliable so you should use --size to guess the size of the device, see below. You can also use a suffix here so count=1k will copy 1024 blocks.

Using --size

Traditionally when using dd, if you wanted to copy an entire device, you did not specify a block count and dd would read until it reached the end of the device. If you tried to read past the end of the device, the data up to the end of the device would be returned and if you kept reading you would get an error message. Windows however does not always do this so --size will tell dd to figure out the size of the device and make sure it does not read past that point. This is important for USB sticks which stop working if you read past the end of them. This is not on by default because getting the correct size of the device is not always possible. Some devices also keep returning bogus data past the end of the device without returning a suitable error code

Using --list

Windows provides a number of ways to name a device. The --list will output the preferred names. Under NT4, only the \\?\Device\Harddisk<n>\Partition<n> method is available. Partition0 is the entire disk. Under Windows XP, some partitions may not have a Volume device. In this case you can still use the Harddisk<n>\Partition<n> name.

Windows 2000 and later have Volume devices which are unique GUIDs which identify a disk or partition (what MS call a Volume). These are listed along with any mount point that they may be mounted on. Most of the time this is a drive letter but it may be a path on another filesystem. If you want to read the underlying device, do not include the trailing \ character. If the volume is not mounted there is no easy way to identify it so be careful. Under XP SP2, many partitions can not be read directly, even if they are not in use. There is a work around which I call reading partitions via the back door.

Sample output

dd --listrawwrite dd for windows version 0.4beta1. Written by John Newbigin <jn@it.swin.edu.au> This program is covered by the GPL. See copying.txt for details Win32 Available Volume Information \\.\Volume{5cd94d2c-3251-11d9-9444-806d6172696f}\ link to \\?\Device\HarddiskVolume1 fixed media Mounted on \\.\c: \\.\Volume{129b1243-3252-11d9-b167-806d6172696f}\ link to \\?\Device\CdRom0 CD-ROM Mounted on \\.\r: \\.\Volume{129b1242-3252-11d9-b167-806d6172696f}\ link to \\?\Device\Floppy0 removable media Mounted on \\.\a: \\.\Volume{e3429891-0eb9-11da-b18f-000d60dc98cd}\ link to \\?\Device\Harddisk1\DP(1)0-0+3 removable media Mounted on \\.\d: NT Block Device Objects \\?\Device\CdRom0 \\?\Device\Floppy0 \\?\Device\Harddisk0\Partition0 link to \\?\Device\Harddisk0\DR0 Fixed hard disk media. Block size = 512 \\?\Device\Harddisk0\Partition1 link to \\?\Device\HarddiskVolume1 \\?\Device\Harddisk1\Partition0 link to \\?\Device\Harddisk1\DR2 Removable media other than floppy. Block size = 512 \\?\Device\Harddisk1\Partition1 link to \\?\Device\Harddisk1\DP(1)0-0+3 Removable media other than floppy. Block size = 512 Virtual devices /dev/zero /dev/random

Using --progress

--progress is an non-standard enhancement to dd which will show you progress as each block is copied.

Virtual devices

Virtual devices are a new feature in version 0.4beta1.

Because windows does not have devices like the unix /dev/zero or /dev/random these have been implemented inside dd. You can use these as input files to supply an infinite amount of zeros or pseudo random data.

Standard I/O

Standard Input (stdin) is now the default input file if you do not specify a value for if. You can also explictly use stdin with if=-. Standard Out (stdout) is now the default output file if you do not specify a value for of. You can also explictly use stdout with of=-. Progress and error messages are written to Standard Error (stderr). This allows the use of dd with pipe commands.

Safety with --filter=

To prevent accidental overwriting of the wrong disk, a safety filter can be enforced. Available filters are:

fixedOnly write to a fixed disk
removableOnly write to a removable disk
diskOnly write to any kind disk
partitionOnly write to a partition

You can enforce a filter by renaming dd.exe to dd-<filter>.exe. For example, dd-removable.exe can only write to removable disks like USB and CF, making sure that you don't accidently write to a fixed hard disk.

Examples

Make an image of a floppy disk:

dd if=\\.\a: of=c:\temp\disk1.img bs=1440k

Write the image back to a floppy disk:

dd if=c:\temp\disk1.img of=\\.\a: bs=1440k

Rip an .iso from a CD

dd if=\\?\Device\CdRom0 of=c:\temp\disc1.iso bs=1M

Read a partition from a USB memory device

dd if=\\.\Volume{c18588c0-02e9-11d8-853f-00902758442b} of=c:\temp\usb1.img bs=1M

Read the entire USB memory device

dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\usb2.img bs=1M --size --progress

You can write to any file or block device which windows will allow you to write to. You can use the standard \\.\ notation for win32 exported devices or the dd specific \\?\ notation to access windows native devices.

Note: You can not write to a CD with this program. Get microsoft cdburn from the windows XP resource kit.

Note: Floppy disks are extremely unreliable. If you get errors, please try another floppy disk or reformatting the disk.

Downloads for dd family
Program Version Content Format Platform Download
Installation Instructions
dd0.6beta3Source.zipDelphi dd-0.6beta3.src.zip
dd0.6beta3Binary.zipWindows dd-0.6beta3.zip
dd0.6beta1Source.zipDelphi dd-0.6beta1.src.zip
dd0.5Binary.zipWindows dd-0.5.zip
dd0.4beta4Binary.zipWindows dd-0.4beta4.zip
dd0.4beta4Source.zipDelphi dd-0.4beta4.src.zip

Changes in version 0.6beta3

  • add errorlevel exit code
  • progress is written to stderr

Changes in version 0.6beta2

  • Implemented of=/dev/null which will just throw away the data
  • skip on stdin now works
  • fix checking size of floppy disks

Changes in version 0.6beta1

  • --progress output is in the same unit as bs is specified with
  • new filter type 'file' which will Only write to a fileystem file
  • new feature id=<drive>/od=<drive> for input disk and output disk. if <drive> is the only partition on a disk, then the entire disk is selected. Eg: if you insert a USB disk and it is mounted as f: then 'id=f:' will select the USB disk (not just the partition like if=\\.\f: would do)

Changes in version 0.5

  • count, seek and skip can now use a multiplicative suffix like bs
  • stdin and stdout are now the defaults

Changes in version 0.4beta6

  • Implemented of=- for stdout
  • Renamed if=- for stdin
  • Messages are now printed to stderr

Changes in version 0.4beta5

  • If a partial block write fails, the buffer is padded to the end of the block and the write is attempted again
  • This allows disk images which are not an exact multiple of the block size to be written to disk

Changes in version 0.4beta4

  • Implemented if=stdin
  • --filter= added

Changes in version 0.4beta2

  • --list shows disk and partition sizes
  • --size added

Changes in version 0.4beta1

  • --list shows correct syntax for drive letters
  • virtual devices added

Changes in version 0.3

  • Modified native device scan to find noncontiguously numbered devices
  • Show symlink destinations in device scan
  • Open source file with FILE_SHARE_READ
  • Stupid bug opening native output devices (assigned handle to input instead of output)
  • Stupid bug where native devices were always read only
  • added progress indicator

Alternate versions

This is a list of other dd tools for windows from other projects:

This is a list of other dd tools for linux/unix:

Original dd for windows web site

License & Copyright

dd is owned and copyright by Chrysocome and John Newbigin. It is made available under the terms of the GPL. Other licensing is available on request.

Development on this project is funded by donations. If you like it, please donate. As little as $5 can ensure that dd continues to be maintained in the future.

2011/09/07 01:22 2011/09/07 01:22
PHP 에서 원격지의 서버에 접속해서 데이터를 교환하거나 , 특정 프로그램을 실행시키기 위해 사용할 수 있다.

준비물 : OpenSSL(lib), libssh2, php_ssh2

리눅스 시스템
1. OpenSSL http://www.openssl.org
직접 다운로드 (http://www.openssl.org/source/openssl-0.9.8k.tar.gz)

2. libssh2 http://sourceforge.net/projects/libssh2/
직접 다운로드 (http://jaist.dl.sourceforge.net/sourceforge/libssh2/libssh2-1.1.tar.gz)

3. ssh2 PHP extension http://pecl.php.net/package/ssh2
직접 다운로드 (http://pecl.php.net/get/ssh2-0.11.0.tgz)

OpenSSL 설치


우선 소스를 적당한 디렉토리 (예제에서는 /usr/local/src 를 사용함) 에 다운로드 받는다.
# tar zxvf openssl-0.9.8k.tar.gz
# cd openssl-0.9.8k
# ./config 또는 ./Configure --linux-elf --prefix=/usr/local/OpenSSL
# make
# make install

Libssh2 설치


소스를 다운로드 받고 적당한 디렉토리에 타르볼을 해제한다.
# tar zxvf libssh2-1.1.tar.gz
# cd libssh2-1.1
# ./configure (기본적으로 설치는 /usr/local 에 이루어진다. )
# make
# make install
설치가 완료된 후에 /usr/local/lib 에 libssh2.so 파일이 존재한다.

PHP ssh2 Extension 설치


# tar zxvf ssh2-0.11.0.tgz
# cd ssh2-0.11.0
# phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
# ./configure
# make
# cp .libs/ssh2.so /usr/local/php/
(이 예제는 PHP Extension을 /usr/local/lib 에 복사를 한다.)
# vi /usr/local/lib/php.ini
extension=ssh2.so 를 추가 시켜준다.
** 여기서 extension_dir의 경로가 /usr/local/php 로 설정이 되어있고 , 시스템마다 다른경로로 표현이 될수 있음
# php -m | grep ssh2
ssh2

설치가 완료 되었으므로 Apache 웹서버를 재 시작해준다.

PHP ssh2 Extension 설치 후 해당 Extension 사용방법이다.

사용자 삽입 이미지

phpinfo() 구문을 실행 했을때 위와 같이 ssh2 확장이 설치가 되어 있어야 한다.

 'diffie-hellman-group1-sha1',
		'client_to_server' =>	// 클라이언트 -> 서버
			array(
				'crypt' => '3des-cbc',	// 암호화 방식은 3des-cbc 로 사용하고 
				'comp' => 'none'		// 압축은 사용하지 않는다.
			),
		'server_to_client' => 	// 서버 -> 클라이언트 
			array(
				'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc',	// 암호화 방식
				'comp' => 'none'		// 압축사용여부
			)
	);

	// SSH 에 접속한다. 
	$rCon = ssh2_connect('125.***.50.***', 22, $arMethod);
	$bLgn = ssh2_auth_password($rCon ,'lovelgw' , '********');	// 계정 , 비밀번호를 적어 넣는다.
	
	var_dump($bLgn);	// true로 나오면 정상 접속
	
	// 프로그램 실행
	
	$strExec = '/usr/local/bin/php -m';
	$rStream = ssh2_exec($rCon, $strExec);
	
	stream_set_blocking($rStream, true);	// 스트림을 블럭킹 모드로 변환시킨다. 
	echo fread($rStream, 10240);		// 값을 가져온다. 10240 Byte까지만
?>

위와같은 식으로 사용하면 된다.    
2011/09/07 01:17 2011/09/07 01:17

Memcached 사용하기

Memcached 데몬
사이트 : http://www.danga.com/memcached/
다운로드 : http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz

Memcached PHP Extension
사이트 : http://pecl.php.net/package/memcache
다운로드 : http://pecl.php.net/get/memcache-2.2.5.tgz

LibEvent
사이트 : http://monkey.org/~provos/libevent/
다운로드 : http://monkey.org/~provos/libevent-1.4.11-stable.tar.gz

Memcached 는 데이터를 메모리에 저장하여 이용할 수 있는 데몬이다. 분산처리가 가능하고 매우 빠른 성능을 지닌 캐시 이다.
(편의상 root로 작업)

1. Memcached 설치

우선 Memcached 를 적당한 디렉토리 (/usr/local/src) 등에 다운로드를 받는다.
# tar zxvf memcached-1.2.8.tar.gz
# cd memcached-1.2.8
# configure --prefix=/usr/local/memcached
* checking for libevent directory... configure: error: libevent is required 메세지가 나오면 libevent 라이블러리를 설치를 해줘야 한다.

# make
# make install

1-1 memcached 실행
# cd /usr/local/memcached (configure 에서 지정한 prefix로 이동)
# bin/memcached -u [실행될 사용자] &
* 실행될 사용자는 memcached 데몬이 -u 옵션으로 지정된 사용자로 실행이 된다 (root로 지정하면 안됨)
# netstat -na | grep 11211
->
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 :::11211 :::* LISTEN

포트를 확인한다.

2. Memcache PHP Extension
# tar zxvf memcache-2.2.5.tgz
# cd memcache-2.2.5
# phpize
# ./configure
# make
# cp .libs/memcache.so /(php 익스텐션 디렉토리) php.ini에서 지정한 extension_dir 에서 설정한 디렉토리
# php -m | grep memcache 로 모듈 확인
# /etc/init.d/httpd restart 또는 /usr/local/apache/bin/apachectl restart 로 Apache 재시작

PHP info 확인

사용자 삽입 이미지

3. Libevent 설치 (옵션)
* Memcache Configure 중 libevent 가 필요하다는 메세지를 보내고 중단이 되었을때 설치를 한다.

libevent 를 다운로드 받는다.
# tar zxvf libevent-1.4.11-stable.tar.gz
# cd libevent-1.4.11-stable
# ./configure
# make
# make install (/usr/local/lib 에 libevent.so 파일이 존재하는지 확인한다.)
# ldconfig (vi /etc/ld.so.conf 에 /usr/local/lib 추가를 한다.



PHP 의 환경 설정 파일에서 session 부분을 아래와 같이 변경 합니다.

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

위와 같이 셋팅을 합니다. 셋팅을 완료한 후에는 Apache 를 재시작 해주시면 설정이 적용이 됩니다.
PHP 세션을 file이 아닌 memcache를 이용해 저장을 하는 방식입니다. 다른 머신의 웹 서버에서 세션을 공유할 때 위와 같이 사용하시면 됩니다

PHP 테스트 소스.

 
01.<?
02. session_start();
03.
04. // 서버 정보 표시
05. echo 'SERVER_NAME : ' . $_SERVER['SERVER_NAME'] . '<BR />';
06. echo 'SERVER_ADDR : ' . $_SERVER['SERVER_ADDR'] . '<BR />';
07. echo 'SERVER_SERVER_SOFTWARE : ' . $_SERVER['SERVER_SOFTWARE'] . '<BR />';
08. echo 'session.save_handler : ' . ini_get('session.save_handler') . '<BR />';
09. echo 'session.save_path : ' . ini_get('session.save_path') . '<BR /><BR />';
10.
11. // 세션이 정상적으로 생겼으면
12. if($_SESSION['check'])
13. {
14. echo 'increment count <br />' ;
15. // 카운트를 증가 시킨다.
16. $_SESSION['reflashCnt']++;
17. }
18. else
19. {
20. // 없을 경우 세션 정보를 입력한다.
21. echo 'create session information <br />' ;
22. $_SESSION['check'] = true;
23. $_SESSION['name'] = 'lovelgw';
24. $_SESSION['age'] = 21;
25. $_SESSION['reflashCnt'] = 0;
26. }
27.
28. foreach ($_SESSION as $key => $value)
29. echo $key . ' => ' . $value . '<br>';
30.
31.?>

사용자 삽입 이미지

서버에서 호출한 화면

사용자 삽입 이미지

localhost 에서 호출한 화면 (hosts 파일 변경 후 동작)

세션이 공유를 테스트 하기 위해 %SystemRoot%\system32\drivers\etc\hosts 파일을 변경하였습니다.
127.0.0.1 lovelgw.com
위와 같이 설정을 변경한다음 로컬 서버와 원격지와 세션을 공유 해보았습니다.

memcache 를 이용해 세션을 공유하는 방법입니다

2011/09/07 01:12 2011/09/07 01:12
네임서버에서 서브도메인을 많이 사용할 경우 zone 파일을 따로 생성해서 인쿠루드 해서 사용가능하더군요.

서브도메인의 저장위치가 /var/named/zone/subdomain.zone 에 위치했다고 가정한다면

maindomain.zone
-------------------------------------------------------------------------
$TTL 86400
@ ~~~~~~
.
.
.
~~~
www IN A 123.45.67.89
$include "/var/named/zone/subdomain.zone"

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

subdomain.zone 파일에는
sub1 IN A 123.456.67.98
~~~~

와 같이 입력하면 끝


PS. INCLUDE 앞에 $를 붙여줘야 하는 것을 몰라 한참을 헤매서 저같은 분이 있을까 해서 올립니다.                                       
2011/09/05 03:21 2011/09/05 03:21
사용자 삽입 이미지사용자 삽입 이미지
사용자 삽입 이미지사용자 삽입 이미지
사이트 : http://uber-uploader.sourceforge.net/
데   모 : http://www.webdice.org/uber_uploader/


jquery로되어 있네요.

2011/09/05 03:19 2011/09/05 03:19
http://jqueryui.com/demos/toggleClass/


<style type="text/css">
.test { float:left; border:solid 1px black; width:200px; }
.test2 { border:dotted 1px red; width:300px; }
.test strong { float:left; border:solid 1px black; width:100px; font-size:12px; color:black; }
.test2 strong { width:150px; font-size:20px; color:blue; }
</style>
<div id="test" class="test"><strong>test</strong></div>
<script type="text/javascript">
$('#test').click(function() {
$(this).toggleClass('test2', 'slow');
});
</script>

아쉽게도 자식들은 animate 되지 않고 그냥 바뀌네요.

License: GPL or MIT                                       
2011/09/05 03:16 2011/09/05 03:16
개발을 하다보면 euc-kr 파일인코딩을 utf-8 로 변경할 경우나 그 반대의 경우 등등 여러가지 경우가 발생한다.

인터넷 검색해서 나오는 쉘 스크립트의 경우 이미 utf-8일 경우도 다시 utf-8로 변환해서 깨지는 현상이 발생하여 변환시 에러가 안날 경우만 변경되도록 처리가 필요하였다.

그럴 경우를 위해 일괄적으로 특정 디렉토리의 파일들을 찾아서 euc-kr -> utf-8 로 만드는 쉘 스크립트를 만들어서 돌려보니 잘 작동해서 올린다.

html, inc, php 이외의 파일을 변환하려면 중간에 "*[php|inc|html?]" 부분을 수정하면 된다.

================ 스크립트 시작 ==================

#!/bin/bash
if [ $# != 3 ]
then
echo "Usage : char_convert.sh [char_from] [char_to] [dir]"
exit 0
fi

charfrom=$1
charto=$2
objdir=$3

for x in $(find $objdir -type f -name "*[php|inc|html?]") ; do

iconv -f $charfrom -t $charto $x > $x.utf-8
if [ $? != 0 ]
then
echo "-----------------------------------"
rm -f $x.utf-8
echo "deleted $x.utf-8"
else
echo "-----------------------------------"
rm -f '$x'
echo "deleted $x"
mv $x.utf-8 $x
echo "mv $x.utf-8 -> $x"
fi

done

exit 0

================ 스크립트 종료 ==================

PS. 리눅스 iconv 기능을 이용했으므로 없다면 설치해야 함.
PS. PHP 를 사용하는 분들이라면 기본적으로 있을거라 생각함.                                       
2011/09/05 03:14 2011/09/05 03:14

* 이 글은 유닉스 관련 운영체제의 경험이 별로 없는 사람을 위한 wget 의 간단한 지침서입니다.
1. wget ?

코맨드 라인에서 파일 다운로드를 쉽게 할 수 있는 유틸리티이다. 요즘의 대부분의 리눅스 배포판에는 기본적으로 설치되어 있다.

2. Windows 버전의 wget

* win32 에서 사용가능한 바이너리도 존재한다. 여기를 참조.

- 위의 바이너리를 다운로드하고 윈도우 환경변수에서 PATH에 잡혀 있는 폴더로 복사해 둔다.
- "어떻게 윈도우에서 PATH를 잡나요?" 라고 생각하시는 분이라면 여기를 참조할 것.
- "PATH가 뭐지요?" 라고 생각하는 분이라면 걍 C:Windows 폴더로 복사한다. -.-;;;

3. 기본적인 사용법
 
- PATH가 걸린 상태에서 '명령 프롬프트' 를 부르고 'wget' 을 입력한다.
* 보다 명령 프롬프트를 쉽게 사용하려면 여기를 참조.

- "wget --help" 라고 하면 사용할 수 있는 옵션이 출력된다.

4. 중요한 옵션 및 사용예
 
- r : 지정된 디렉토리의 하위 디렉토리의 내용을 몽땅 다운로드한다.

사용예 : wget -r ftp://ftp.ncbi.nlm.nih.gov/blast/db/
설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/blast/db/ 의 디렉토리 구조를 유지한 채로 모든 파일을 불러온다.

- nd : 디렉토리를 만들지 않는다. 계층적으로 나열된 웹 사이트의 디렉토리의 내용을 한 디렉토리로 불러올 때 편리하다. -r 옵션과 같이 사용하면 매우 유용하다.

사용예 : wget -nd -r ftp://ftp.ncbi.nlm.nih.gov/blast/db/
설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/blast/db/  내의 내용물을 현재 폴더에 몽땅 다운로드받는다.

-A, --accept=: 지정된 확장자의 파일만을 받아온다.

사용예 : wget -nd -r --accept=fna ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria/

설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 에서 확장자가 .fna 인 파일만을 받아서 현재 디렉토리에 저장한다. (물론 -nd 옵션을 빼면 폴더 구조가 그대로 유지된다)

-R, --reject=: 지정된 확장자의 파일만을 빼고 받아온다.

사용예 : wget -nd -r --accept=fna ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria/

설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 에서 확장자가 .fna 인 파일만 빼고 받아서 현재 디렉토리에 저장한다.

-l , --level= : -r 옵션, 즉 하위 디렉토리 받아오기를 사용하였을 때 다운로드받을 최대 단계를 지정할 때 사용한다.

사용예 : wget -nd -r --accept=fna --level=3 ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria/
설명 : ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 에서 확장자가 .fna 인 파일만 빼고 받고 3단계까지 거슬러 올라서 다운로드를 수행한다.

-N : 현재 다운로드 받을 위치에 있는 파일이 현재 내 하드에 있는 파일보다 새로운 파일일때만 다운로드를 수행한다

-m : 미러 명령. 즉, 특정한 웹사이트의 내용을 그대로 폴더 구조채 긁어오되, 새로 업데이트한 내용만을 다운받고 싶을 때 사용한다.

ftp id, password 지정 : wget ftp://id:password@website


이런 식으로 id와 password를 지정하면 된다

이 정도면 많이 사용하는 옵션에 대해서는 설명했을 것이다. 기타 명령어에 대해서는 wget --help 를 입력하면 자세한 설명이 나와 있다.

5. 기타
 
- 쉘 스크립트나 배치 파일을 이용하여 자동화하면 매우 편리하다.

가령 유닉스 계열이라면

#!/bin/bash
wget -nd -r ftp://id:password@website/$1/
.
.
.

과 같은 식으로 간단한 쉘 스크립트를 작성하여 적당한 이름으로 저장한 후, Path가 걸린 위치에 넣고 실행 권한 (chmod +x <파일이름>) 을 주면 매우 편리하다.

윈도우라면

echo off
wget -nd -r  ftp://id:password@website/%1/
.
.
.

과 같은 식으로 배치 파일을 만들고 *.bat 으로 저장한다.

- 도스 시절부터 PC를 이용해 온 사람이라면 배치 파일에 대해서 잘 알고 있겠지만, 그렇지 않은 사람은 여기 를 참조해 보기를. 사실 유닉스 계열의 쉘 스크립트만큼 강력하지는 않고,윈도우 자체가 GUI 환경 위주의 운영체계이긴 하지만 그래도 어느 정도 수준의 일은 윈도우에서도 처리 가능하다. 사실 Win98 같은 구닥다리 말고 NT 계열의 운영체제 (NT, 2000, XP) 는 결코 널럴하게 만들어진 운영 체제는 아니다. 아마도  NT 계열 MS 운영체제가 유닉스 계열에 대해서 가지는 가장 큰 약점은 '유저의 평균수준' 일지도 모른다. -.-;;

2011/09/05 00:59 2011/09/05 00:59

rem 각 디렉토리에서 파일을 최근 날짜로 정렬.
rem 최근날짜순으로 정렬해서 10개를 남기고(skip)하고 나머지를 삭제.
rem 가장 오래전에 생성된 파일을 삭제.
rem 최근 10개의 백업 파일이 보존됨. 매일 오전 7시에 예약.

d:
cd d:\autobackup

dir /o-d /B f:\backup\adm\*.zip> adm.list;
for /F "skip=10 usebackq delims=\n" %%f IN (adm.list) do echo "%%f" ;

dir /o-d /B f:\backup\dorm\*.gz>dorm.list;
for /F "skip=10 usebackq delims=\n" %%f IN (dorm.list) do echo "%%f" ;

cd
dir /o-d /B d:\backup\gyd\*.gz>gyd.list;
for /F "skip=10 usebackq delims=\n" %%f IN (gyd.list) do echo "%%f" ;

dir /o-d /B f:\backup\mdorm\*.gz>mdorm.list;
for /F "skip=10 usebackq delims=\n" %%f IN (mdorm.list) do echo "%%f" ;

dir /o-d /B f:\backup\phys\*.gz>phys.list;
for /F "skip=10 usebackq delims=\n" %%f IN (phys.list) do echo "%%f" ;

dir /o-d /B f:\backup\sql\*.gz>sql.list;
for /F "skip=10 usebackq delims=\n" %%f IN (sql.list) do echo "%%f" ;

dir /o-d /B f:\backup\phys\*.gz>phys.list;
for /F "skip=10 usebackq

위의 내용을 auto.bat로 저장하고 예약작업에 등록.

2011/09/02 11:54 2011/09/02 11:54

원도우에서

유닉스의 find mtime 같은 명령을

실행 시키고 싶을 때

배치 스트립트로 가능하지만

ms에서 제공하는 forfiles 이라는 명령어를 사용 하면 된다.

그러나.. xp에서는 기본 제공 하지 않아...

ftp://ftp.microsoft.com/Reskit/y2kfix/x86/

요기 가서 다운을 받자~

(2003서버에서는 기본 제공함)

forfiles /p "C:\특정디렉토리" /M "*.*" /D -10 /C "CMD /C del @FILE"

/p : 디렉토리 지정

/m : 파일 지정

/d : 날짜 지정

예1) 웹로직 디렉토리의 access 로그를 현재부터 3일 이전은 삭제한다.

forfiles /p "C:\weblogic\\logs" /M "access.*" /D -3 /C "CMD /C del C:\weblogic\\logs\@file"

예2)MS에서

C: 드라이브에 있는 모든 배치 파일의 목록을 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m*.bat /c"cmd /c echo @file is a batch file"

C: 드라이브에 있는 모든 디렉터리의 목록을 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m*.* /c"cmd /c if @isdir==true echo @file is a directory"

C: 드라이브에 있는 100일 이상된 모든 파일의 목록을 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m*.* /dt-100 /c"cmd /c echo @file : date >= 100 days"

C: 드라이브에 있는 1993년 1월 1일 이전의 모든 파일을 나열하고 해당 파일에 대해 "file is quite old!"를 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m*.* /dt-01011993 /c"cmd /c echo @file is quite old!"

C: 드라이브에 있는 모든 파일의 확장명을 열 형식으로 나열하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m*.* /c "cmd /c echo extension of @file is 0x09@ext0x09" With:

C: 드라이브에 있는 모든 배치 파일의 목록을 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m *.bat /c "cmd /c echo @file is a batch file"

C: 드라이브에 있는 모든 디렉터리의 목록을 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

C: 드라이브에 있는 100일 이상된 모든 파일의 목록을 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m *.* /d t-100 /c "cmd /c echo @file : date >= 100 days"

C: 드라이브에 있는 1993년 1월 1일 이전의 모든 파일을 나열하고 해당 파일에 대해 "file is quite old!"를 표시하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m *.* /d t-01011993 /c "cmd /c echo @file is quite old!"

C: 드라이브에 있는 모든 파일의 확장명을 열 형식으로 나열하려면 다음과 같이 입력합니다.

forfiles /p c:\ /s /m*.* /c "cmd /c echo extension of @file is 0x09@ext0x09"

------------------사용방법---------------

K:\>forfiles
FORFILES v 1.1 - emmanubo@microsoft.com - 4/98

Syntax : FORFILES [-pPath] [-mSearch Mask] [-ccommand] [-d<+|-><DDMMYYYY|DD>] [-
s]

-pPath Path where to start searching
-mSearch Mask Search files according to <Search Mask>
-cCommand Command to execute on each file(s)
-d<+|-><DDMMYYYY|DD> Select files with date >= or <=DDMMYYYY (UTC)
or files having date >= or <= (current date - DD days)
-s Recurse directories
-v Verbose mode

The following variables can be used in Command :
@FILE, @FNAME_WITHOUT_EXT, @EXT, @PATH, @RELPATH, @ISDIR, @FSIZE, @FDATE,
@FTIME

To include special hexa characters in the command line : use 0xHH

Default : <Directory : .> <Search Mask : *.*> <Command : "CMD /C Echo @FILE">
Examples :
FORFILES -pc:\ -s -m*.BAT -c"CMD /C Echo @FILE is a batch file"
FORFILES -pc:\ -s -m*.* -c"CMD /C if @ISDIR==TRUE echo @FILE is a directory"
FORFILES -pc:\ -s -m*.* -d-100 -c"CMD /C Echo @FILE : date >= 100 days"
FORFILES -pc:\ -s -m*.* -d-01011993 -c"CMD /C Echo @FILE is quite old!"
FORFILES -pc:\ -s -m*.* -c"CMD /c echo extension of @FILE is 0x22@EXT0x22"

2011/09/02 11:53 2011/09/02 11:53
불펌금지 무력화시키기
초 간단 팁입니다. 최근 네이버에서 새로운 방법으로 마우스 우클릭과 선택을 하지못하도록 조치해서, 이 제한을 제거해주는 기존 프로그램들이 모두 작동이 안되는 상황입니다. 이 팁을 적용하면 간단하게 해당 제한을 무시할 수 있습니다.

1. 스크립트에서 사용자 웹 브라우저의 기능을 제한하는 부분을 찾아 해당 기능을 켄슬링하면 되는데, 이를 위해, 웹 페이지에서 추가로 사용자 스크립트를 실행할 수 있는 도구를 설치해야합니다.

- Internet Explorer: Trixie를 설치하세요.
   http://www.bhelpuri.net/Trixie/

- Firefox: Greasemonkey 확장기능을 설치하세요.
   http://addons.mozilla.org/ko/firefox/addon/748

2.툴을 설치했으면, 아래의 스크립트를 받아 설치하고, 활성화 시키세요:
   http://userscripts.org/scripts/show/61326

Firefox에서는 Install을 누르면 바로 설치되고, Trixie를 사용하시는 분은 스크립트를 다운로드받아서 Trixie가 설치된 "c:\Program Files\Bhelpuri\Trixie\Scripts\"에 수동으로 넣어야합니다.)

네이버 블로그와 카페에서 항상 컨텍스트 메뉴를 열 수 있고, 텍스트 선택이 가능합니다. 적용이 안된 경우, 브라우저를 다시 시작해보시기 바랍니다.


원본출처 :http://www.parkoz.com/zboard/view.ph...c=asc&no=13425
2011/09/02 11:50 2011/09/02 11:50

소개

출처 : http://www.webarty.com 웹아티

아티보드 3.0 이란?

상위 사이트에 접속하시면 아티보드 3.0 데모 및 메뉴얼 등을 확인할수 있습니다.

사용자 삽입 이미지

웹사이트 구축에 필요한 다양한 기능 및 기술을
함축시켜 놓은 솔루션으로써 보다 편리하고 손쉽게
웹사이트를 구축할 수 있습니다.
강력한 관리자 모듈, 사용자 인터페이스를 고려한
웹표준, 웹접근성, 다국어 기능이 포함되어 있어
웹사이트 개발 기간을 단축시켜 드립니다.

  • client 


  • client

    다양한 브라우저 및 PC 환경에서 서비스 제공

  • development

    development

    다양한 브라우저 및 PC 환경에서 서비스 제공

  • designer

    designer

    다양한 브라우저 및 PC 환경에서 서비스 제공

설치환경

개발언어 및 서버 Windows 2000 이상의 서버환경 및 ASP 언어
데이터 베이스 MS-SQL 2005 또는 그 이상
컴포넌트 Dext Upload Pro 이상 또는 Abc Upload 4.2 이상 또는 Tabs Upload나누미 썸네일 (옵션)
서버환경 최소사양 HDD : 1G / DB용량 100MB (사용환경에 따라 용량은 달라집니다.)

주요기능

  • 환경설정

    환경설정

    사이트 운영에 반드시 필요한 설정항목을 현재 웹사이트 운영에 필요한 정보에 맞게 설정할 수 있습니다.
    또한 사이트 운영시 관리자를 추가해서 사이트를 관리할 수 있는 관리자 권한설정 메뉴를 이용하실 수 있습니다.

  • 레이아웃 및 페이지

    레이아웃 및 페이지

    웹사이트에 게시판, 회원 모듈 및 기타 솔루션에서 제공되는 프로그램을 웹사이트에 적용할 때 필요한 기본디자인을 관리할 수 있는 메뉴를 제공합니다.
    레이아웃 기능을 이용하면 웹사이트에 솔루션 적용을 보다 편리하게 이용할 수 있습니다.
    페이지 기능을 이용해서 웹 사이트 내 페이지를 관리할 수 있는 메뉴도 제공이 됩니다.

  • 회원관리

    회원관리

    웹사이트에 가입된 회원을 세부적으로 관리할 수 있는 관리 모듈이 제공되며, 필요에 따라 단체 메일 또는 쪽지를 발송 할 수 있습니다.
    회원관리 서비스를 편리하게 이용할 수 있도록 환경설정 항목이 있으며, 회원 가입 시 필요한 항목만 입력 받을 수 있도록 회원가입 항목 설정 기능이 제공됩니다.
    필요에 따라 회원을 레벨 또는 그룹별로 구분지어 관리가 가능하며, 포인트 시스템을 이용해서 회원별로 특별한 서비스를 제공할 수 있는 기능이 제공됩니다.

  • 게시판 관리

    게시판 관리

    웹사이트에서 사용할 게시판을 추가하거나 등록된 게시판을 세부적으로 설정해서 사용할 수 있습니다.
    등록된 게시글, 댓글, 첨부파일을 별도로 확인 할 수 있는 관리 모듈이 제공되며, 휴지통이란 기능이 추가되어 사용자가 게시글을 삭제시 복구가 가능하도록 설계가 되어 있습니다.
    등록된 게시글을 통합적으로 검색할 수 있는 전체검색 기능이 제공되며, 홈페이지 메인에 최신글을 손쉽게 출력할 수 있는 기능이 있습니다.
    게시판에 특정한 서식을 설정해서 사용자는 서식에 맞게 글을 등록하게끔 유도할 수 있습니다.
    게시판 분류 (카테고리)를 등록해서 게시글을 나눠 볼수 있는 게시판 분류 기능이 있으며, 게시판별 회원에 대한 접근 권한 및 포인트 시스템 기능이 있습니다.
    대용량 업로드 및 이미지 업로드 기능이 기본적으로 제공되며, 보안상 첨부 파일은 암호화되어 서버에 저장됩니다.

  • 부가기능

    부가기능

    관리자가 일정을 등록해서 공유 하거나 업무에 활용이 가능하며, 웹사이트에서 팝업 서비스를 손쉽게 이용할 수 있는 팝업창 관리 모듈이 제공됩니다.

  • 통계기능

    통계기능

    회원가입, 사이트 접속, 게시글, 태그, 검색키워드 등 다양한 통계 서비스를 제공하며, 각 통계별로 다양하게 검색해서 확인 및 마케팅에 활요 할 수 있도록 세부적인 통계 서비스를 제공합니다.

  • 사용자가 접근하기 쉬운 Window 서버 OS 기반 및 MS-SQL 2005 DB 사용

    사용자가 접근하기 쉬운 Window 서버 OS 기반 및 MS-SQL 2005 DB 사용

    Window 서버 기반의 OS 환경에서 동작하는 ASP 언어와 강력한 MS-SQL DB를 사용하기 때문에 사용자의 접근이 용이하며, 데이터의 보안 및 처리 속도가 빠릅니다.
    아티보드는 윈도우 2000 서버 이상 및 MS-SQL 2005 이상의 환경에서 사용이 가능합니다.

  • 데이터의 보안강화 및 추출, 가공이 용이

    데이터의 보안강화 및 추출, 가공이 용이

    아티보드에서 사용되는 DB 연동 프로그래밍은 저장 프로시저 (Stored Procedure)를 사용하기 때문에 데이터의 보안이 뛰어 납니다.
    일반적으로 DB 해킹시 시도되는 인젝션 공격은 ASP 소스에서 쿼리문을 실행하지 않기 때문에 1차적으로 차단처리 되며, DB 호출 및 업데이트시 빠른 처리속도로 실행됩니다.
    또한 복잡한 SQL 프로그래밍을 단순화 시켜주고 ASP 코딩에서 DB 서버에 직접 접근해서 쿼리문을 실행하지 않기 때문에 해킹 시도자는 쿼리문 자체를 알 수 없으므로 보안이 향상됩니다.

  • 웹표준, 웹접근성 및 다국어 지원

    웹표준, 웹접근성 및 다국어 지원

    모든 브라우저에서 동일한 화면 (UI)를 제공하기 위에 웹표준을 준수합니다.
    디자인 부분은 HTML 코드와 스타일시트 (CSS)로 분리되어 프로그램이 실행되며, 장애인을 위한 웹접근성은 스킨 파일에서 제작을 할 수 있도록 구성되어 있습니다.
    또한 기본 인코딩 방식이 UTF-8 이기 때문에 다국어로 사이트를 제작할 수 있으며, 언어팩이 XML 파일로 구성되어 있어 언어 파일(XML) 을 수정하면 손쉽게 다국어 사이트를 제작할 수 있습니다.

  • Jquery 기반의 프로그래밍

    Jquery 기반의 프로그래밍

    Jquery 웹 어플리케이션 프레임워크를 사용하기 때문에 다양하고 전문적인 웹사이트 구축을 할 수 있을 뿐더러 스킨 제작시 코딩의 양이 현저하게 줄어듭니다.
    Jquery 에서 제공되는 Ajax는 물론 Jquery 개발자 및 사용자들이 제공하는 수많은 플러그인을 이용해서 보다 동적이고 활용도 놓은 웹 사이트를 구축 할 수 있습니다.

  • 스킨 형태의 디자인

    스킨 형태의 디자인

    아티보드는 프로그래밍과 디자인이 분리된 스킨형태의 솔루션 입니다.
    아티보드에서 제공되는 엔진을 이용해서 사용자는 원하는 디자인 및 기능을 갖춘 프로그램을 제작할 수 있습니다.
    엔진에서 제공되는 변수 및 스크립트 등을 이용해서 독창적인 디자인 및 기능을 갖춘 페이지를 구성할 수 있습니다.
    사용자가 필요에 따라 추가 컬럼을 사용할 수 있도록 회원가입 추가 컬럼 10개 및 게시판 추가 컬럼 15개를 지원합니다.

  • 강력한 관리자 모듈 제공

    강력한 관리자 모듈 제공

    아티보드에서 제공되는 관리자 모듈은 사이트를 보다 효율적이고 간편하게 운영하도록 구성되어 있습니다.
    전체 관리자 이외에 각 관리자 메뉴별 관리자를 설정해서 사용할 수 있는 부 관리자 기능 및 외국인도 사용할 수 있도록 다국어를 지원합니다.
    또한, 별도로 사이트에서 필요한 관리자 페이지를 손쉽게 추가해서 사용할 수 있도록 UI 구성이 되어 있습니다.

  • 이미지 및 파일 업로드 기능 강화

    이미지 및 파일 업로드 기능 강화

    파일첨부 기능을 에디터에서 등록 할 수 있도록 기능이 구성되어 있으며, FLEX를 이용한 대용량의 첨부 파일 업로드 및 여러개의 파일 업로드를 한번에 처리할 수 있도록 구현되었습니다.
    이미지 파일의 경우 썸네일 기능, 이미지 워터마크 기능을 기본적으로 제공하며, 첨부파일의 경우에는 파일을 서버에 암호화 저장하기 때문에 실제적인 파일의 경로가 노출되어도 서버에서 직접적인 다운로드가 되지 않습니다.
    또한 첨부파일이 업로된 상태에서 게시글 및 댓글이 저장되지 않고 페이지를 벗어나게 되면 자동으로 현재 등록된 이미지 및 파일이 서버에서 자동으로 삭제 처리 되는 기능을 추가했기 때문에 사용되지 않는 첨부파일이 서버의 불필요한 공간을 차지하지 않도록 개발되었습니다.

  • 휴지통 기능 및 서식기능

    휴지통 기능 및 서식기능

    게시글 및 댓글을 사용자 또는 관리자가 삭제시 휴지통 기능을 이용해서 언제라도 복구가 가능합니다. 관리자는 게시판별로 게시글 및 댓글 삭제 옵션을 설정할 수 있습니다.
    사용자가 게시글 등록시 서식에 맞춰 글을 등록하게끔 하는 서식기능을 사용할 수 있습니다. 관리자는 게시판별 서식을 미리 만들어 적용할 수 있습니다.

  • 일반 페이지 웹사이트 추가

    일반 페이지 웹사이트 추가

    아티보드에서는 관리자 모듈에서 일반 페이지를 만들어서 관리 및 웹사이트에 출력 수 있는 기능을 제공합니다.
    HTML로 페이지를 구성하거나 이미 만들어진 HTML 파일을 링크를 통해서 사용할 수 있습니다.
    이제는 아티보드만 있으면 웹사이트 구축을 쉽게 활 수 있습니다.

  • 강력한 글 등록 에디터

    강력한 글 등록 에디터

    다음 (Daum)에서 오픈소스로 제공되는 Daum Editor를 기본적으로 글 등록에 사용하기 때문에 보다 안정적이고 편리하게 글을 등록할 수 있습니다.
    아티보드에 맞게끔 확장이 가능하며, 주요 부라우저의 크로스 부라우징을 지원하며, 지속적인 업데이트가 가능합니다.

  • 회원 권한 및 관리가 편리

    회원 권한 및 관리가 편리

    그룹기능 및 레벨기능을 제공하기 때문에 특정 그룹 및 레벨에 특정 권한을 부여해서 보다 다양하게 회원을 관리할 수 있습니다.
    또한, 포인트 시스템을 제공하기 떄문에 포인트별로 회원을 관리하거나 포인트 별로 그룹을 갱신하는 시스템을 사용할 수 있습니다.

  • 대량 메일 발송 기능

    대량 메일 발송 기능

    대량 메일을 원하는 메일 개수대로 분할 발송을 하기 때문에 회원이 많은 경우 서버 과부하로 인해 오류가 발생하는 부분이 해결되었습니다.
    메일링 발송시 관리자는 분할 발송할 메일의 개수를 설정할 수 있으며, 메일별로 발송 대상을 설정해서 메일을 발송할 수 있습니다.

  • 통합검색

    통합검색

    게시글 및 댓글을 검색하거나 첨부된 이미지 및 첨부파일까지 검색을 할 수 있는 통합검색 기능이 기본 제공됩니다.
    통합검색시 전체 게시판에서 검색을 하거나 특정 게시판을 지정해서 검색이 되도록 설정이 가능하며, 스킨으로 구성되어 있어 디자인을 원하는 대로 변경해서 사용이 가능합니다.
    또한 통합검색시 검색대상을 설정할 수 있기 때문에 원하는 검색기능을 사용할 수 있습니다.

  • 기타기능

    기타기능

    관리자가 웹사이트를 운영시 편리하게 운영하도록 스케줄 기능 및 팝업, 통계기능을 제공합니다.
    회원가입에 관련된 통계 및 사이트 접속, 게시글 및 댓글에 대한 자세한 통계 기능을 제공합니다.

  • 업데이트

    업데이트

    아티보드 3.0은 지속적인 업데이트를 통한 기능 개선 및 문제점 해결합니다.

    -

2011/09/02 02:08 2011/09/02 02:08
안녕하세요.

말이 필요 없네요.

http://videojs.com/
http://videojs.com/embed-builder/
http://videojs.com/skins/

----이건 비교 사이트----

http://praegnanz.de/html5video/


하지만 말했네요.
2011/08/31 20:25 2011/08/31 20:25

FOAF에 의한 인간관계
FOAF(Friend of a Friend)의 경우 시맨틱웹 기술을 적용해 관계성을 확장하는 대표적인 기술이다. '친구의 친구'라는 뜻의 FOAF는 친구를 통해 친구를 만들어나가는 인간관계를 말한다.



FOAF는 몇 단계만 거치면 나라 안의 모든 국민을 알 수 있다는 다단계 구조를 이용하고 있다. 내가 알고 있는 1천 명이 각기 1천 명을 알고 있다면 1단계인 친구의 친구 소개만으로도 10만 명을 내 인간관계 안에 포함시킬 수 있다.



한국의 싸이월드나 과거 미국의 'Six Degrees'라는 사이트가 바로 다단계를 활용한 관계성 확장을 이용한 사이트라 할 수 있다. 그러나 현재까지 진행된 FOAF는 매우 단순한 구조를 가지고 있다.



한국의 싸이월드는 1촌에서 머무르고 있을 뿐이다. 이를 더 큰 관계로 확대하기 위해서는 한 개인의 정보를 아주 작은 속성으로 분석하고 자동으로 연결시키는 속성 시스템과 평판 시스템이 필요하다.



XFN에 의한 관계 표현



XFN(XHTML Friends Network; XHTML 친구망)은 하이퍼링크를 이용해 인간 관계를 표현하는 간단한 수단으로 글로벌 멀티미디어 프로토콜 그룹(GMPG)에 의해 개발되었다. 최근에 블로그가 웹 분야에서 빠른 성장을 보이고 있다.



XFN은 단순히 <a href> 태그에 'rel' 속성을 추가함으로써, 작성자가 다른 사람들과의 관계를 표현할 수 있는 방법을 제공한다. 예를들어 몽키몽키가 만났던 한 친구의 사이트에 대한 링크는 다음과 같이 관계를 표현할 수 있다.



<a href="http://www.monkymonky.com/" rel="friend met">몽키몽키</a>



XFN은 개인적 관계의 수준을 정의된 집합으로 나타내는 방법으로 개개의 관계를 대략적으로 보여준다. HTML과 XHTML 문서에서는 이 같은 관계의 수준이 하이퍼링크의 rel 속성으로 나타난다.



XFN을 통해 작성자는 자신이 읽은 웹로그 중의 어떤 것들이 친구(물리적 만남이 있었거나, 혹은 다른 어떤 관계든지)에 속하는지를 표현할 수 있다. XFN 관계 형식은 순서에 상관이 없으며, 블로그 모임이나 링크 페이지에 인간적인 면을 덧붙이며, 웹로그의 일반적인 특징이 되어가고 있다.



현대적 기능을 갖춘 브라우저에서 XFN을 사용하는 작성자는 특정한 유형의 링크에 스타일을 쉽게 지정할 수 있다. 말하자면 friend(친구)에 대해서는 굵은 글씨를, co-worker(직장 동료)에 대해서는 기울임 글씨를 적용하는 식이다.



XFN 1.1 프로파일

교우 관계 (하나를 선택)
contact - 접촉할 수단을 아는 사람.
acquaintance - 서로 인사나 짧은 대화가 있어왔던 사람.
friend - 친구. 알고 있는 동료나 동향인.
물리적 관계
met - 실제로 만난적이 있는 사람.
직업상 관계
co-worker - 동업자 혹은 직장 동료.
colleague - 같은 학문/활동 분야에 몸 닮고 있는 사람.
지리적 관계 (하나를 선택)
co-resident - 공통 거주자. 같은 (길)거리에 있는 사람.
neighbor - 근방에 사는 이웃.
가족 (하나를 선택)
child - 친자 혹은 양자, 또는 보호자 관계인 사람.
parent - child의 역관계. 부모.
sibling - 공통된 부모를 가진 사람. 형제, 자매, 남매.
spouse - 결혼한 사람. 배우자.
kin - 상대적으로 확장된 가족의 일원으로 간주되는 사람. 친척.
연애 관계
muse - 영감을 가져다주는 사람. 뮤즈.
crush - 자신이 완전히 빠져버린 사람.
date - 만나고 있는 사람.
sweetheart - 매우 친밀하며, 헌신적이고 단독적인 관계. 연인.
신원
me - 자신의 다른 URL에 대한 링크. 다른 관계와 같이 표시될 수 없다.
2011/08/27 16:01 2011/08/27 16:01

100% 해결 방법은 아니지만 프로젝트 도중 고객 사항으로euc-kr 사이트를  utf-8 로 변경해 달라고 요구가 왔다.

그분이 디자이너 출신이라 이프로그램을 메일로 전송해 주고.. 답변이 기다리던중 . 이상없이 작동한다고. 연락이 왔다

Euc-kr 사이트를 utf-8 로 변경하는방법

1.모든디자인 페이지 소스에 euc-kr 을 utf-8 로 변경

2.소스와 웹페이지들의 인코딩 방식을 ansi 에서 utf-8 로 변경
RedUTF8.exe 프로그램 사용해서 돌리면 한방에됨 (첨부파일)

3.Db 를 utf8_general_ci 로 생성

4.모든 테이블을 utf8_general_ci로 변경 (db 를 utf8_general_ci로 생성했을 경우 테이블도 utf8_general_ci 생성된다
쉬운방법은 phpmyadmin 에서 해당 테이블을 선택하시고 table optipn 에 collocation 을 utf8_general_ci로 선택
기존에 내용들이 있을경우 깨질지 모르니 백업하시고 변경 후 다시 넣으셔야 할꺼같습니다.(이부분은 자신이 없네요 ;;)

5.db커넥션 공통파일에 mysql_query("set names utf8"); 를 추가해준다

6.일본어 사이트 같은곳에가서 내용 복사해서 붙여넣어본다


2011/08/27 15:10 2011/08/27 15:10

웹아티 : http://webarty.com

웹표준 아티보드 3.0 홈페이지 제작 솔루션 - 카페 , 디스크 솔루션, 웹메일 솔루션 지원

아티보드란?

아티보드는 웹사이트 구축에 필요한 다양한 기능 및 기술을 함축시켜 놓은 솔루션으로써 보다 편리하고 손쉽게 웹사이트를 구축할 수 있습니다.

아티보드는 웹 표준, 웹 접근성, 다국어를 기본으로 지원하며, ASP 언어를 모르는 사용자도 별도이 개발, 디자인 등의 과정없이 아티보드를 이용해서 편리하고 빠르게 전문적인 웹사이트를 구축할 수 있습니다.

아티보드 솔루션은 홈페이지 제작에 필요한 게시판, 회원관리, 팝업창, 접속통계등의 기능을 제공하고 있으며, 스킨에 따라 다양한 기능을 추가해서 사용이 가능합니다.

아티보드 주요기능

  1. 사용자가 접근하기 쉬운 Window 서버 OS 기반 및 MS-SQL 2005 DB 사용
  2. 데이터 보안강화 및 추출, 가공이 용이
  3. 웹표준, 웹접근성 및 다국어 지원
  4. Jquery 웹 어플리케이션 프레임워크 기반의 프로그래밍
  5. 스킨 형태의 프로그램으로 다양한 디자인 제작 및 활용
  6. 강력한 관리자 모듈 제공 및 관리자 모듈 다국어 제공. 관리자별 메뉴 권한 부여 가능
  7. 일반 페이지를 관리자에서 제작해 웹사이트에 적용할 수 있는 홈빌더 형식의 기능제공
  8. 대용량 업로드 지원 및 업로드 파일 암호화 저장
  9. 여러개의 이미지 업로드 가능 및 사용자 글 등록 취소시 업로드 파일 및 이미지 자동 삭제
  10. 활용도 높은 게시판 추가 여유필드 15개 및 회원 추가 여유필드 10개 사용가능
  11. 게시글 및 댓글 삭제시 복구가 가능한 휴지통 기능제공
  12. 게시글에 서식을 추가해서 기본적으로 출력할 수 있는 기능제공
  13. 게시글, 댓글, 이미지, 첨부파일을 통합적으로 검색할 수 있는 통합검색 제공
  14. 강력한 글 등록 에디터 (Daum Editor 사용)
  15. 대량 메일 발송 가능 (분할 발송 시스템)
  16. 회원 관리에 편리한 그룹, 레벨, 포인트 시스템 및 기업회원 가입 기능
  17. 관리자 스케줄, 웹사이트 팝업, 강력한 회원 통계 및 접속통계
  18. 지속적인 업데이트를 통한 기능 개선 및 문제점 해결

설치환경

- 윈도우 2000 이상의 OS 서버

- MS-SQL 2005 이상의 DB 서버

- DEXT Upload Pro, Abc Upload 4.0 이상, Tabs Upload 중 1가지

2011/08/27 14:13 2011/08/27 14:13

1. 설치 환경 준비 하기

우선 RHEL5 환경에서 encoding 서비스를 위해 필요한 패키지를 설치할 수 있도록 YUM 환경을 구성한다.

yum package install - RHEL5 에서 Centos5 Yum 저장소 이용하기

# yum -y install yum-priorities
# rpm -Uvh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.i386.rpm



# vi /etc/yum.repos.d/centos.repo

아래 부분에서 5.2를 5.5 로 변경

x86_64 ---> i386으로 변경

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

[base-be]
name=CentOS-5 - Base
#repo=os
baseurl=http://mirror.centos.org/centos/5.2/os/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/5.2/os/x86_64/RPM-GPG-KEY-CentOS-5

[updates-be]
name=CentOS-5 - Updates
baseurl=http://mirror.centos.org/centos/5.2/updates/x86_64/
enable=1
gpgcheck=1

[centosplus-be]
name=CentOS-5 - Plus
baseurl=http://mirror.centos.org/centos/5.2/centosplus/x86_64/
enabled=1
gpgcheck=1

[addons-be]
name=CentOS-5 - Addons
baseurl=http://mirror.centos.org/centos/5.2/addons/x86_64/
enable=1
gpgcheck=1

[extras-be]
name=CentOS-5 - Extras
baseurl=http://mirror.centos.org/centos/5.2/extras/x86_64/
enable=1
gpgcheck=1

[fasttrack-be]
name=CentOS-5 - Fasttrack
baseurl=http://mirror.centos.org/centos/5.2/fasttrack/x86_64/
enabled=1
gpgcheck=1

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

# yum -y install yum-priorities
# yum -y install yum
# yum -y install yum-utils


2. FFMPEG로 인코딩 환경 구축하기 

- 기본 프로그램 설치

# yum install ruby
# yum install ncurses-devel*
# yum install lame
# yum install libogg
# yum install libvorbis
# yum install flvtool2
# yum install ffmpeg

- 코덱 설치

# wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
# bunzip2 essential-20061022.tar.bz2
# tar xvf essential-20061022.tar
# mkdir /usr/local/lib/codecs/
# mv essential-20061022/* /usr/local/lib/codecs/
# chmod -R 755 /usr/local/lib/codecs/

# vi /etc/ld.so.conf
# ldconfig

3. ffmpeg 기본 사용법

AVI -> FLV

# ffmpeg -i onestar.avi -ar 22050 -ab 32 -f flv -s 640x480 onestar.flv | flvtool2 -U stdin onestar.flv

-i             : input file name
-ar          : audio sampling rate in HZ
-ab          : audio bit rate in kbit/s
-f             : output format
-s             : output dimension

FLV -> JPG

# ffmpeg -i test.flv -an -r 1 -y -s 640x480 test%d.jpg

-i             : input file name
-an         : disable audio
-r            : fps
-y           : overwrite file
-s            : output dimension

Particular frame to JPG

# ffmpeg -i test.flv -an -ss 00:00:10 -t 00:00:01 -r 1 -y -s 640x480 test%d.jpg

-ss          : recored start time
-t            : record end time last for

- ffmpeg 실무 사용법

ffmpeg를 이용하여 avi 파일을 flv로 변환 한다.

# ffmpeg -i onestar.avi -b 512k -ar 22050 -ab 128k -r 24 -s 400x300 onestar.flv
 
or

# ffmpeg -i "onestar.avi" -vcodec flv -f flv -r 29.97 -s 400x300 -aspect 4:3 -b 320k -g 160 -cmp 2 -subcmp 2 -mbd 2 -flags +aic+cbp+mv0+mv4+trell -ac 1 -ar 22050 -ab 128k "onestar.flv"

- FLV에 메타데이터 넣기 (스트리밍 보기-중간 구간 바로 보기)

# flvtool2 -U onstar.flv

- 동영상 썸네일 만들기

# ffmpeg -y -i onestar.avi -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo -s 400x300 onestar.png

# ffmpeg  -itsoffset -4  -i test.avi -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 test.jpg

4. mencoder를 이용한 동영상에 자막 넣기

동영상을 flv 로 변환할때 자막을 같이 넣을 경우 기존의 ffmpeg로는 자막 포함 기능이
제공되지 않는다. 자막을 포함하여 인코딩을 할 수 있는 프로그램으로 mencoder이 있다.
설치는 yum으로 쉽게 가능하다.

# yum install mencoder

설치 후 자막의 언어 설정을 아래와 같이 한다.

$ vi ~/.mplayer/mencoder.conf
-------------------------------------------------------------------------

font="/usr/share/fonts/korean/TrueType/gulim.ttf"
subfont-text-scale=3
subcp=cp949

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

이제 mencoder로 자막을 포함해서 인코딩을 한다.

$ mencoder -noodml [avi파일]  -o [flv파일]  -sub $1.smi -of lavf -oac mp3lame -lameopts abr:br=128 -ovc lavc -lavcopts vcodec=flv:vbitrate=512:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate 44100 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -vf-add scale=400:300

5. Web Streaming 을 위한 Player 연동하기

- 웹 FLV_Player 연동하기

웹에서 FLV 파일을 스트리밍으로 볼수 있는 Player는 여러가지가 있다.

* UCCUP에서 제공하는 Player - http://www.uccup.kr
* http://flowplayer.org/download.html
* GRZ_JWMediaPlayer

- UCCUP Player 연동하기

아래 구문중 flv 파일명과 png 파일명을 수정 후 HTML 문서에 붙여 넣는다.
flv,png 파일은 [UCCUP설치경로]/SERVICE 디렉토리 밑에 복사해 둔다.


- GRZ_JWMediaPlayer 연동하기

아래는 textcube의 플러그인으로 연동된 GRZ_JWMediaPlayer를 이용하는 방법이다.

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="425" height="340">
<param name="movie" value="/plugins/GRZ_JWMediaPlayer/mediaplayer.swf"/>
<param name="allowfullscreen" value="true"/>
<param name="wmode" value="transparent"/>
<param name="flashvars" value="width=425&height=340&thumbsinplaylist=true&displayheight=320&overstretch=true&logo=&searchbar=false&linkfromdisplay=true&linktarget=_blank&file=/plugins/GRZ_JWMediaPlayer/mkpl.php?list=1|%5bhttp%5dblog.syszone.co.kr%2fattach%2f1%2f1466599573.flv|alang.flv+%289.64+MB%29|||||%5bhttp%5dblog.syszone.co.kr|"/>
<!--[if !IE]> <-->
<object type="application/x-shockwave-flash" transparent="yes" data="/plugins/GRZ_JWMediaPlayer/mediaplayer.swf" flashvars="thumbsinplaylist=true&displayheight=320&overstretch=true&logo=&searchbar=false&linkfromdisplay=true&linktarget=_blank&file=/plugins/GRZ_JWMediaPlayer/mkpl.php?list=1|%5bhttp%5dblog.syszone.co.kr%2fattach%2f1%2f1466599573.flv|alang.flv+%289.64+MB%29|||||%5bhttp%5dblog.syszone.co.kr|" width="425" height="340">
<p>
<a href="/plugins/GRZ_JWMediaPlayer/mediaplayer.swf">[Flash]</a></p>
</object>
<!--> <![endif]-->

</object>

- FlowPlayer 연동하기

기본 연동법
------------------------------------------------------------------------------------

<object type="application/x-shockwave-flash" data="[your site]/FlowPlayer.swf"
width="320" height="263" id="FlowPlayer">

  <param name="allowScriptAccess" value="sameDomain"/>
  <param name="movie" value="[your site]/FlowPlayer.swf"/>
  <param name="quality" value="high"/>
  <param name="scale" value="noScale"/>
  <param name="wmode" value="transparent"/>
  <param name="flashvars" value="baseURL=[base URL]&amp;videoFile=movie.flv
  &amp;autoPlay=false&amp;loop=false&amp;autoBuffering=false
  &amp;splashImageFile=movie.png"/>
</object>

--------------------------------------------------------------------------------------
or
--------------------------------------------------------------------------------------

<script type="text/javascript" src="flowplayer-3.0.2.min.js"></script>
<script>
flowplayer("player", "./flowplayer-3.0.2.swf");

</script>

<a href="http://syszone.co.kr/yaejin/data/11.flv" style="display:block;width:400px;height:300px" id="player">

</a>

--------------------------------------------------------------------------------------
or
--------------------------------------------------------------------------------------

<script type="text/javascript" src="flowplayer-3.0.2.min.js"></script>
<script>
flowplayer("player", "./flowplayer-3.0.2.swf", {
    clip: {
        url: 'http://syszone.co.kr/yaejin/data/11.flv',
        autoPlay: false,

        onStart: function(clip) {
            pageTracker._trackPageview("configuration demo: " + clip.url);
        }
    }

});

</script>

<a href="http://syszone.co.kr/yaejin/data/11.flv" style="display:block;width:400px;height:300px" id="player">
<img src="http://syszone.co.kr/yaejin/data/11.png" border=0 alt="Play this video" />
</a>
---------------------------------------------------------------------------------------
or (youtube 방식의 동영상 라이브러리 구현)
---------------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<c:if test="true">
<!-- include desired tools -->
<script src="http://syszone.co.kr/yaejin/jquery.min.js"></script>
<script src="http://syszone.co.kr/yaejin/flowplayer-3.0.2.min.js"></script>
</c:if>
<script src="http://syszone.co.kr/yaejin/flowplayer.playlist-3.0.1.min.js"></script>

<!-- player / playlist styling -->
<style>
/* player style */
/* container has a background image */
a.player {
        margin-top:40px;
        display:block;
        background:url(http://syszone.co.kr/yaejin/img/splash.png) no-repeat;
        width:425px;
        height:298px;
        padding:0 126px 75px 127px;
        text-align:center;
        color:#fff;
        text-decoration:none;
        cursor:pointer;
}

/* splash image */
a.player img {
        margin-top:115px;
        border:0;
}

#player {
        float:left;
}

/* playlist style */
#playlist {
        width:300px;
        height:380px;
        overflow-y:auto;
        overflow-x:hidden;
        border:1px solid #ccc;
        padding:4px 10px 12px 10px;
        background-color:#efefef;
        margin-top:20px;
        float:left;
}

/* playlist entry */
#playlist a {
        display:block;
        width:260px;
        height:60px;
        padding:7px;
        background-color:#fff;
        border:1px solid #ccc;
        font:11px "bitstream vera sans", "lucida grande",verdana;
        text-decoration:none;
        margin-top:7px;
        color:#666;
}

/* different states of a playlist entry */
#playlist a:hover {
        background-color:#ffc;
}

#playlist a.progress {
        background-color:#efefef;
}

#playlist a.playing {
        border:1px solid #666;
        background-color:#ffc;
}

#playlist a.paused {
        border:1px solid #666;
        background-color:#ffc;
}

/* elements inside playlist entry */
#playlist a img {
        border:0;
        float:left;
        margin-right:10px;
}

#playlist a strong {
        color:blue;
        padding-bottom:5px;
}

#playlist a em {
        border:0;   
        float:left;
        margin-right:10px;
        background:url(http://syszone.co.kr/yaejin/img/clock.gif) no-repeat 0 50%;
        padding-left:20px;
        color:#333;
        font-style:normal;
        margin-top:10px;
}

</style>

<!-- javascript setup. pretty simple stuff -->
<script>
$(function() {

        // setup player
        $f("player", "flowplayer-3.0.2.swf", {

                clip: {baseUrl: 'http://syszone.co.kr/yaejin/data'}

        // playlist plugin
        }).playlist("#playlist");

});
</script>

<!-- player container -->
<a id="player" class="player plain">
        <img src="http://syszone.co.kr/yaejin/img/play.png" />
</a>

<!-- the playlist. simple HTML controlled with CSS -->

<div id="playlist">

<a href=071202-탄생1.flv>
<img src=http://syszone.co.kr/yaejin/data/071202-탄생1.png />
<strong>071202-탄생1</strong><br /><br>
</a>

<a href=071202-탄생2.flv>
<img src=http://syszone.co.kr/yaejin/data/071202-탄생2.png />
<strong>071202-탄생2</strong><br /><br>
</a>

.
.
</div>
<!-- let the rest of the page float normally -->
<br clear="all" />

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

6. Encoding 관련 스크립트 제작

ffmpeg를 이용하여 avi 파일을 flv로 변환하는 스크립트

# vi /usr/bin/ffmpeg_encoder.sh [filename] [geometry]
-----------------------------------------------------------------------------------

#!/bin/sh

if [ $# -lt 2 ]
then
echo -n "using : ffmpeg_encoder.sh <filename> <geometry> ( movie 400x300 )
";

exit;
fi

ffmpeg -i $1.avi -b 512k -ar 22050 -r 24 -ab 128k -s $2 $1.flv
ffmpeg -y -i $1.avi -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo -s $2 $1.jpg
flvtool2 -U $1.flv
echo -n "--------------------------------------------------------
$1.avi completed $1.flv to encoding..!!
--------------------------------------------------------
";

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

mencoder를 이용하여 avi파일과 smi 자막파일을 flv 파일로 변환하는 스크립트

# vi /usr/bin/mencoder_encoder.sh
----------------------------------------------------------------------------------

#!/bin/sh
if [ $# -lt 3 ]
then
echo -n "using : mencoder_encoder.sh <filename> <x_geometry> <y_geometry> <avi,mkv,flv> ( movie 400 300 avi )
";
exit;

fi

mencoder -noodml ${1}.${4} -o $1.flv -sub $1.smi -of lavf -oac mp3lame -lameopts abr:br=128 -ovc lavc -lavcopts vcodec=flv:vbitrate=512:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate 44100 i_certify_that_my_video_stream_does_not_use_b_frames -vf-add scale=${2}:${3}
ffmpeg -y -i ${1}.${4} -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo -s ${2}x${3} $1.jpg
flvtool2 -U $1.flv
echo -n "--------------------------------------------------------
$1.avi completed $1.flv to encoding..!!
--------------------------------------------------------
";

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

디렉토리내 flv 파일을 UCCUP Player에서 인식할 수 있는 HTML 코드로 변환하는 스크립트

# vi /usr/bin/convert_flvhtml.sh
--------------------------------------------------------------------------------

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

AnyCall 핸드폰에서 볼수 있는 형태의 mp4 동영상으로 encoding 시켜 주는 스크립트

# vi /usr/bin/ffmpeg_encoder_mp4.sh
---------------------------------------------------------------------------------

#!/bin/sh

if [ $# -lt 1 ]
then
echo -n "using : ffmpeg_encoder.sh <filename> <quality=low,high>>
";

exit;
fi

if [ $2 == "high" ]
then

ffmpeg -i "${1}.avi" -vcodec mpeg4 -acodec libfaac -b 672k -ab 96k -ar 24000 -s 480x272 -aspect 16:9 -g 300  -mbd 2 -cmp 3 -precmp 3 -subcmp 3 -trellis 2 -flags +4mv -pass 1 -f psp -threads 2 "${1}.mp4"

else

ffmpeg -i "${1}.avi" -vcodec mpeg4 -acodec libfaac -b 250k -ab 96k -ar 24000 -s 480x272 -aspect 16:9 -g 300  -mbd 2 -cmp 3 -precmp 3 -subcmp 3 -trellis 2 -flags +4mv -pass 1 -f psp -threads $2 "${1}.mp4"

fi

echo -n "--------------------------------------------------------
$1.avi completed $1.mp4 to encoding..!!
--------------------------------------------------------
";

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

7. FFmpeg 와 Flv Player를 이용한 Web Streaming 서비스 환경 구축 하기

지금까지 설명한 기술 내용으로 일반 동영상 파일을 웹 환경에서 스트리밍이 가능한 flv 파일로 변환하고, 이용 가능한 Flv player를 통해 기본적인 스트리밍 환경을 구성할 수 있다.

아래는 실제 환경에 적용 가능한 수준의 스트리밍 환경을 구성해 보자

우선 스트리밍 서비스 대상 동영상을 웹 서비스가 가능한 특정 경로 밑의  SERVICE 란 디렉토리에 복사한다.

# cp *.avi [PATH]/SERVICE
# cd [PATH]/SERVICE

여기서 [PATH] 는 웹서버의 Document Root 아래에 해당하는 상대 경로이다.

해당 디렉토리 밑에 있는 avi 파일을 ffmpeg_encoder.sh 스크립트를 이용하여 flv 파일 형태로 모두 변환한다. (자동화 스크립트는 각자 개발 ..)

# ls -1 | grep flv$ > list.txt

uccup player 관련 파일을 [PATH] 에 복사해 둔다. -> 별도 요청

uccup 의 config 파일의 설정을 수정한다.

# vi config.php

// 실제 서비스 폴더
$SERVICE_DIR = $_SERVER[DOCUMENT_ROOT] . '[PATH]/SERVICE/';

.
.


이제 간단한 스트리밍 동영상 목록 페이지와 Player 뷰어 페이지를 개발해야 한다. 아래는 직접 개발한 간단한 소스이다. 참고 바람..

- 스트리밍 동영상 목록 페이지

# vi index.php

<?
include "./config.inc";

$root = "./SERVICE";
$fp = fopen("${root}/list.txt","r");
$fsize = filesize("${root}/list.txt");

if (!$fp) {
        echo ("list.txt  .");
        exit;
        }

while (!feof($fp)) {
        $str = fgets($fp,$fsize);
        $str = trim($str);
        $str = ereg_replace(".flv","",trim($str));
        $arr[] = $str;
        }

$M_num = sizeof($arr) - 1;
$MovieName = "<font size=3><b>\"$M_Name\" 에 해당하는 동영상/[$M_num]편 </b></font>";

?>

<html>

<head>
<link rel="stylesheet" href="main.css" type="text/css">

</head>

<body bgcolor=#DDE5D9>
<table width=650 cellspacing=5 cellpadding=0 border=0 bgcolor=#EFEFEF>
<tr>
<td height=50 align=left vaglign=middle bgcolor=white>&nbsp;
<? echo $MovieName; ?>
</td>
</tr>


<tr>
<td bgcolor=white align=center>

<table width=500 cellspacing=7 cellpadding=3 border=0>
<tr bgcolor=#DEDEDE align=center>
<?

if (!$fp) {
        echo ("list.txt 파일이 없습니다.");
        exit;
        }

while (!feof($fp)) {
        $str = fgets($fp,$fsize);
        $str = trim($str);
        $str = ereg_replace(".flv","",trim($str));
        $arr[] = $str;
        }

for ($i = 0; $i < sizeof($arr) -1 ; $i++) {

$A = ${i} % 5 ;
$B = ${i} + 1 ;
if (  $A  == 0 ) {

        echo ("</tr><tr bgcolor=#DEDEDE align=center><td>
        <table cellpadding=2 cellspacing=2 width=100% border=0>
        <tr><td align=center bgcolor=white><a href=view.php?filename=$arr[$i]&moviename=$B>
        <img src=$root/$arr[$i].jpg width=100 height=70 alt=$arr[$i] border=0></a>
        </td></tr>
        <tr><td align=center bgcolor=white>$M_Name $B</td></tr>
        </table>
        </td>");

} else {

        echo ("<td>
        <table cellpadding=2 cellspacing=2 width=100% border=0>
        <tr><td align=center bgcolor=white><a href=view.php?filename=$arr[$i]&moviename=$B>
        <img src=$root/$arr[$i].jpg width=100 height=70 alt=$arr[$i] border=0></a>
        </td></tr>
        <tr><td align=center bgcolor=white>$M_Name $B</td></tr>
        </table>
        </td>");

}

}


?>

</td></tr></table>


- 동영상 Player 뷰어 페이지

# vi view.php

<?
include "./config.inc";
$root = "./SERVICE";
$fp = fopen("${root}/list.txt","r");
$fsize = filesize("${root}/list.txt");
$MovieName = "<font size=3><b>\"$M_Name\" [$moviename]편에 해당하는 동영상</b></font>";
?>

<html>

<head>
<link rel="stylesheet" href="main.css" type="text/css">
</head>

<body bgcolor=#DDE5D9>
<table width=650 cellspacing=5 cellpadding=0 border=0 bgcolor=#EFEFEF>
<tr>
<td height=50 align=left vaglign=middle bgcolor=white>
        <table width=100% cellpadding=0 cellspacing=0 border=0>
        <tr><td align=left height=50>&nbsp;
<? echo ("$MovieName"); ?>
        </td><td align=right><a href=index.php>전체 목록보기</a>&nbsp;&nbsp;</td></tr>
        </table>
</td>
</tr>

<tr>
<td height=450 bgcolor=white align=center valign=middle>

<embed src="http://syszone.co.kr/<? echo $top; ?>/UCCUp.swf?file=http://syszone.co.kr/<? echo $top; ?>/file.php?f=<? echo $filename; ?>.flv&previewImage=http://syszone.co.kr/<? echo $top; ?>/file.php?f=<? echo $filename; ?>.jpg&bufferTime=3&bgColor=-1"
width="600" height="420" scale="noscale" bgcolor="#ffffff" type="application/x-shockwave-flash" allowFullScreen="true"
allowScriptAccess="always" allowNetworking="all" pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>


</td></tr>
<tr><td>
<table width=100% cellpadding=0 cellspacing=0 border=0><tr>

<?

if (!$fp) {
        echo ("list.txt 파일이 없습니다.");
        exit;
        }

while (!feof($fp)) {
        $str = fgets($fp,$fsize);
        $str = trim($str);
        $str = ereg_replace(".flv","",trim($str));
        $arr[] = $str;
        }

if ( sizeof($arr) > ( $moviename + 5) ) {

for ($i = $moviename; $i < $moviename + 5 ; $i++) {
$B = $i + 1;

        echo ("<td>
        <table cellpadding=2 cellspacing=2 width=100% border=0>
        <tr><td align=center bgcolor=white><a href=view.php?filename=$arr[$i]&moviename=$B>
        <img src=$root/$arr[$i].jpg width=100 height=70 alt=$arr[$i] border=0></a>
        </td></tr>
        <tr><td align=center bgcolor=white>$M_Name $B</td></tr>
        </table></td>");
        }

} else {

$A = sizeof($arr) - $moviename - 1;
for ($i = $moviename; $i < $moviename + $A ; $i++) {
$B = $i + 1;

        echo ("<td>
        <table cellpadding=2 cellspacing=2 width=100% border=0>
        <tr><td align=center bgcolor=white><a href=view.php?filename=$arr[$i]&moviename=$B>
        <img src=$root/$arr[$i].jpg width=100 height=70 alt=$arr[$i] border=0></a>
        </td></tr>
        <tr><td align=center bgcolor=white>$M_Name $B</td></tr>
        </table></td>");
        }
}

?>

</tr>

</table>


- 환경 설정 파일

# vi config.inc

<?

$M_Name = "동영상서비스이름";
$top = "[PATH]";

?>


이제 http://domain/[PATH] 로 접속해서  확인한다.

그럼.. [PATH]/SERVICE 디렉토리안에 있는 모든 flv 파일이 리스트화 된 화면이 나타날것이다. 

8. RED5 를 이용한 스트리밍 서비스 환경 구축하기 

- Red5 설치하기

ant download :  http://ant.apache.org/bindownload.cgi

http://apache.tt.co.kr//ant/binaries/apache-ant-1.8.1-bin.tar.gz

red5 download : http://osflash.org/red5
jdk download : http://java.sun.com

각 사이트에서 최신 패키지를 다운받는다.

apache-ant-1.7.1-bin.tar.gz
red5-0.7.0.tar.gz
jdk-6u11-linux-x64-rpm.bin

- JDK 설치하기

# chmod 755 jdk-6u11-linux-x64-rpm.bin
# ./jdk-6u11-linux-x64-rpm.bin
--------------------------------------------------------------------------------
.
.

Do you agree to the above license terms? [yes or no]
              yes
Unpacking...
Checksumming...
Extracting...
UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).
  inflating: jdk-6u11-linux-amd64.rpm 
  inflating: sun-javadb-common-10.4.1-3.1.i386.rpm 
  inflating: sun-javadb-core-10.4.1-3.1.i386.rpm 
  inflating: sun-javadb-client-10.4.1-3.1.i386.rpm 
  inflating: sun-javadb-demo-10.4.1-3.1.i386.rpm 
  inflating: sun-javadb-docs-10.4.1-3.1.i386.rpm 
  inflating: sun-javadb-javadoc-10.4.1-3.1.i386.rpm 
준비 중...                  ########################################### [100%]

.
.
Press Enter to continue.....
Done.

/usr/java 디렉토리 밑에 설치 완료 .

- Ant 설치하기

# tar xzvf apache-ant-1.7.1-bin.tar.gz
# mv apache-ant-1.7.1 /usr/local/ant

- Red5 설치하기

# mkdir /usr/local/red5
# tar xzvf red5-0.7.0.tar.gz -C /usr/local/red5

- 환경설정하기

# vi /etc/profile.d/ant_java.sh
-----------------------------------------------------------------------------

#!/bin/sh

export JAVA_HOME=/usr/java/default
export JAVA_VERSION=1.6
export ANT_HOME=/usr/local/ant
export PATH=${ANT_HOME}/bin:${JAVA_HOME}/bin:$PATH

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

# source /etc/profile.d/ant_java.sh
# java -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b16, mixed mode)

- RED5 컴파일 및 데몬 시작하기

http://osflash.org/red5 에서 final 바이너리 패키지를 받은 경우 별도의 컴파일
없이 바로 실행이 가능하다.

# cd /usr/local/red5
# sh red5.sh

svn를 통해 코드를 받은 경우 아래와 같이 컴파일을 해줘야 한다.

# cd /usr/local
# svn co http://red5.googlecode.com/svn/java/server/trunk red5src
# cd red5

방법1 :

# cd /usr/local/red5src

# ant server &
# /usr/local/ant/bin/ant
# cp -a /usr/local/red5src/dist /usr/local/red5
# cd /usr/local/red5
# ./red5.sh &

방법2 :

# cd /usr/local/red5src
# make
# make install

# cd /usr/lib/red5
# ./red5.sh &

방법 3 :

# cd /usr/local/red5src
# ant prepare
# ant build

Target "build" does not exist in the project "RED5". 라는 에러가 발생했을 경우

# ant
or
# ant -f build.xml
# cp -a dist /usr/local/red5
# cd /usr/local/red5
# sh red5.sh &

;; 3번 권장함

최신버전으로 컴파일 시 간혹 아래와 같은 에러가 발생하는 경우가 있다.
------------------------------------------------------------------------
.
[ivy:resolve]           :: spring#spring-support;2.0.8: not found
[ivy:resolve]           :: javax#jsp-api;2.1: not found
[ivy:resolve]           :: red5#xercesImpl;2.9.0: not found
[ivy:resolve]           :: red5#groovy;1.0: not found
[ivy:resolve]           :: commons#commons-lang;2.3: not found
[ivy:resolve]           :: tomcat#jasper;6.0.14: not found
[ivy:resolve]           ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]
[ivy:resolve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

BUILD FAILED
/usr/local/red5-0.7.0/build.xml:205: The following error occurred while executing this line:
/usr/local/red5-0.7.0/build.xml:221: The following error occurred while executing this line:
/usr/local/red5-0.7.0/build.xml:165: impossible to resolve dependencies:
        resolve failed - see output for details
------------------------------------------------------------------------

위 문제는 ivy 라는 패키지 관리 도구에서 red5 컴파일 시 필요한 패키지를 사전에 정의된패키지 저장소에서 자동으로 다운로드 받게 되는데, 필요한 패키지를 찾을 수 없을때 발생한다.
ivy.xml 와 ivysettings.xml 파일에 다운로드 경로 정보가 있는데, 이것이 변동된 경우 발생하니 ivysettings.xml 에서 http://red5.googlecode.com/svn/trunk/repository/ 부분을http://red5.googlecode.com/svn/repository 로 수정하거나 최신 해당 파일을 다운로드 받으면 된다.

- Init script 만들기

# vi /etc/rc.d/init.d/red5
--------------------------------------------------------------------------

#!/bin/sh
#
# Startup script for Red5 flash streaming server
#
# chkconfig: 345 81 81
# description: RED5 by java
#
# processname: java (unfortunately)
# pidfile: /var/run/red5.pid
# config: /etc/red5.conf

# Source function library.

. /etc/rc.d/init.d/functions

PID_FILE=/var/run/red5.pid
PID=`ps ax |grep java|grep red5|awk '{print $1;}'`
RETVAL=0

start() {
echo -n $"Starting $DESCR: "
# daemon java $OPTIONS > /dev/null 2>&1 &

export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

exec $JAVA_HOME/bin/java -Djava.security.manager -Djava.security.policy=/usr/local/red5/conf/red5.policy -cp /usr/local/red5/red5.jar:conf:/usr/local/red5/conf org.red5.server.Standalone > /dev/null 2>&1 & RETVAL=$?

[ $RETVAL = 0 ] && touch /var/lock/subsys/red5 && echo $!>$PID_FILE && echo_success
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $DESCR: "
#killproc $PID_FILE
[[ $PID != "" ]] && success && kill $PID || failure
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/red5 $PID_FILE
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
*)
echo $"Usage: $DESCR {start|stop|restart}"
exit 1
esac

exit $RETVAL

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

# chmod 755 /etc/rc.d/init.d/red5
# chkconfig --add /etc/rc.d/init.d/red5

# /etc/rc.d/init.d/red5 start

- red5 spec file
----------------------------------------------------------------------------
Summary: Red5 Server
Name: red5
Version: 0.7.0
Release: 1
Source0: %{name}-%{version}.tar.gz
License: LGPL
Group: Applications/Networking
BuildRoot: %{_builddir}/%{name}-root
%description
The Red5 open source Flash server allows you to record and stream video to the Flash Player.
%prep
%setup -q
%build
ant dist-installer
%install
cp dist $RPM_BUILD_ROOT
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
/usr/local/bin/red5.init
%doc doc/changelog.txt
------------------------------------------------------------------------------

- Red5를 이용한 flv 동영상 스트리밍 Player 환경 구성하기

flash_media_player.zip 파일을 다운로드 받는다.
http://www.jeroenwijering.com/upload/flash_media_player.zip

# cp mediaplayer.html index.html

# vi index.html
------------------------------------------------------------------------------

<html>
<head>

<script type="text/javascript" src="swfobject.js"></script>

</head>
<body>

<p id="player2"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</p>
<script type="text/javascript">
        var s2 = new SWFObject("mediaplayer.swf","playlist","640","640","9");
        s2.addParam("allowfullscreen","true");
        s2.addVariable("file","playlist.xml");
        s2.addVariable("displayheight","480");
        s2.addVariable("backcolor","0x000000");
        s2.addVariable("frontcolor","0xCCCCCC");
        s2.addVariable("lightcolor","0x996600");
        s2.write("player2");
</script>

</body>
</html>

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

# vi playlist.xml
----------------------------------------------------------------------------------

<playlist version="1" xmlns="http://xspf.org/ns/0/">
        <trackList>
        <track>
        <title>Resident.Evil.Degeneration.2008</title>
        <creator>alang</creator>
        <location>rtmp://syszone.co.kr/oflaDemo/</location>
        <identifier>residentevil.flv</identifier>
        <meta rel="type">rtmp</meta>
        </track>
        </trackList>

.
.

</playlist>

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

위의 <location>rtmp://syszone.co.kr/oflaDemo/</location> 에 해당 red5 streams 디렉토리
경로를 지정한다.

기본 경로는 [RED5_PATH]/webapps/oflaDemo/streams 디렉토리 밑에 flv 파일을 넣어두면된다.


9. RED5와 OpenLaszlo를 이용한 스트리밍 환경 구축하기

http://www.openlaszlo.org 에서 최신 패키지를 다운받는다.

최신 개발 패키지  : http://download.openlaszlo.org/nightly/trunk

# tar xzvf openlaszlo-4.2.0-unix.tar.gz
# mv lps-4.2.0 /usr/local/lps
# cd /usr/local/lps/Server/tomcat-5.0.24/bin
# ./startup.sh
----------------------------------------------------------------------------------
Using CATALINA_BASE:   /usr/local/lps/Server/tomcat-5.0.24
Using CATALINA_HOME:   /usr/local/lps/Server/tomcat-5.0.24
Using CATALINA_TMPDIR: /usr/local/lps/Server/tomcat-5.0.24/temp
Using JAVA_HOME:       /usr/java/default

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

http://domain:8080/lps-4.2.0/demos/

# cd /usr/local/lps/Server/lps-4.2.0/demos/videolibrary
# vi videolibrary.lzx
----------------------------------------------------------------------------------

<include href="av/videoutils.lzx"/> -> 삭제

.
.
    <dataset name="ds_library"
        src="http:videolibrary.jsp?method=getLibrary"
        request="true"
    />

이 부분을 ..

    <dataset name="ds_library"
        src="http://192.168.123.2:8080/lps-4.2.0/demos/videolibrary/videolibrary.jsp?method=getLibrary"
        request="true"
    />

으로 ..

    <rtmpconnection id="rtc"
        autoconnect="true"
        debug="true"
        src="rtmp:localhost/test/instance1"
    />
 
이 부분을 ..

    <rtmpconnection id="rtc"
        autoconnect="true"
        debug="true"
        src="rtmp://192.168.123.90/oflaDemo"
    />

으로 변경

----------------------------------------------------------------------------------
# vi videolibrary.jsp
---------------------------------------------------------------------------------
 

  public String libraryDirectory =
        "/home/fms/applications/test/streams/instance1/"; --> 이부분을 ..
 "/usr/local/red5/webapps/oflaDemo/streams/" 으로 ..

    public String libraryUrl =
        "rtmp://localhost/test/instance1/"; --> 이부분을
 "rtmp://domain/oflaDemo/"; 으로 ..

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

아래 주소로 접속하면 확인이 가능하다.

http://192.168.123.2:8080/lps-4.2.0/demos/videolibrary/videolibrary.lzx

;; flv 파일명이 한글이면 안된다.
;; flv 파일 리스트와 썸네일이 보이지 않는다.

- thumbnail 관련 임시 조치

# cd /usr/local/lps/Server/lps-4.2.x/demos/videolibrary
# vi videolibrarythumbnail.lzx
--------------------------------------------------------------------------------

.
        <videothumbnail name="vt"
.
thumbnailtime="${classroot.thumbnailtime}" resource="resources/thumbnail.jpg"
 />

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

resources="원하는 thumbnail 파일 경로" 적어 준다.

....ㅠ.ㅠ

- lps URL 변경

# cd /usr/local/lps/Server/tomcat-5.0.24/conf/LPS/localhost
# vi lps.xml
--------------------------------------------------------------------------------
<Context docBase="../../lps-4.2.x" path="/lps-4.2.x">

위의 path="" 에 url에 표시될 alias명을 적는다.

http://domain:8080/<alias_name>

- SOLO 기능 이용하기

solo 는 laszlo에서 개발된 내용을 HTML과 swf 형태로 변경해 주는 관리 기능이다.
실제 laszlo로 미디어 관련 어플리케이션을 개발한 후 최종적으로는 solo를 이용하여
웹 컨텐츠 형태로 변형 시켜 사용한다.

solo 버턴을 클릭하면 해당 컨텐츠가 zip 파일로 압축된다.
압축 파일 위치는 /usr/local/lps/Server/lps-4.2.x/lps/admin 이다.

웹서버의 적당한 디렉토리 및에 해당 파일을 풀고 사용하면 된다.

- 동영상 저장소 분리하기

기본적으로 하나의 저장소에 동영상을 모두 저장해야 하는데, 이 경우 동영상의 수가
너무 많아 지면, 동영상 목록을 불려 올때 일정 시간 이후에 로딩되는 목록의 경우
익식을 못하는 문제가 발생한다.

또한 성격이 다른 동영상을 분리하여 저장할 필요가 있는데, 하나의 저장소를 통해
관리하기엔 한계가 있다.

저장소를 분리하여 관리하는 방법에 대해 알아보자.
본 방법이 정식적인 방법은 아니라고 본다. 그냥 될거 같아 해 보았는데 되더라.

일단 red5 의 동영상 서비스 위치인 /usr/local/red5/webapps/oflaDemo 을 다른이름
으로 복사한다.

# cd /usr/local/red5/webapps
# mkdir oflaDemo2007
# cp -a oflaDemo/WEB-INF/ oflaDemo2007/
# cd oflaDemo2007/WEB-INF

# vi red5-web.properties
---------------------------------------------------------------
webapp.contextPath=/oflaDemo2007
---------------------------------------------------------------

# vi web.xml
---------------------------------------------------------------
        <context-param>
                <param-name>webAppRootKey</param-name>
                <param-value>/oflaDemo2007</param-value>
---------------------------------------------------------------

# cd ..
# mkdir streams

이제 /usr/local/red5/webapps/oflaDemo2007/streams 밑에 해당 동영상을 복사한다.

그런 다음 lps 의 videolibrary 소스 저장소를 분리한다.

# cd /usr/local/lps/Server/lps-4.7.2/demos
# cp -a videolibrary videolibrary2007
# cd videolibrary2007/
# vi videolibrary.jsp
----------------------------------------------------------------

    public String libraryDirectory =
        //"/usr/local/src/red5/webapps/test/instance1/streams/";
        "/usr/local/red5/webapps/oflaDemo2007/streams/";

    public String libraryUrl =
        "rtmp://syszone.co.kr/oflaDemo2007/";
----------------------------------------------------------------

# vi videolibrary.lzx
----------------------------------------------------------------
    <dataset name="ds_library"
        src="http://syszone.co.kr:8080/lps-4.7.2/demos/videolibrary2007/videolibrary.jsp?method=getLibrary"
        request="true"
    />

    <rtmpconnection id="rtc"
        autoconnect="true"
        debug="true"
        src="rtmp://syszone.co.kr/oflaDemo2007/"
    />

# cd /usr/local/lps/Server/tomcat-5.0.24/bin/
# ./shutdown.sh
# /etc/rc.d/init.d/red5 stop
# /etc/rc.d/init.d/red5 start
# ./startup.sh

이제 웹 브라우저에서 확인을 한다.

http://domain:8080/lps-4.7.2/demos/videolibrary2007/videolibrary.lzx

본 문서의 데모는 blog.syszone.co.kr 의 동영상앨범과 LINKS 메뉴에서 실제 스트리밍
서비스를 확인해 보면 된다.

2011/08/24 14:32 2011/08/24 14:32
http://www.uploadify.com/
위 사이트에서 제공하는 멀티업로드 툴 입니다.
jQuery 기반으로 플레시를 사용하기 때문에 시각효과가 좋고

디자인 커스터마이징도 가능하기 때문에 활용 게시판에 사용하기 좋습니다.
필요하신분 사용해 보세요~                                       
2011/08/24 05:52 2011/08/24 05:52