Search Results for '프로그래밍/프로그램 팁 관련'


255 posts related to '프로그래밍/프로그램 팁 관련'

  1. 2011/09/02 원도우 특정 일자 이후 파일 삭제 방법 (delete files older than x days) forfiles
  2. 2011/09/02 네이버 블로그 / 카페에서 우클릭 및 내용 선택하기
  3. 2011/09/02 무료 웹표준 홈페이지 제작 솔루션 아티보드 3.0 출시 및 소개
  4. 2011/08/31 HTML5 Video Player 소개
  5. 2011/08/27 FOAF와 XFN 이란?
  6. 2011/08/27 기존 euc-kr 사이트를 utf-8사이트로 변경하는 방법
  7. 2011/08/27 웹 2.0 - 웹표준 홈페이지 통합 제작 솔루션 아티보드 3.0 소개 - 최강
  8. 2011/08/24 [정보] 플레시를 이용한 멀티업로더. 1
  9. 2011/08/24 [정보] Fake 웹 자동화 프로그램
  10. 2011/08/24 HTML5 Video Player 소개
  11. 2011/07/16 웹표준화의 장점
  12. 2011/07/16 왜 웹표준인가?
  13. 2011/07/14 node.js 의 플러그인 socket.io 0.7 간단 정리
  14. 2011/06/09 팝업창 오픈하고 부모창 이동후 아까 팝업창 재사용하기
  15. 2011/06/09 네이버 Syndicate API TEST MODULE 1
  16. 2011/06/09 IE9에서 jQuery Ajax 가 무반응일 때 임시 해결책
  17. 2011/06/09 2011년 3월 우편번호 - CSV
  18. 2011/05/29 Html 편집 없이 텍스트를 삽입 하자 3
  19. 2011/04/08 배치파일, 도스(DOS)에서 파일 삭제, 디렉토리 지우기 명령어; Delete File
  20. 2011/03/20 NHN 웹 표준화 가이드
  21. 2011/03/06 [웹브라우저]프레임(frame) 새로고침(리프레쉬, refresh)할 때 페이지 유지하기
  22. 2011/03/06 프레임 내에서 F5 누르면 현재화면 그대로 새로고침되기
  23. 2011/03/06 웹폰트가 그립습니까? 여기 방법이 있습니다.
  24. 2011/03/06 아파치 웹서버 사용 시 무단 링크 방지법
  25. 2011/03/06 smtp with gmail
  26. 2011/01/27 서브버전(Subversion) 윈도우 서버 설치
  27. 2011/01/27 jquery , prototype 충돌 방지 (같이 사용하는 방법)
  28. 2011/01/10 테스트 환경에 SharePoint Server 2010 배포
  29. 2010/12/10 [보안] 스팸 방지 대책, DomainKeys 설정.
  30. 2010/11/06 SVN 사용법과 용어 설명

원도우에서

유닉스의 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
http://www.uploadify.com/
위 사이트에서 제공하는 멀티업로드 툴 입니다.
jQuery 기반으로 플레시를 사용하기 때문에 시각효과가 좋고

디자인 커스터마이징도 가능하기 때문에 활용 게시판에 사용하기 좋습니다.
필요하신분 사용해 보세요~                                       
2011/08/24 05:52 2011/08/24 05:52
웹 자동화 프로그램의 대표는 selenium 이고 이전과 다르게 google web driver를 많이 이용하고 있죠. 맥쪽에 오래전부터 사용중인 괜찮은 프로그램이 있어서 소개해드립니다.

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

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

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

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


윈도우즈용은 없고, 개발할 생각도 없다고 하네요. 아쉽..                                       
2011/08/24 05:50 2011/08/24 05:50
안녕하세요.

이번에 아이패드 구입후 동영상 테스트 하려고 알아보던중 알게된 정보입니다. 참고 하세요.

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

http://praegnanz.de/html5video/


                               
2011/08/24 05:48 2011/08/24 05:48
국제표준화 단체의 대표인 W3C 는, 웹 표준화의 장점을 "확장성과 이식성"으로 보고 있다.

확장성이란, 웹 전달과 표현에 관한 새로운 아이디어가 생기면, 다음 버전의 HTML이나 브라우저의 지원을 기다리지 않고서도 즉시 구현할 수 있게 된다.

새로운 태그들이나 속성들이 새로운 가능성들을 표현하기 위해 정의될 수 있으며, 수신 측의 일부 프로그램이 그것을 이해할 수 있고 그것들 상에서 동작할 수 있다고 가정하면, 이전에는 절대로 일어나지 않았던 웹페이지 상에 새로운 것들이 일어날 수도 있다. XHTML에 관한 특이한 확장 판들로는, 수학적인 표현, 벡터그래픽, 그리고 멀티미디어 애플리케이션 등이 예정되어 있다.

만약 확장성이 보다 복잡한 페이지와 더 큰 프로그램으로 가게 될 것 같으면, 웹페이지들이 이전에 비해 더 간단하게 만들어짐으로써 소형장치들이 그것을 처리할 수 있도록 하기 위한,

이식성에 관한 장점이 중요성을 갖는다. 이것은 이동형 장비와, 마이크로프로세서, 프로그램 및 소형 메모리가 내장된 가정용 제품들 들에서는 중요하다.

XHTML은 마크업 복잡도에 몇 개의 수준을 정의하며, 각 문서의 시작부분에는 복잡도 수준을 나타낸다.

소형 장치들 내의 프로그램은 소형 프로그램과 메모리로도 처리할 수 있도록, 복잡도가 가장 낮은 수준으로 기술된 XHTML 파일들을 기대할 수 있다.

그럼 W3C가 말한 것 이 외에 장점들을 좀 더 세분화 하여 알아보도록 하자.

먼저, 눈에 보이는 장점으로는 바로 ‘마크업과 CSS분리를 통해 나타나는 장점’ 부터 알아볼까 한다.

기본적으로 비유를 통해 접근해 보자면 어떠한 반 안에 영어를 쓰는 아이들과 일본어를 쓰는 아이들이 섞여 있다고 해보자. 영어와 일본어를 잘하는 사람이라도 두 가지의 다른 언어로 말하는 아이들의 말을 정리하거나 해석하려면 복잡해서 정확하게 이해하지 못하거나 이해한다 하더라도 느리게 될 것이다.

그런데 이렇게 모여 있는 아이들을 영어반, 일본어반으로 나눠 본다고 해보자. 이전에 한 반에 모여있던 아이들에 비해서 나눠진 반에 아이들은 적어서 관리하기 편할 뿐만 아니라 같은 언어로 말하기 때문에 이해에서도 빠를 것이다.

이와 같이 웹 표준을 지키지 않은 홈페이지들 같은 경우 비대한 마크업 언어와 스타일이 공존하면서 수정을 하려면 일일이 소스를 분석 해야 하는 번거로움이 따랐다. 하지만 웹 표준에 의해 제작된 홈페이지 같은 경우는 XHTML과 CSS 분리하여 관리하기 때문에 여러 면에서 많은 장점을 갖게 되었다. 그럼 분리를 통해 나타난 장점부터 알아볼까 한다.

수정과 관리 EASY!!

지금까지 새로운 버전의 브라우저가 출시되거나 사이트 디자인이 큰 폭으로 리뉴얼 될 때마다 제작자가 페이지를 새로 제작해야 했다. 또 여러 사람이 사이트를 관리하는 경우 서로 다른 마크업 때문에 불필요한 혼란이 생기는 문제도 있었다.

하지만 XHTML로 컨텐츠를 올바르게 구조화하고 CSS로 시각표현을 통일하여 제어하는 웹표준화를 따라 지키게 되면 장뿐만이 아니라 사람 또한 알아보기 수월해진다.

또한 페이지 제작 및 수정 관리 등이 부담이 줄어든다.

왜냐하면 이전과 같은 경우 수정을 위해서는 적게는 몇십개 많게는 몇백개 되는 파일의 html을 매번 수정하는 것이 아니라, CSS만 수정하더라도 모든 페이지에 적용할 수 있기 때문이다.

로딩속도 UP!! 서버 공간 및 처리 능력 비용 DOWN!!

기존에 스타일을 포함한 페이지소스에서 스타일을 제외한 마크업의 코드량은 눈에 띄게 줄어든다. 마크업이 줄어든다는 것은 페이지 로딩 시간이 빨라진다는 것을 의미한다. 또 코드량이 줄면 서버가 성능을 더 발휘할 수 있게 되므로 서버 공간이나 처리 능력에 들어가는 비용을 줄일 수 있습니다.

분리를 통한 장점은 위에서 알아 본 것과 같다 하지만 이것이 다가 아니다.

그럼 다음으로 표준화의 장점 중에 통일성과 이를 통해 오는 장점인 정확성에 대해 알아볼까한다.

우리가 어느 음식점을 가던 적은 사람이 갔을 때는 모르겠지만, 많은 사람이 가고 빠른 시간에 음식을 먹어야 할 때는 항상 말하는 말이 있다. ‘아줌마 여기 그냥 이걸로 통일이요!’

그뿐만 아니라, 여러 사람들을 통제해야 할 때 같은 티셔츠를 입거나 같은 모자를 입고 움직이는 것을 많이 봐왔을 것이다. 하지만 이 통일성이 주는 장점은 빠른 시간에 많은 것을 해결하기 위함이 아니라는 것이다.

축구, 농구 등등 스포츠에서 보면 알 수 있듯이 유니폼이라는 통일성을 통해서 우리 편임을 확인할 수 있게 되고 그것으로 인해 멀리 있고 많은 사람들이 함께 있는 가운데에서도 있어 정확하게 패스를 할 수 있는 것이다.

이와 같이 웹 표준을 지키지 않은 사이트 같은 경우 브라우저 별로 다르게 보일 뿐 아니라,

심지어 어떤 브라우저에서는 깨지고 틀어지는 현상까지 일어난다.

하지만 웹표준을 지킨 사이트 같은 경우는 아래와 같은 장점이 있다.

브라우저 별 해석력 ↑ 접근성 ↑

브라우저 별 해석력 향상

브라우저는 자기 자신의 언어로 작성되길 원합니다. 브라우저마다의 언어로 작성하기란 매우 어려운 일입니다. 그래서 html이 있고 CSS가 있는 것입니다. 이것만이라 표준에 의거해서 작성한다면 브라우저들은 정확한 표현 하게 될 것입니다.

또한, 이를 통해 장치 해석이 매우 수월해진다. 이는 무엇을 의미하느냐? 1+1 = 2 라는 걸 쉽게 알 수 있다. 하지만 0.5+1.5=2 는 물론 결과는 같다만 1자리 연산과 2자리 연산 이라는 차이가 발생하며 좀더 복잡한 과정을 거치게 된다. 장치도 마찬가지로 쉽게 설명하면 쉽고 빠르게 이해 할 수 있게 되는 것이다.

브라우저 별 접근성 향상

브라우저의 특성과는 상관없이 모든 브라우저에서 인식하는 올바른 XHTML 과 CSS로 작성하였기에 IE에만 적용되는 것 뿐 아니라 모든 브라우저에서 동일한 디자인과 동일한 결과를 보이게 된다.

최종적인 목적은 모든 브라우저의 일관성인 만큼 웹 표준을 이용해 작성한 문서는 최대한 많은 웹 브라우저와 장치에서 읽을 수 있다. 대부분 브라우저, 휴대폰, PDA, 심지어 장애인 지원용 소프트웨어에서도 컨텐츠를 쉽게 읽을 수 있다.

이처럼 장애인과 노인을 배려하기 위한 웹표준의 웹페이지는 결국에는 모든 브라우저에 인식 되어지게 되고 모든 사람에게 높은 접근성을 제공하는 페이지가 된다는 것이다.

2011/07/16 15:00 2011/07/16 15:00

여러분 가게에 물건 구경하겠다는 손님을 그냥 내쫓겠습니까?
손님이 시각장애인이라는 이유로 물건을 팔지 않겠습니까?

웹표준을 지키지 않으면 알게 모르게 놓치는 것들이 많습니다!

웹표준? 웹접근성? 그게 뭐길래?

웹표준을 지킨다 즉, 웹접근성을 높인다는 말은 무엇이고.
웹표준을 지키면 뭐가 좋길래 사람들이 웹표준, 웹표준 할까요?
똑같은 데이터를 가지고 있는 웹사이트가 있습니다.

사용자 삽입 이미지

웹표준을 지키면 검색엔진 노출이 잘 됩니다. 반면 그렇지 않으면 검색엔진 노출도 힘들어 집니다. 또한, 웹표준을 지키지 않으면 어렵사리 찾아온 고객을 내쫓는 경우도 발생합니다.

웹표준을 지키면 브라우저나, 장치, 기기에 관련없이 조금더 많은 사람에게 정보전달을 할 수 있습니다. 또한 검색엔진 유입량도 늘어납니다. 웹표준을 지키지 않으면, 우리 웹사이트에서 가지고 있는 정보가 모두에게 전달될 수 없습니다. 제한된 일부 사람들에게만 전달될 뿐이지요. 이것은 매우 비효율적 입니다. 똑같은 데이터를 가지고 있는데 웹표준을 지원하고 안하고는 웹사이트의 정보를 더욱 많은 사람에게 전달할 수 있고 못하고의 차이를 가져옵니다. 그 이외에 웹표준을 지키면 다양한 장점이 있습니다. 그 장점들을 소개해 드리겠습니다.

크로스브라우징
혹시 익스플로러에 최적화하여 사이트를 제작하셨습니까? 파이어폭스나, 사파리, 오페라 등 다른 브라우저에서 웹사이트 레이아웃이 문제없이 출력되며, 문제없이 작동되는지 확인해보셨나요? 웹표준을 지킨 웹사이트는 일단 크로스브라우징을 가능하게 해줍니다. 내가 만든 웹사이트를 방문하는 방문객이 익스플로러를 사용하든, 파이어폭스를 사용하던, 사파리나 오페라 등의 특이한 브라우저를 사용하든 늘 한결같은 모습을 보여줍니다. 아래의 그림을 보시면 이해가 쉽게 되시리라 생각됩니다.

사용자 삽입 이미지
물론 익스플로러의 점유율에 비하면, 아직은 보잘것 없는 파이어폭스나 사파리등의 점유율 입니다. 그렇지만, 단 한 명이라도 방문객을 더 유치하기 위해서라면 웹표준은 반드시 지켜야겠지요.

데이터와 디자인의 분리?!
이 말은 처음 웹표준을 접하는 분들께는 언뜻 이해하기 어려운 개념일 수 있습니다. 하나의 웹페이지를 흔히 우리가 다루는 A4 용지의 문서처럼 하나의 문서라고 가정합시다. 그렇다면 해당 웹페이지는 디자인을 배제하고 기본적으로 문서의 형태를 띄고 있어야 합니다. 그 기본적인 문서의 형태를 띄면서 데이터를 가지고 있는 것이 HTML 입니다. 그리고 이 HTML 페이지를 좀 더 다양하고 보기좋게 디자인 해주는 역할을 하는 것이 바로 CSS입니다.

사용자 삽입 이미지
사용자 삽입 이미지

CSS Zen garden의 웹사이트 입니다. HTML 문서를 보세요. 큰 제목부터 작은 제목, 그리고 단락별로 들어가는 내용까지... HTML 문서의 구조화가 잘 되어있지요? HTML 파일에는 손 하나도 안대고, CSS 만 교체하여 전혀 색다른 느낌의 웹사이트 디자인을 만들 수 있습니다. 잊지마세요. HTML은 문서!(데이터) CSS는 디자인 속성 저장!


모바일 기기를 위한 웹표준
CSS가 지원되지 않는 모바일 기기에서 여러분의 웹사이트는 접속을 원하는 이용자에게 정보전달을 제대로 하고 있나요? HTML데이터와 CSS디자인을 완벽하게 분리하여 웹표준에 따라 작성된 웹페이지는 CSS가 지원되지 않는 모바일 기기에서도 원하는 정보를 완벽하게 전달할 수 있습니다. (단, WAP등 VM기반 휴대폰 전용 서비스로 개발된 웹페이지 제외)


사용자 삽입 이미지

CSS가 지원되지 않는 모바일기기에서 접속해도 충분히 원하는 정보를 얻을 수 있도록 데이터와 디자인이 잘 분리되어 있는 '다음'메인페이지의 경우(우측 핸드폰 사진은 합성한 것입니다)


사용자 삽입 이미지

데이터와 디자인의 분리가 되지 않은 사이트는 모바일 기기가 아예 웹페이지를 해석하지 못하기도 합니다. 또한 CSS없이 사이트를 읽어들이면 아래 사진처럼 사이트가 폭격을 맞은냥 깨져서 출력됩니다. 사이트 이용이 전혀 불가능하게 됩니다. 조사결과 웹표준을 지키는 컴퓨터학원 홈페이지는 한군데도 없었고, 홈페이지 제작업체들도 웹표준을 거의 지키지 않고 있었습니다. 명색이 홈페이지로 돈벌어 먹고 사는 사람들이 말입니다. (위 사진은 합성된 이미지 입니다)



시각장애인을 위한 스크린리더기의 지원
웹은 평등합니다. 웹은 사람을 차별하지 않습니다. 하지만 언제부턴가 우리나라는 많은 디자이너/개발자분들께서 의미를 담은 웹페이지는 신경을 쓰고 있지 않습니다. 사이트는 테이블로 통자이미지를 덕지덕지 붙여서 보여주기에만 급급한 경우가 많고, 필요없는 플래시 U.I.를 남발하여 웹페이지의 의미를 알아볼 수 없게 만들고 있습니다. 앞을 못보는 시각장애인을 위한 사이트를 고려해보셨습니까? 웹표준을 지키면 시각장애를 가진 분들도 웹사이트를 편안하게 이용할 수 있게 해줄 수 있습니다. 그래서 웹접근성도 한층 높아집니다.

사용자 삽입 이미지
계속 강조하는 것이지만, HTML 문서를 코딩할 때는 꼭 의미에 맞는 코딩을 해야합니다.
예를 들어서, 강조하고 싶은 문장이 있는데, 해당 부분을 <b> 태그로 감싸면 글씨만 굵어질 뿐, 브라우저나 스크린리더기는 해당 문장을 중요문장으로 취급하지 않습니다. 웹표준에 맞는 태그는 <b>태그가 아니라 <strong>입니다. 이처럼 웹표준에 부합하는 태그들이 있습니다. 숙지하시어 사용하시기를 권장합니다.

사이트 디자인 관리 시간 단축
데이터와 디자인의 분리. 즉, HTML 페이지는 말그대로 문서상태이고, CSS를 통해서 웹페이지를 디자인 합니다. 그러면, CSS를 여러개 만들었을 경우, CSS 파일의 경로를 변경하는 것 만으로 새로운 디자인으로 사이트를 리뉴얼 할 수 있습니다. 또한 기존에는 사이트에 이미지나 스타일 하나만 변경하더라도 페이지마다 다 바꿔주어야 하는 번거로움이 있었습니다. 하지만 HTML 과 CSS의 분리는 이런 작업시간까지 단축시켜 주었습니다. CSS에서 코드 한 줄만 수정해주면, 수백~수천페이지의 디자인이 한꺼번에 변경이 가능하게 되었습니다. 이것은 추가적으로 웹사이트 관리 비용절감의 효과도 가져옵니다.

사용자 삽입 이미지

디자인을 수정해야하는 페이지가 12500페이지라면 여러분의 선택은?


검색결과 상단에 노출되고 싶으세요? 그럼 웹표준을 지키세요!
실제로 똑같이 그래픽 처리가 된 두개의 웹사이트가 있다고 가정합시다. 하나의 사이트는 데이터와 디자인 분리를 하지 않고 많은 사이트이고, 다른 하나는 데이터와 디자인을 완벽하게 분리하여, 웹페이지의 내용과 의미를 정확하게 담고 있습니다. 겉보기는 똑같지만 속은 완전히 다른 사이트이지요. 한 쪽은 페이지의 의미를 정확하게 담고 있고, 한쪽은 페이지의 의미가 해석불분명하니까요.

이것은 검색결과에 상당한 영향을 미칩니다. SEO에서 웹표준은 많은 부분을 차지합니다.

검색엔진의 검색결과 상단에 노출되기 위해서 메타태그나 title 태그의 활용, 본문에서 주력 단어의 빈도수 노출 등 많은 부분이 널리 알려져서 활용되고 있습니다. 그렇지만 아직까지, 웹표준을 지키면 검색엔진의 검색결과 상단에 컨텐츠가 노출된다는 사실은 그다지 많이 알려져 있지 않습니다.

대표적으로 H1, H2, H3 ... 제목 태그인 h 태그의 SEO는 막강합니다.

사용자 삽입 이미지

저의 블로그 제목은 '쏭군은 열정 드리머' 입니다만, CSS를 이용하여 MONOEYES라는 블로그 제목으로 이미지 치환 해두어 텍스트는 감추어 두었습니다. 보이지만 않을뿐 문서의 대제목은 '쏭군은 열정 드리머'라는 속성을 항상 가지고 있는 것입니다. 구글에서 검색한 결과 최상단에 H1 태그가 검색되어 출력됩니다.



사용자 삽입 이미지

포스팅 제목의 경우 검색엔진에서 검색되는 빈도가 많아야 하는 중요한 부분인 만큼, 문서 대제목인 H1 다음으로 H2를 주었습니다. H1 보다 중요도는 떨어지지만, 단락의 대제목으로서 검색엔진 검색결과에서 만족스러운 노출을 보여줍니다. 위의 사진은 CSS를 제거했을 때, 포스트 제목이고, '디올 어딕트'라는 디올의 제품을 구글에서 검색했을 때, 가장 상단에 쏭군의 블로그가 노출되는 것을 보실 수 있습니다.


DIV와 TABLE 논란은 문제의 본질이 아닙니다
많은 분들이 DIV=웹표준, TABLE=비표준이라는 인식을 가지고 계십니다. 문제는 DIV냐 TABLE이냐가 아닙니다. DIV나 TABLE은 모두 웹페이지를 작성하기 위한 '도구'일 뿐이지, 그 자체가 '웹표준이냐 아니냐'를 가늠하는 목적이 될 수 없습니다.

TABLE은 데이터를 출력하기 위해 존재하지 레이아웃 짜라고 존재하는 것이 아닙니다
테이블은 말그대로 데이터들을 표형식으로 출력해야 할 필요성이 있을때만 사용합니다. 테이블로 레이아웃을 만들게 되면, 웹페이지의 로드 속도도 느리게 되고, 웹페이지를 수정할 곳이 생기면 자칫 페이지 전체를 뜯어내야하는 대공사가 발생될 수 있습니다.

TABLE에 없는 DIV의 장점
모듈화? 디자인을 하시는 분들께는 말이 어렵지요. 하지만 간단한 뜻입니다. 필요한 부분을 마음껏 떼어서 쓸 수 있게 웹사이트를 만들 수 있다고 생각하시면 됩니다. 예를 들어, 테이블로 웹사이트 레이아웃을 구성하면 로그인 박스 하나를 바꾸기 위해서 웹페이지의 다른 부분도 영향을 주거나, 웹페이지 전체를 뜯어내야 하는 경우가 대부분입니다. 그렇지만 DIV로 작업을 하면 원하는 박스만 떼어서 디자인을 수정할 수 있고, 또 그 박스는 얼마든지 다른 페이지에 자유롭게 붙였다 뗐다 하면서 재활용이 가능합니다.

게다가 TABLE 레이아웃을 구성할때보다, 작업의 속도나 사이트 관리적인 측면에서 훨씬 이득을 볼 수 있고, 페이지 로드도 테이블 레이아웃 보다 빠릅니다.

하지만 TABLE이 꼭 필요한 곳은 테이블을 쓰세요
테이블을 이용해서 웹사이트의 레이아웃을 짜면 나쁜 것 입니다. 하지만 반드시 테이블이 들어가야 할 곳이 있습니다. 반드시 데이터형식을 표방식으로 보여주어야 하는 곳은 테이블을 쓰는편이 낫습니다.

사용자 삽입 이미지

테이블을 유용하게 활용하고 있는 올블로그와 네이버


만약 위의 프리미어리그 점수판을 표를 사용하지 않고 DIV나 LI 를 이용해서 표현했다고 가정합시다. 그 페이지의 CSS가 지원되지 않을때 오히려 팀별로 득점이나 승점을 보기가 힘들어집니다. 이런 표형식의 데이터는 TABLE을 사용하는 것이 더욱 웹표준에 부합합니다. 또한 CSS를 깼을때도 점수표를 깔끔하게 출력할 수 있구요. 반드시 이런 데이터처리에만 TABLE을 쓰시고 어지간하면 사용하지 않는 것을 권장드립니다. 더구나 TABLE로 레이아웃을 짜는 비통한 일은 다시는 있어서는 안 되겠지요. 데이터를 표시하라고 하사한 TABLE 이거늘.. 그걸로 홈페이지 레이아웃을 만들면 원래 목적에 어긋납니다.

스크립트 사용시

될 수 있으면 스크립트 사용을 자제하는 것이 좋습니다. 부득이 스크립트를 사용해야 하는 경우라면, 모든 브라우저에서 작동되는 스크립트를 사용하시고, 스크립트가 지원되지 않는 환경을 위해서 스크립트 없이도 웹사이트를 이용할 수 있도록 차선책을 미리 만들어 두시는 것을 권장합니다.

서버 부하를 덜어줌
디자인 정보를 CSS에 저장함으로서, 관련 소스코드를 획기적으로 줄일 수 있습니다.
또한, CSS는 캐싱되어 웹사이트에 최초 접속할 때 한번만 로드되므로, 서버 부하를 획기적으로 줄여줄 수 있고, 규모가 큰 사이트라면 비용 절감 효과도 가져올 수 있습니다.

긴 글 읽느라 고생 많으셨습니다. 글쓴이를 표기하신다면 본 문서를 상업적으로 이용하셔도 되고, 어디에나 퍼가셔도 됩니다. 웹표준을 처음 접하시는 분들께 도움이 되고자 작성한 문서인데. 조금이나마 도움이 되셨으면 좋겠습니다.
2011/07/16 14:57 2011/07/16 14:57
이 글은 제가 socket.io를 사용하면서 readme 파일을 안되는 실력으로 번역 한 것 입니다.

원본 : http://artworker.storylang.com/story/to/36

Socket.io는 Node.js 의 프로젝트중 하나로 모든 브라우저에서 실시간 웹을 구현 가능하도록 만들어 준다. 또한, WebSockets를 다양하고, 확장가능하도록 향상 시키며 자동으로 JSON을 인코딩 디코딩 한다.

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

인스톨 방법

npm install socket.io
npm이 설치 되어 있어야 합니다.

사용방법
첫번째로 socket.io 를 가져옵니다.

var io = require('socket.io');
기본적으로 외부 라이브러리를 가져올 경우 require라는 메서드를 사용합니다.
다음으로 http/https 를 생성합니다.(아래 예는 node.js의 또 다른 프로젝트인 express를 함께 사용할 경우 예제 입니다)

var express = require('express'), //express를 가져오기
app = express.createServer(), //express를 이용 서버 생성
, io = io.listen(app); // io에 app 등록

app.listen(80); //포트 지정

io.sockets.on('connection', function (socket) { //소켓 연결 성공시
socket.emit('news', { hello: 'world' }); //클라이언트의 news 함수 실행
socket.on('my other event', function (data) { //my other event 함수 생성
console.log(data);//콘솔 출력
});
});
마지막으로 클라이언트 코드를 작성 합니다.

<script src="/socket.io/socket.io.js"></script>//기본적으로 필요한 클라이언트 스크립트
<script>
var socket = io.connect('http://localhost'); //소켓 생성
socket.on('news', function (data) { //news 함수 생성
console.log(data); //콘솔 출력
socket.emit('my other event', { my: 'data' }); //서버 my other event 함수 실행
});
</script>
이제 웹상에서 실행해 보면 로그창에 다음과 같이 출력 되는 것을 확인 가능 합니다.

{ hello: 'world' }
기타 추가적인 예제는 예제 디렉토리를 확인해 주세요.

네임스페이스 생성
네임스페이스의 핵심은 하나의 웹소켓 연결로 여러 연결을 처리 하는 것을 말합니다.
서버 코드
var io = require('socket.io').listen(80);

var chat = io
.of('/chat');
.on('connection', function (socket) {
socket.emit('a message', { that: 'only', '/chat': 'will get' });
chat.emit('a message', { everyone: 'in', '/chat': 'will get' });
});

var news = io
.of('/news');
.on('connection', function (socket) {
socket.emit('item', { news: 'item' });
});
클라이언트 코드
<script>
var chat = io.connect('http://localhost/chat')
, news = io.connect('http://localhost/news');

chat.on('connect', function () {
chat.emit('hi!');
});

news.on('news', function () {
news.emit('woot');
});
</script>


휘발성 메세지 보내기
클라이언트가 부득이 하게 내가 보낸 메세지를 받지 못할 경우가 있습니다. 네트워크가 느리다거나 롱폴링으로 연결이 되어 있는 경우등이 있을 수 있습니다. 만일 클라이언트가 메세지를 받지 못한경우를 대비해 휘발성 메세지를 사용합니다.(대충, 코드를 보면 클라이언트가 메세지를 받을때 까지 지속적으로 메세지를 보내는 성질의 기능인 듯하나, 확실하지 않다, 추후에 수정 할 예정)

서버 코드
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
var tweets = setInterval(function () {
getBieberTweet(function (tweet) {
socket.volatile.emit('bieber tweet', tweet); //volatile 이 핵심 메서드
});
}, 100);

socket.on('disconnect', function () {
clearInterval(tweets);
});
});
클라이언트 코드
클라이언트의 경우 기존과 같은 방법으로 주고 받습니다.

메세지 응답(콜백) 받기
가끔 내가 보낸 메세지를 수신했는지 알아보고 싶을 경우가 있습니다.
.send와 .emit을 이용하여 간단히 마지막 파라미터로 함수를 넘겨 줄 수 있습니다.
.emit을 사용하면 응답은 내가 보낸 함수를 실행하게 됩니다.

서버 코드
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
socket.on('ferret', function (name, fn) {
fn('woot');
});
});

클라이언트 코드
<script>
var socket = io.connect(); // TIP: .connect with no args does auto-discovery
socket.on('connection', function () {
socket.emit('ferret', 'tobi', function (data) {
console.log(data); // data will be 'woot'
});
});
</script>

메세지 전달하기
메세지는 간편하게 broadcast에 .emit과 .send 메서드를 호출 하여 사용가능 합니다.
Broadcating은 나를 제외한 모두를 뜻합니다.

서버코드
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
socket.broadcast.emit('user connected');
socket.broadcast.json.send({ a: 'message' });
});

그룹 만들기
소켓을 위한 채널을 생각하면 됩니다. 어떤 특정 그룹안에 모든 사용자들에게 메세지를 보내고 싶을때 유용하며
sockets에 .join과 .leave을 사용합니다.

서버 코드
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
socket.join('justin bieber fans');
socket.broadcast.to('justin bieber fans').emit('new fan');
io.sockets.in('rammstein fans').emit('new non-fan');
});

크로스 브라우저 웹소켓 사용하기
간단히 .send로 보내고 message 이벤트로 받아 사용 가능합니다.

서버 코드
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
socket.on('message', function () { });
socket.on('disconnect', function () { });
});

클라이언트 코드
<script>
var socket = io.connect('http://localhost/');
socket.on('connect', function () {
socket.send('hi');

socket.on('message', function (msg) {
// my msg
});
});
</script>


설정 변경하기
Tj-style로 socket.io의 설정을 변경할 수 있습니다.

서버 코드
var io = require('socket.io').listen(80);

io.configure(function () {
io.set('transports', ['websocket', 'flashsocket', 'xhr-polling']);
});

io.configure('development', function () {
io.set('transports', ['websocket', 'xhr-polling']);
io.enable('log');
});                                       
2011/07/14 22:58 2011/07/14 22:58
* 팝업창 오픈하고 부모창 이동후 팝업창 재사용하기

1. 부모창에서 팝업창을 엽니다.
2. 부모창의 주소를 바꿉니다. (same domain)
3. 부모창의 주소가 바뀌고 아까 열은 팝업창을 자동으로 엽니다.

전에 게시물에 질문을 올린글입니다.

var wndObj = window.open(...);

이렇게 하면 윈도우 개체를 구해서 wndObj에 넣고 팝업 윈도우를 제어할 수 있습니다.
그런데 부모창의 페이지가 같은 도메인내에서 바뀌었다고 가정했을때도
부모창의 이전 페이지에서 열은 wndObj를 참조할 수 없습니다.

웹브라우저는 페이지가 바뀌면 처음부터 다시 시작하니까요.
window 개체에는 이미 열린 팝업창을 담고 있는 어떠한 레퍼런스도 없습니다.

이 부분에 대해 자료를 찾아 봤는데 구글신과 양키님이 힌트를 주신것이 있어서
소개합니다. (상단 링크1 참조)

골자는 이렇습니다.

if ($_SESSION['inChildSite'] ==true ) echo "<script>window.open(...)</script>"

1. Set cookie A from parent site when launching child popup.
2. Set cookie B from child site on every page load.
3. Clear cookie B from child site on every page unload.
4. When logging out of parent site:
4-1. If cookie A is set, clear it and close local connection to child site.
4-2. If cookie B is set, clear it and open child logout page in popup.

요즘 브라우저들이 윈도우 오픈시 팝업창을 못열게 막아놓습니다.
그렇지만 같은 도메인에서 오픈한 팝업창을 다시 open 할 수는 있습니다.
(경고창 없이)

상단 링크2에서 "팝업창" 링크를 클릭해서 팝업창을 열고
하단의 feedback_2 link를 눌러서 부모창의 주소를 바꿉니다.
그러면 부모창에서 2번 페이지에서 열리는데 이때 아까 팝업창이 경고 메세지 없이
재호출되는것을 확인할 수 있습니다. (IE6, IE8 정상작동)

※ 확인을 위해 팝업창에는 랜덤 숫자와 날짜와 시간이 표시됩니다.

───────────────────────────────────────
문제는 파이어폭스나 구글크롬의 경우, <body onload> 시에
자동으로 오픈한 팝업창의 경우 .focus() 명령을 거부하는겁니다.
setTimeout()을 써도 안됩니다. (정상적인 방법으로는 불가능)

이거 해결하려면 외국의 벌거벗은 여자들 나오는 스팸 페이지 찾아가서
거기 자바스크립트 분석해서 만들어야 합니다.

아무튼 어디서 봤는데 파이어폭스던 구글크롬이던 경고창 없이 무조건 팝업창을
열게하는 코드가 사용되고 있더군요. (야매로는 가능)
───────────────────────────────────────

[핵심] 자바스크립트가 제일 짜증난다.

[결론] 웹브라우저 제작사는 window.getWindowByName() 을 만들어 달라!!                                       
2011/06/09 04:48 2011/06/09 04:48
제가 이해한 네이버 Syndicate API 란
구글 sitemap 과 비슷하게 유저가 검색엔진에 자기 콘텐츠를 알리고,
로봇이 다시 크롤링해서 결과를 받아가는 시스템입니다.

즉 프로세스가
1. 유저 -> 검색엔진 요청
2. 검색엔진 -> 유저의 웹서버 조회
3. 웹서버 출력 -> 검색엔진 DB에 반영

http://dev.naver.com/openapi/apis/function/syndication

간단하게 테스트를 하자면

<?
$api_url = 'http://syndication.openapi.naver.com/ping';

$syndi_url = 'http://www.totalcoupon.co.kr/syndi/syndi_echo.php';
$domain = 'www.totalcoupon.co.kr';
$s = "$syndi_url?id=tag:$domain,2011:site&type=site";
$s = 'link='.$s;

$header = "POST /ping/ HTTP/1.0\r\nUser-Agent: Mozilla/4.0 (compatible; NaverBot/1.0; http://help.naver.com/customer_webtxt_02.jsp)\r\nHost: syndication.openapi.naver.com\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n".$s."\r\n";

echo $header;
//exit;
$fp = fsockopen('syndication.openapi.naver.com', '80', $errno, $errstr, 5);
$ret = '';
if($fp){
fputs($fp, $header);
while ($line = fgets($fp)) $ret .= $line;
fclose($fp);
}
echo $ret;
?>

대충 이렇게 하면 되고요

http://syndication.openapi.naver.com/status/?site=www.totalcoupon.co.kr

반영이 되면 여기에 error 값 0 이 나오고 standby 상태가 될꺼에요.
2011/06/09 04:47 2011/06/09 04:47
IE8 에서 잘 작동 하던 jQuery 의 Ajax 통신이 IE9로 업글 후에 먹통이 되더군요.
같은 소스가 FF 4.0 에서는 잘 작동합니다.;;;

Fiddler로 확인 해본 바 데이터는 정상으로 받아오지만 data 자체를 뿌릴 수 없는
이상한 오류가 발생되었습니다.

하다못해 alert(data) 해서 유형이라도 볼라고했지만 이것도 무반응.!!

할 수 없이 구글링을 했지만 딱히 뾰족한 방법이 없어서 계속 찾던 중

http://blog.sforce.com/sforce/2011/03/visualforce-rerender-and-internet-explorer-9.html

이곳에서 힌트를 얻어 해당 Ajax 데이터를 처리하는 소스에 다음 한 줄을 추가했더니
정상 작동하였습니다.;;;

@header('X-UA-Compatible: IE=EmulateIE8');

물론 임시 방편입니다. 이 마저도 정보 공유가 안되면 난감하실분들을 위해 몇자 적었습니다.

IE9 에서 보안부분이 바뀌었거나 json 데이터 처리 방식이 바뀌어서 이런 현상이
발생하는 것으로 추정됩니다.

혹시라도 더 좋은 해결방안이 있으면 댓글로좀 알려주세요.!!
2011/06/09 04:46 2011/06/09 04:46
최근 우편이 필요해서 구했는데 csv로 되어 있습니다.
원하는 포멧으로 변경후 사용하세요..

그냥 버리려다 혹시해서 올립니다..    

                                  
2011/06/09 04:44 2011/06/09 04:44
갑자기 html에 메세지를 추가해야 하지만 html을 수정 하기 난감한 경우가

가끔 가다가 있습니다. 이럴 경우 Jquery 의

append , insertBefore , insertAfter ,prepend 기능을

사용하여 기존의 html 을 편집 없이 메세지 혹은 버튼등을 추가 할수 있습니다.

이경우 제일 강점은 자기가 원하는 위치에 삽입이 가능 하다~!! 라는 것이겠지요.

자세한 것은 html을 받아 보시면 되겠습니다.

이미 아시는 분들은 가볍게 ESC 키를 눌러주심 감사하겠습니다.        
                              
2011/05/29 23:49 2011/05/29 23:49
도스창(명령 프롬프트)이나, 배치 파일 (Batch File) 에서, 불필요한 파일을 지우기 위해서는 del 이라는 명령어를 사용합니다.


지정한 파일 하나만 삭제하는 명령


del 0.obj

예를 들어 0.obj 라는 파일을 지우려면 위와 같이 합니다.


지정한 확장자의 파일들만 지우기 명령


del *.bak

.bak 확장자를 가진 모든 파일을 한꺼번에 지웁니다.



읽기전용 파일 삭제


del /f 0.obj
이런 식으로 /f 옵션을 붙여야 합니다. 그렇지 않으면 액세스가 거부되었습니다.라고 나오며 지워지지 않습니다.


숨김 속성 파일 (히든파일) 삭제


del /a 0.obj
이렇게 /a 옵션을 붙입니다. 그렇지 않으면 D:\Y\0.obj을(를) 찾을 수 없습니다.라는 에러가 나고 지워지지 않습니다.


현재 디렉토리(폴더)의 모든 파일 한꺼번에 지우는 명령


del .

현재 디렉토리의 모든 파일을 지우려면 위와 같이 합니다. 위험한 작업이기에 도스가 우선 D:\Y\*, 계속하시겠습니까(Y/N)? 이렇게 물어봅니다. Y 키를 누르면 파일이 모두 지워집니다.

참고로 마침표(.)는 현재 디렉토리를 의미합니다.






하위 디렉토리(폴더) 지우기 명령


파일이 아닌 디렉토리를 지우려면 rmdir 이라는 명령어를 사용합니다.
rmdir 000

현재 디렉토리 밑의 "000" 이라는 이름의 디렉토리를 위와 같은 방법으로 지울 수 있습니다.

다만 그 디렉토리 안에 파일이 들어 있으면 디렉터리가 비어 있지 않습니다. 이런 에러가 나고 지워지지 않습니다.

이때는
rmdir /s 000
이렇게 /s 옵션을 붙이면, 디렉토리가 비어 있지 않더라도 지워집니다. 굉장히 위험한 옵션이니 주의가 필요합니다.





추가 사항:
윈도 탐색기와 달리, 명령프롬프트(도스창)에서 파일을 지우면, 휴지통으로 들어가지 않고 곧바로 지워지기에 복구가 힘들거나 불가능합니다.
2011/04/08 19:56 2011/04/08 19:56
사용자 삽입 이미지



http://html.nhndesign.com/

2011/03/20 03:10 2011/03/20 03:10
제목 그대로 PHP로 생성한 프레임에서 새로고침할 때 페이지 유지하기입니다.

필요하신 분들 많았으리라 봅니다. ;;

전부터 PHP를 이용해 만든 프레임 페이지에서 브라우저의 refresh 버튼을 누를 때

현재 보고 있는 페이지가 아니라 src=''로 정해줬던 페이지가 뜨는 걸 보고

브라우저가 html 페이지와 php 페이지 간에 뭔가 차이를 느낀다고 생각해 왔는데..

뭐 전에는 별 필요성을 못 느꼈기 때문에 + 귀찮아서 그냥 두었다가

'XXXX XX를 위한 것인데 대충 만들 수 없다'는 자세로 6^_^;;

Q&A나 Tip&Tech를 좀 찾아봤더니..

아무도 답변이 없었더군요. ㅡoㅡ;


-----------------------------------------------------------------------------
$LastModified    = gmdate("D d M Y H:i:s", filemtime($HTTP_SERVER_VARS[SCRIPT_FILENAME]));
header("Last-Modified: $LastModified GMT");
header("ETag: "$LastModified"");
-----------------------------------------------------------------------------


보시면 뭔지 금방 아시겠죠? ^_^

복사해다가 프레임 생성하는 파일의 맨 위에 넣으시면 됩니다.


다른 브라우저는 확인 안 해 봤고.. 익쑤뿔로러만.. 확인했습니다.

'자동으로', '페이지를 열 때마다' 모두 잘 되는군요.

일반 html 문서와 비교해 볼 때 (일반적으로) PHP가 뿌려주는 내용은

html content 부분은 똑같지만, header의 Last-Modified 의 시각이 매번 달라집니다.

(사실 아예 없습니다. -_-;;; 원래 동적인 resource니까 당연하지요.)

따라서 PHP에서 header에 Cache-Control을 최대로 잡아줘도

새로 받아온 수정 시각을 바탕으로 frame 전체를 새로고침하는 것으로 보입니다.

그래서 PHP 역시 header에 파일의 실제 수정 시각을 넣어주도록 하였습니다.


ETag는 HTTP/1.1 문서에 있길래 넣어봤습니다.

The entity tag MAY be used for comparison with other entities from the same resource.

그럼~ 좋은 하루 되세요~ ^_^/"
2011/03/06 11:03 2011/03/06 11:03
서버에 손을 댈 수 있다면 서버 설정(httpd.conf)을 손을 대서 동적 페이지로 인식하지

않도록 하는 것이 제일 좋은 방법이겠지만..

서버에 손을 댈 수 없을 경우에는 큰 도움이 될 것 같군요

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

프래임 사용하여 URL 링크 없에고 주소만 표시하게 하려고 하는경우..

F5누르면 현재화면 유지 안되고 INDEX 로 가더라고요.. . 그래서.. 한번해봤어여..;;

이게 팁이 될지는 모르겠지만.. 한번 남겨봐요. 많은 조언부탁 드립니다.

<script language="JavaScript">
document.onkeydown = function() {
if (event.keyCode == 116) {
event.keyCode = 505;
}
if (event.keyCode == 505) {
    location.reload();
return false;
}
}
</script>
2011/03/06 11:00 2011/03/06 11:00
웹폰트란 개념이 나온 이래로 어느새 인터넷 깜찍글꼴이 대거 등장하게 된 그때 그시절.
하지만 웹개발자는 너무나 슬플 수밖에 없는게 바로 IE에서만 지원한다는거.
그래서 아예 웹폰트 쓰지 말자는 웹표준 프로그래머들의 목소리가 높아지는 가운데...

하지만, CSS3가 아직 확정도 안된다는 제안 중 TTF 파일을 지원하는 브라우저가 속속 등장하였으니... 이제 웹폰트의 갈망을 씻어 던지긴 개뿔 저작권 문제는 아직도 난항.

어쨌든, IE는 뭐 상관없고 최신 브라우저를 사용한다면 웹폰트를 사용하고자 하는 갈망을 씻어낼 수 있는 좋은 기회가 될 것입니다.
네. 최신 브라우저입니다. 단, IE는 빼고.
IE는 4 이상이면 됩니다. 하지만...
Firefox 3.5 이상,
Opera 10 이상,
Safari 3.1 이상,
크롬은 아직 지원안되고 대신 베타 3에서 수줍게 지원.

흠.. 근데 여기 님들중에 브라우저 옛버전을 고수하는 분은....응?

어쨌든, 본론으로 들어가서, 웹폰트를 설정하게 해드립니다.
잘 알려진 무료 폰트인 엔터 튤립체로 그 예를 들어봅니다.

    @font-face {
                /* IE를 위한 배려는 개뿔 제일 귀찮아. */
        font-family:TULIP09;
        src: url('typoenter_090201_TULIP09.ewf');
                /* 그외 브라우저는 TTF 파일 정하고 포멧 정의해야. */
        src: local('TULIP09'),
        url(typoenter_090201_TULIP09.ttf) format('truetype');
    }
    body div{font:9pt TULIP09,gulim,sans-serif;}

IE의 경우는 뭐 많이들 널리고 널린 경우니까 설명은 구찮아서 패스.
비IE의 경우는 먼저 글꼴 이름을 클라이언트 컴퓨터에서 불러옵니다.
만약에 없다면, 서버에서 TTF 파일을 불러오죠. 그럼 끝입니다. 참 쉽죠~잉.

근데.. 문제는 이쇼키는 IE에서 굵게는 지원되지만 그 외에서는 지원 안해줍니다.
그래서 굵게 표시되는 글꼴을 또 따로 정의해 줘야 하죠.
@font-face {
    font-family: 'Droid Sans';
    src: local('Droid Sans Bold'),
        local('Droid Sans-Bold'),
        url('/shared/fonts/DroidSans/DroidSans-Bold.ttf') format('truetype');
    font-weight: bold;
}
이런 식으로요. 하지만 예제에 사용한 엔터튤립은 따로 굵게 표시하는 글꼴이 없어서 안타깝게도 굵게 표시하는건 물건너갔군요..

결국 팁을 줘도 욕먹는 케이스가 되겠습니다. 응?

어쨌든, 뭐 어느정도 웹폰트에 대한 욕구는 씻을 수 있지만, 뭔가 2% 부족한 이런..
흠.. 아직 확정이 되고 어느정도 자리가 잡혀야지 크로스 브라우저에 대한 웹폰트가
성행될 것 같은게 그걸 어느천리에 기다려.................................

링크 #1은 제 팁의 원문이 되겠으며, 라이센스 또한 원문에 따릅니다.
그리고 링크 #2는 제가 직접 엔터튤립체를 사용해 테스트해본 페이지입니다.

P.S 아놔 EWF라는 듣보잡 확장자가 IIS에 걸려가지고 MIME 헤더 등록으로 겨우 해결.(IIS 7.5)
2011/03/06 10:38 2011/03/06 10:38
아파치 웹서버 사용 시 무단 링크 방지법

SetEnvIF Referer "^http:\/\/도\.메\.인" pass
SetEnvIF Referer "^http:\/\/(www\.)?google\." pass

<FilesMatch "\.([^php]+)$">
order deny,allow
deny from all
allow from env=pass
ErrorDocument 403 /
</FilesMatch>

<FilesMatch "허용할파일명.확장자$">
order allow,deny
allow from all
</FilesMatch>


---------------------------------------------------------------------
2011/03/06 10:30 2011/03/06 10:30
Link1 http://phpmailer.worxware.com/
Link2 http://www.google.com/support/a/bin/answer.py?answer=166852


<?php

require_once 'class.phpmailer.php';
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = $gmail_username;
$mail->Password = $gmail_password;
$mail->SetFrom($fromemail, '=?'.$charset.'?b?'.base64_encode($fromname).'?=');
$mail->Subject = '=?'.$charset.'?b?'.base64_encode($subject).'?=';
$mail->ContentType = $contenttype;
$mail->CharSet = $charset;
$mail->Encoding = 'base64';
$mail->Body = $contents;
$mail->AddAddress($toemail, '=?'.$charset.'?b?'.base64_encode($toname).'?=');
for($i = 0; $i < 3; $i ++) {
    if($mail->Send()) return;
    sleep(1);
}

라이브러리의 라이센스가 LGPL 2.1 입니다.
원본 예제대로 하면 한국어 깨지니 위처럼 하세요.
파일첨부도 되네요. 필요없어서 안해봤음.
링크2 는 발송 제한 내용.
2011/03/06 10:08 2011/03/06 10:08

0.시작하면서...

 개발자라면 한번쯤 소스 관리에 대해서 고민해 봤을 것이다. 특히나 수정이 잦은 프로그램이라면 더욱 더 버전 관리가 중요한데, 이걸 일일이 폴더나 날짜별로 관리하다가는 낭패를 보기 십상이다. 그래서 버전관리 프로그램을 사용하는데, 대표적인 것으로 소스세이프(Source Safe), CVS, Subversion 있다.

 윈도우 프로그래머라면 소스세이프가 굉장히 유용한데(Visual Studio를 설치하면 자동으로 깔리므로... ㅡ_ㅡa..), 사용해보니 속도가 무지 느리고 VC 또한 한참 뒤에 뜨게하는 무시무시한 단점이 있어서 다른 것을 찾다가 서브버전을 선택하게 되었다.

 서브버전의 장점은 인터넷에 잘 나오므로 굳이 이야기하지 않겠고, 실제 윈도우 버전 설치 및 설정에 대해서 알아보자.


1.Tortoise 서브버전(Subversion) 클라이언트 설치

1.1 Tortoise 서브버전(Subversion) 클라이언트 다운로드

 서브버전 서버를 설치한다면서 왜 클라이언트를 설치하는 것일까? 그것은 서버 설치후 나머지 작업을 편리하게 할 수 있기 때문이다.

 서브버전 클라이언트는 http://tortoisesvn.net/downloads 에서 다운 받을 수 있다.

Subversion9.PNG

<Tortoise 서브버전 클라이언트>


1.2 Tortoise 서브버전(Subversion) 클라이언트 설치

 클라이언트 설치는 간단하다. 무조건 "Next" 버튼을 눌러서 완료를 하면 알아서 다 해준다.

Subversion10.PNG 

<Tortoise 서브버전(Subversion) 클라이언트 설치>


 설치 후 탐색기에서 오른쪽 버튼을 클릭했을 때 아래와 같은 메뉴가 뜨면 정상적으로 설치된 것이다.

 Subversion11.PNG

<설치 완료>


2.서브버전(Subversion) 서버 설치

2.1 서브버전(Subversion) 서버 다운로드

 서브버전의 윈도우용 설치 파일은 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 에서 찾을 수 있다. 위 사이트로 이동하면 아래와 같은 화면을 볼 수 있는데, 최신버전의 설치 파일을 다운받아서 설치하도록 하자.

Subversion1.PNG 

<서브버전 서버 파일 다운로드>


2.2 서브버전(Subversion) 설치

 설치 과정은 아주 간단하다. 윈도우 인스톨 파일을 더블클릭해서 기본 옵션으로 설치하면 된다. "Next" 를 계속해서 클릭하여 완료하자.

Subversion2.PNG 

<인스톨 화면>


2.3 서브버전(Subversion) 설정

2.3.1 서브버전(Subversion) 데이터 폴더 생성(Repository)

 서버 설치가 끝났으니 데이터를 저장할 폴더를 생성해야한다. 저장소는 하드디스크의 특정 폴더로 하면 되고, 임의의 이름으로 선택 가능하다. 일단 D:\Repository로 해서 생성하자.

Subversion3.PNG

<저장소 생성>


2.3.2 서비스(Service) 등록

 서브버전 서버를 서비스로 등록하여 윈도우 부팅시에 자동으로 실행되도록 하자. 윈도우 서비스 등록은 sc.exe 프로세스로 등록가능하다. cmd.exe를 실행해서 아래와 같이 입력하도록 하자.

 Subversion4.PNG

<서비스 등록>

 아래는 서브버전 서비스를 등록하고 서비스를 해제하는 명령이다.

  • 서비스 등록 : sc create svn binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r D:\repository" displayname= "Subversion Server" depend= Tcpip start= auto

  • 서비스 해제 : sc delete svn displayname= "Subversion Server"

 별다른 문제가 없다면 성공적으로 등록했다는 메시지가 출력될 것이다.


2.3.3 방화벽(Firewall) 해제

 서브버전은 TCP 3690 포트와 UDP 3690 포트를 사용한다. 윈도우 방화벽 및 Anti-Virus의 방화벽을 해제하도록 하자.

 아래는 윈도우 방화벽에서 포트를 추가하는 방법이다. TCP와 UDP 각각 등록해서 모두 가능하도록 하자.
Subversion5.PNG

<방화벽 해제>


2.4 저장소(Repository) 생성

 이제 서버 설정이 끝났으니 실제로 소스 또는 데이터를 관리할 저장소(Repository)를 생성해야 한다. 서브버전 관련 데이터는 D:\Repository 에 저장하기로 했으므로 하위 폴더에 저장소를 생성하자.


2.4.1 커맨드 라인(Command Line) 방식

 cmd.exe 를 실행한 뒤 D:\Repository 폴더로 이동하여 아래와 같이 입력한다.

"C:\Program Files\Subversion\bin\svnadmin" create --fs-type fsfs test

 위의 파란색으로 표시된 test를 유의해서 보자. test 대신에 생성을 원하는 폴더명으로 바꿔서 입력하면 된다.

 아래는 위의 명령을 실행한 후 결과 화면이다.

Subversion6.PNG 

<저장소 생성>

2.4.2 Tortois Subversion 클라이언트를 사용한 방식

 Tortois Subversion 클라이언트를 설치했다면 좀더 편한 방법으로 생성할 수 있다. 아래는 Tortoise Subversion 클라이언트를 통해 생성하는 방법이다.

 Subversion7.PNG

<저장소 생성>

 D:\Repository 폴더에 생성할 저장소 이름(Test)의 폴더를 미리 생성한 후 Tortoise Subversion 클라이언트에서 "Create repository here"를 클릭하면 된다.

 파일 시스템을 선택하는 다이얼로그가 뜨면 "Native filesystem(fsfs)"를 선택한 후 OK를 눌러서 생성하면 된다.


2.5 저장소 접근 설정

 저장소를 생성하고 나면 아래와 같은 폴더와 파일들이 생긴다.

Subversion8.PNG

<저장소 폴더 상태>

 이 중에서 접근 권한을 제어하기위해서는 2개의 파일을 손봐야 하는데 다음 항목을 보자


2.5.1 svnserve.conf

  1. ### This file controls the configuration of the svnserve daemon, if you
    ### use it to allow access to this repository.  (If you only allow
    ### access through http: and/or file: URLs, then this file is
    ### irrelevant.)
  2. ### Visit http://subversion.tigris.org/ for more information.
  3. [general]
    ### These options control access to the repository for unauthenticated
    ### and authenticated users.  Valid values are "write", "read",
    ### and "none".  The sample settings below are the defaults.
    anon-access = none     <== 로그인 하지 않은 사용자는 아무것도 못하도록 한다.
    auth-access = write
  4. ### The password-db option controls the location of the password
    ### database file.  Unless you specify a path starting with a /,
    ### the file's location is relative to the conf directory.
    ### Uncomment the line below to use the default password file.
    password-db = passwd   <== ID와 Password를 저장하는 파일 이름
  5. ### The authz-db option controls the location of the authorization
    ### rules for path-based access control.  Unless you specify a path
    ### starting with a /, the file's location is relative to the conf
    ### directory.  If you don't specify an authz-db, no path-based access
    ### control is done.
    ### Uncomment the line below to use the default authorization file.
    #authz-db = authz
  6. ### This option specifies the authentication realm of the repository.
    ### If two repositories have the same authentication realm, they should
    ### have the same password database, and vice versa.  The default realm
    ### is repository's uuid.
    realm = KKAMAGUI Repository   <== 접근했을 때 클라이언트에게 보여줄 저장소 메시지

 위와 같이 파일을 수정한 다음 저장한다.


2.5.2 passwd

  1. ### This file is an example password file for svnserve.
    ### Its format is similar to that of svnserve.conf. As shown in the
    ### example below it contains one section labelled [users].
    ### The name and password for each user follow, one account per line.
  2. [users]
    # harry = harryssecret
    # sally = sallyssecret
    kkamagui = kkamagui

 위와 같이 ID = Password의 형태로 입력한 뒤 저장하면 된다.



3.간단한 서브버전(Subversion) 서버 테스트

 테스트 방법은 간단하다. 탐색기에서 오른쪽 버튼을 눌러서 표시되는 메뉴에서 "Repo-Browser" 를 클릭하여 아래와 같은 창이 뜨면 서브버전 서버가 설치된 주소와 저장소 이름을 같이 입력해주면 된다.

Subversion7.PNG

<Repo-browser 메뉴>


 이제 주소와 저장소의 이름을 입력하자. 주소를 kkamagui.egloos.com, 그리고 저장소를 test라고 가정하고 입력하면 아래와 같이 될 것이다.

Subversion12.PNG 

<서브버전 주소 입력>


"OK" 버튼을 누르면 실제 서버에 접속해서 저장소 정보를 얻어오는데, 아래와 같은 화면이 표시될 것이다. 실제로 정상적으로 접속이 된다면 "test" 항목 아래에 아무것도 표시되지 않을 것이지만 문제가 발생한다면 아래와 같이 에러메시지가 표시될 것이다.

Subversion13.PNG

<Repo-Browser 실행-에러발생>


 위와 같은 에러 메시지가 표시되면 처음 단계부터 설정을 다시 한번 확인하자. 아무런 에러 메시지가 없다면 정상적으로 설치된 경우이므로 열심히 Check-out, commit, update를 반복하면 된다.


4.서브버전(Subversion) 서버를 설치하지 않고 로컬(Local)에서 소스 관리하기

 서브버전 서버가 설치되어있어야 꼭 소스 버전 관리가 가능한 것일까? "답은 그렇지 않다" 이다.

 Tortoise Subversion 클라이언트를 설치했다면 로컬에 저장소를 만들고 file:/// 키워드로 접근하여 소스 버전을 관리하는 것이 가능하다.


4.1 저장소 생성

 위의 "2.4 저장소(Repository) 생성" 부분을 참고해서 로컬에 Tortoise를 이용하여 저장소를 생성하자. 그리고 파일들을 수정해서 특정 유저만 접근가능하도록 수정하자.


4.2 저장소 접근 테스트

 위의 "3.간단한 서브버전(Subversion) 서버 테스트" 부분을 참고하여 "Repo-browser"를 실행하고 주소에 아래와 같이 입력한 후 OK를 누르자.

file:///d:\repository\test

 정상적으로 실행되면 아래와 같은 화면이 표시될 것이다.

 Subversion14.PNG

<Repo-browser 실행>

 아무런 에러가 없으므로 정상적으로 실행되었음을 알 수 있다. 이렇게 함으로써 서버를 설치하지 않고도 로컬에서 소스 버전관리를 할 수 있다.


5.기타 팁

5.1 버전 관리시 무시할 파일 확장자 설정

 소스를 컴파일해서 나오는 object 파일이나 기타 필요없는 부산물들은 버전관리를 할 필요가 없다. 그런 파일들을 일일이 수작업으로 제외하기는 상당히 귀찮은 작업인데, 다행이 Tortoise에서 이것을 편리하게 할 수 있는 옵션이 있다.

 "Settings" 메뉴에 가면 아래와 같은 화면이 표시된다. 여기에 "Global Ignore Pattern" 항목에 무시할 파일의 확장자나 파일명을 입력하면 된다.

*.scc *.sbr *.pch *.pcb *.ilk *.idb *.res *.o *.obj *.ncb *.opt *.plg

Subversion15.png 

<확장자 및 파일명 입력>


6.마치면서...

 이로서 그 지긋지긋하게 느린 소스세이프(SourceSafe)에서 벗어날 수 있게 되었다(이렇게 좋을 수가... ㅜ_ㅜ). 소스 버전 관리를 통해 프로젝트를 보다 효율적으로 관리하고 협업의 능률을 최대한 활용하자. @0@)/~~!!


7.참고 사이트

출처 : http://geek43.springnote.com/pages/1083496

원문 : http://kkamagui.springnote.com/pages/585605

2011/01/27 01:17 2011/01/27 01:17

<script language="javascript" src="/js/prototype.js"></script>

<script language="javascript" src="/js/jquery-1.4.1.min.js"></script>

<script type="text/javascript">

var $jq = jQuery.noConflict();
$jq(document).ready(function(){
  function~~~
});

</script>


위와 같이 하면 prototype 과 jQuery 를 같이 사용 할 수 있습니다.

2011/01/27 01:14 2011/01/27 01:14

테스트 환경에 SharePoint Server 2010 배포

저는 이번 주초에 테스트 컴퓨터를 구성하고 테스트 환경에 Project Server 2010 배포에 나와 있는 유용한 지침에 따라 새로운 SharePoint Server 2010 테스트 환경을 설치했습니다. 이 문서 시리즈는 Project Server 사용자를 위한 것이지만 Project Server 2010의 필수 구성 요소인 SharePoint Server 2010의 테스트 배포를 성공적으로 수행하는 데에도 도움이 될 것입니다. 이 블로그 게시물에서는 이러한 지침을 사용하여 Project Server 2010 없이 SharePoint Server 2010을 배포하는 경우 수행하는 작업이 어떻게 달라지는지에 대해 설명하겠습니다.

저의 참고 설명에 나와 있는 수정 내용과 함께 다음 링크의 지침을 준수하여 아래 서버가 포함된 가상 테스트 환경을 구현해야 합니다.

  • 가상 도메인의 도메인 컨트롤러(Litware-DC)
  • Microsoft SQL Server 2008이 실행되는 서버(Litware-SQL)
  • Microsoft SharePoint Server 2010이 실행되는 서버(Litware-SP2010)

몇 가지 참고할 사항:

이러한 지침에서는 사용자가 소프트웨어를 CD나 DVD 또는 ISO 파일로 가지고 있는 것으로 간주하고 있습니다. 컴퓨터에는 8GB의 RAM과 60GB 이상의 디스크 공간이 있어야 합니다. 시작하기 전에 Hyper-V와 함께 Windows Server 2008 또는 Windows Server 2008 R2를 실행해야 합니다. 64비트 Windows Server 2008 가상 컴퓨터를 실행할 수 있으면 다른 가상화 솔루션도 사용할 수 있습니다.

1.       Project Server 2010 테스트 환경을 만들기 위한 Hyper-V 빠른 시작을 읽고 문서의 단계를 수행하십시오. 또한 비디오를 감상(영문일 수 있음)할 수도 있는데 가급적이면 비디오를 활용하는 것이 좋습니다. 여기에 설명된 단계는 다음과 같습니다.

a.       Hyper-V를 사용하도록 설정합니다.

b.      가상 컴퓨터가 서로 간에 통신할 수 있도록 내부 가상 네트워크를 구성합니다.

c.       가상 컴퓨터에서 회사 네트워크 및 인터넷과 통신할 수 있도록 외부 가상 네트워크를 구성합니다. 이를 통해 SharePoint Server 2010에서 필수 구성 요소를 다운로드할 수 있습니다.

d.      가상 컴퓨터 세 개를 만듭니다. 이 문서에서는 이러한 가상 컴퓨터의 이름을 각각 Litware-DC(도메인 컨트롤러), Litware-SQL(SQL Server 2008), Litware-Proj(SharePoint Server 2010 및 Project Server 2010)로 지정하고 있습니다. 원하는 아무 이름이나 사용할 수 있으며 마지막 가상 컴퓨터의 이름으로 Litware-SP2010 또는 이와 비슷한 이름을 사용할 수도 있습니다.

e.      가상 컴퓨터에 운영 체제를 로드합니다.

2.       첫 번째 가상 컴퓨터(Litware-DC 또는 첫 번째 단계에서 지정한 이름)의 경우 Project Server 2010 테스트 환경에 대한 도메인 컨트롤러 설정의 지침을 따릅니다. 또한 비디오를 감상(영문일 수 있음)할 수도 있으며 마찬가지로 가능한 한 비디오를 활용하는 것이 좋습니다. 이러한 지침은 다음과 같습니다.

a.       고정 IP 주소를 구성합니다.

b.      Litware-DC를 도메인 컨트롤러로 구성합니다. 이렇게 하면 포리스트 루트 도메인인 litware.local이 만들어집니다.

3.       다른 두 가상 컴퓨터(Litware-SQLLitware-SP2010 또는 첫 번째 단계에서 지정한 이름)의 경우 Project Server 2010 테스트 환경에서 가상 도메인에 가상 컴퓨터 추가의 지침을 따릅니다. 마찬가지로 비디오를 감상(영문일 수 있음)할 수도 있습니다. 이러한 지침은 다음과 같습니다.

a.       고정 IP 주소를 구성합니다.

b.      litware.local 도메인에 연결합니다.

4.       Project Server 2010 테스트 환경에 대한 계정 설정의 지침을 따릅니다. Project Server 2010을 배포하지 않는 경우 마지막 두 계정인 Litware\WFProxy와 Litware\ProjDataAccess를 설정할 필요가 없습니다. 이러한 지침은 다음과 같습니다.

a.       SQL Server 관리자, 팜 관리자 및 서비스 응용 프로그램 계정에 대한 Active Directory 서비스 계정을 만듭니다.

b.      Active Directory 그룹을 만듭니다(Project Server 2010을 배포하는 경우에만 해당).

5.       Project Server 2010 테스트 환경에 대해 SQL Server 설치의 지침을 따릅니다. 또한 비디오를 감상(영문일 수 있음)할 수도 있습니다. 이러한 지침은 다음과 같습니다.

a.       로컬 관리자를 구성합니다.

b.      SQL Server 2008을 설치합니다.

c.       SQL Server 2008 SP1을 설치합니다.

d.      SQL Server 2008 SP1 CU2를 설치합니다.

e.      팜 관리자 계정에 대한 로그인을 만듭니다.

6.       Project Server 2010 테스트 환경에 SharePoint Server 2010 설치의 지침을 따릅니다. 또한 비디오를 감상(영문일 수 있음)할 수도 있습니다. 이러한 지침은 다음과 같습니다.

a.       로컬 관리자를 추가합니다.

b.      SharePoint Server 2010의 필수 구성 요소를 설치합니다.

c.       SharePoint Server 2010을 설치합니다.

이러한 과정을 통해 SharePoint Server 2010의 테스트 배포 환경을 얻게 됩니다. 요구 사항, 배포 시나리오 및 추가 구성에 대한 자세한 내용은 다음 TechNet 문서를 참조하십시오.

 -- Andrea Bichsel, 저자

이 문서는 번역된 블로그 게시물입니다. 원본 문서는 Deploy SharePoint Server 2010 to a test environment를 참조하십시오.

2011/01/10 08:36 2011/01/10 08:36

Anti-Spam 관련 대응책은 여러 가지가 있는데, SPF, DomainKey.. 또 뭐가 있더라... , 아무튼 여러 대응책이 있다.
대응 방법의 난이도는 각각 다르지만 대체로 네임서버의 TXT레코드에 정보를 실어 lookup 할 때 정보를 취해서 처리하는 방식이다.

이 중, DomainKeys는 야후에서 개발하여 공개하였고, 최근 구글이 적용한 방식이다.

설치 환경은 Fedora Core3, i686 환경이다.
openssl, sendmail-devel 패키지가 설치되어 있어야 한다.

다음 사이트에서 소스를 다운로드 받는다 : http://sourceforge.net/projects/dk-milter/
필자가 세팅할 당시의 최신 버전은 0.3.3 이었다.

설치 과정 전반에 대한 자세한 설명은 다음 사이트를 참조한다. http://www.erikberg.com/notes/milters.html
이하, 녹색 텍스트 박스는 명령행 입력이고, 주황색 텍스트 박스는 파일 수정이다.
명령 프롬프트의 $ 과 # 이 다름을 유의해야 한다.
(이 문서를 볼 정도의 유저라면 알아서 잘 하리라 생각되지만.)

$ tar zxvf dk-milter-0.3.3.tar.gz
$ cd dk-milter-0.3.3
$ vi dk-filter/Makefile.m4

이 내용의 출처는 다음과 같다. http://www.erikberg.com/notes/dkMakefilem4.html
굵은 글씨만으로 처리된 부분이 수정할 부분이다.
내용 뒤에 공백이 있는 경우 공백을 삭제하지 않도록 유의한다.

dk-filter/Makefile.m4
include(confBUILDTOOLSDIR`/M4/switch.m4')

define(`confMT', `TRUE')
define(`confREQUIRE_LIBSM', `true')

APPENDDEF(`confLIBS', `-lssl -lcrypto')
dnl Enable and edit these paths as needed:
APPENDDEF(`confINCDIRS', `-I/usr/include/openssl ')
APPENDDEF(`confLIBDIRS', `-L/usr/lib ')


dnl To use the asynchronous resolver library provided, enable this line:
bldPUSH_SMLIB(`ar')

bldPUSH_SMLIB(`dk')
APPENDDEF(`confINCDIRS', `-I../libdk/ ')

bldPUSH_SMLIB(`sm')

dnl Enable these next line if needed to specify the locations of libmilter.a
dnl and the libmilter include files:
APPENDDEF(`confINCDIRS', `-I/usr/include/libmilter')
APPENDDEF(`confLIBDIRS', `-L/usr/lib')


dnl Enable for IPv6 support:
dnl APPENDDEF(`confENVDEF', `-DNETINET6 ')

dnl Compile time options, especially FFRs:
APPENDDEF(`confENVDEF', `-D_FFR_AUTH_RESULTS ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_EXTERNAL_IGNORE_LIST ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_FLUSH_HEADERS ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_MACRO_LIST ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_MULTIPLE_KEYS ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_POPAUTH ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_REQUIRED_HEADERS ')
dnl APPENDDEF(`confENVDEF', `-D_FFR_SELECT_CANONICALIZATION ')

bldPRODUCT_START(`executable', `dk-filter')
define(`bldSOURCES', `dk-filter.c util.c ')
PREPENDDEF(`confLIBS', `-lmilter ')
bldPRODUCT_END

bldPRODUCT_START(`manpage', `dk-filter')
define(`bldSOURCES', `dk-filter.8')
bldPRODUCT_END

bldFINISH
$ vi libdk/Makefile.m4

다음 내용을 수정한다.
이 내용의 출처는 다음과 같다. http://www.erikberg.com/notes/libdkMakefilem4.html

libdk/Makefile.m4
include(confBUILDTOOLSDIR`/M4/switch.m4')

define(`confREQUIRE_LIBSM', `true')

dnl Enable these lines to make use of the provided asynchronous resolver:

bldPUSH_SMLIB(`ar')
APPENDDEF(`confENVDEF', `-DUSE_ARLIB ')
APPENDDEF(`confINCDIRS', `-I../libar/ ')

dnl Enable and edit this as appropriate for your system: APPENDDEF(`confINCDIRS', `-I/usr/include/openssl ')

define(`confMT', `true')
bldPRODUCT_START(`library', `libdk')
define(`bldSOURCES', `dk.c rfc2822.c util.c ')
bldPRODUCT_END bldFINISH
$ vi devtools/Site/site.config.m4

다음 내용을 작성한다.
이 내용의 출처는 다음과 같다. http://www.erikberg.com/notes/siteconfigm4.html

devtools/Site/site.config.m4
dnl # use poll() instead of select() in libmilter
APPENDDEF(`confENVDEF', `-DSM_CONF_POLL=1')dnl

dnl # devtools/OS/Linux has our MANROOT wrong and owner/group wrong
define(`confMANROOT', `/usr/share/man/man')
define(`confMANOWN', `root')
define(`confMANGRP', `root')

모두 수정하였으면 컴파일한다..

$ sh Build
$ sh -c "make install"

도메인 키 레코드 정보를 생성한다.

$ cd dk-filter
$ ./gentxt.csh fookey foo.com > fookey._domainkey.foo.com
$ cat fookey._domainkey.foo.com

정상적으로 되었으면 key 쌍을 생성한다.

$ openssl genrsa -out fookey.private 1024
$ openssl rsa -in fookey.private -out fookey.pub -pubout
$ sed -e '1i\"g=; k=rsa; t=y; p=' -e '/^----/d' fookey.pub | tr -d '\n' | sed -e 's/$/"\n/' > fookey._domainkey.foo.com
$ cat fookey._domainkey.foo.com

생성한 키를 설치한다.

$ su
# mkdir -p /etc/mail/domainkeys
# chmod 0700 /etc/mail/domainkeys
# mv fookey.private /etc/mail/domainkeys/fookey.pem

BIND를 수정한다.

fookey._domainkey.foo.com 파일의 내용을 클립보드에 복사해둔다.

# cat fookey._domainkey.foo.com
# vi /var/named/foo.com.zone

끝에 한 줄을 더 추가한다.
TXT 이후의 " " 안에 복사해둔 키를 입력한다.

/var/named/foo.com.zone
www               IN    A       192.168.0.1
fookey._domainkey IN    TXT     "g=; k=rsa; t=y; p=MIGf...."
# /etc/init.d/named restart

DNS 레코드에 정상 반영되었는지 확인한다.

$ dig +short dktest._domainkey.erikberg.com txt

원래는 위와 같이 하면 입력한 TXT 필드가 출력되어야 하나, 필자의 경우 nslookup 이나 dig의 문제인지, 혹은 BIND의 문제인지 첫 문자가 _ 로 시작하는 문제로 인해 에러가 났다. 확인해주는 사이트를 이용해 확인해볼 수 있다.

다음 사이트에 접속한다. : http://domainkeys.sourceforge.net/selectorcheck.html
입력 창에 fookey._domainkey.foo.com 을 입력하고 Submit 버튼을 누른다.
다음과 같이 필드별 테이블과 함께 This selector appears valid. 라고 나타나면 정상이다.

Tag Value Explanation
k rsa The public key algorithm used to verify the signature
p MIGfMA0GCSqGSIb3DQE... Modulus Size=1024
Exponent=65537
t y This Selector is in test mode

sendmail을 수정한다. sendmail.mc 파일의 끝부분에 다음 내용을 추가해준다.

# vi /etc/mail/sendmail.mc
/etc/mail/sendmail.mc
dnl
dnl # Setup the sendmail filters; milter
dnl
dnl INPUT_MAIL_FILTER(`filter1', `S=local:/var/run/f1.sock, F=R')
INPUT_MAIL_FILTER(`dk-filter', `S=inet:8891@localhost')

sendmail.cf 를 다시 빌드한다.

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

iptables 를 수정하여 TCP 8891 포트를 연다.

# vi /etc/sysconfig/iptables
# /etc/sysconfig/iptables
....
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8891 -j ACCEPT
....
# /etc/init.d/iptables restart

rc.local 을 수정하여 시스템 부팅시 자동으로 domainkeys 가 시작되도록 설정한다.
원칙적으로 /etc/rc.d/init.d 에 스크립트를 만들고, rc?.d 에 등록하는 게 맞겠지만, 쉽게 가기로 했다. --;;

# vi /etc/rc.d/rc.local
/etc/rc.d/rc.local
# usr/bin/dk-filter -h -l -p inet:8891@localhost -C bad=r,dns=t,int=t,no=a,miss=r -d foo.com -u domainkeys -s /etc/mail/domaink
eys/fookey.pem -S fookey

domainkeys 사용자를 생성하고 생성한 키에 대한 권한을 부여한 후 domainkeys 를 실행한다.

# useradd -r -c "DomainKeys System Account" domainkeys
# chown domainkeys /etc/mail/domainkeys -R
# usr/bin/dk-filter -h -l -p inet:8891@localhost -C bad=r,dns=t,int=t,no=a,miss=r -d foo.com -u domainkeys -s /etc/mail/domaink
eys/fookey.pem -S fookey
# ps aux | grep domainkeys
2010/12/10 01:47 2010/12/10 01:47
SVN 용어

용어 설명
저장소 : 리포지토리(Repository)라고도 하며 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장이 됩니다. 그리고 소스뿐만이 아니라 소스의 변경 사항도 모두 저장됩니다. 네트워크를 통해서 여러 사람이 접근 할 수 있습니다. 버전 관리 시스템 마다 각각 다른 파일 시스템을 가지고 있으며 Subversion은 Berkeley DB를 사용합니다. 한 프로젝트 마다 하나의 저장소가 필요합니다.

리비전(Revision) : 소스 파일등을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가 합니다. 저장소에 저장된 각각의 파일 버전이라 할 수 있습니다. Subversion의 경우 파일별로 리비전이 매겨지지 않고 한번 커밋 한 것으로 전체 리비전이 매겨 집니다. 리비전을 보고 프로젝트 진행 상황을 알 수 있습니다.

trunk : 단어 자체의 뜻은 본체 부분, 나무줄기, 몸통 등 입니다. 프로젝트에서 가장 중심이 되는 디렉토리입니다. 모든 프로그램 개발 작업은 trunk 디렉토리에서 이루어집니다. 그래서 위의 구조에서 trunk 디렉토리 아래에는 바로 소스들의 파일과 디렉토리가 들어가게 됩니다.

branches : 나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻합니다. trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생깁니다. 프로젝트안의 작은 프로젝트라고 생각하면 됩니다. branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발하게 됩니다.

tags : tag는 꼬리표라는 뜻을 가지고 있습니다. 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간입니다. 위에서 보면 tags 디렉토리 아래에는 버전명으로 디렉토리가 만들어져 있습니다.

명령어 의미
Import : svn import sampledir svn+ssh://svn-domain/svn/sample/trunk
맨 처음 프로젝트 시작할때 저장소에 등록하는 명령어 한 번 하고 나면 쓸일이 잘 없을 듯.

Checkout : svn checkout svn+ssh://svn-domain/svn/sample/trunk sample
저장소에서 소스를 받아 오는 명령어. 받아온 소스에는 소스 뿐만이 아니라 버젼관리를 위한 파일도 같이 받아 온다. 지우거나 변경시 저장소와 연결 불가능

Export : svn export svn+ssh://svn-domain/svn/sample2/trunk sample
체크아웃과는 달리 버젼관리 파일을 뺀 순수한 소스만 가져오는 명령어 마지막에 사용.

Commit : svn commit
체크아웃 한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신 하는 명령어. Revision이 1 증가 한다.

Update : svn update
체크아웃 해서 받은 소스를 최신의 소스로 업데이트 하는 명령어. 소스 수정이나 Commit 하기전에 한 번씩 해줘야 할 듯. 잘 못하면 소스 망치는 경우가 있을 듯.

Log : svn log
저장소에 어떠한 것들이 변경 되었는지 확인 할 수 있는 log 명령어

Diff : svn diff --revision 4 sample.c
diff 명령은 예전 소스 파일과 지금의 소스 파일을 비교해 보는 명령어

Blame : svn blame sample.c
Blame은 한 소스파일을 대상으로 각 리비전 대해서 어떤 행을 누가 수정했는지 알아보기 위한 명령어

lock : svn lock hello.c
파일에 락을 걸어 락을 건 사용자만이 수정할 수 있게 해주는 명령어. 해제는 svn unlock.
왜 파일에 락을 걸었는지 로그를 기록 할 수 있다.

Add : svn add hello.c
새 파일을 만들었을 경우에 파일을 추가 해주는 명령어. 그 뒤엔 꼭 svn commit를 꼭 해줘야 한다.
새 파일을 생성해서 올릴 때에도 꼭 add를 해줘야 함. 안해주면 commit을 해도 안 올라감.

파일 백업및 복구
dump : svnadmin dump sample > sample.dump
load : svnadmin load sample < sample.dump
새 파일을 만들었을 경우 
1. svn add filename.* 
2. svn ci filename.*

그냥 기존 소스 수정할 경우 
1. svn ci filename.* 

항상 svn update는 꼭 해주자

svn status : 자신이 수정하고 있는 파일의 상태를 알려주는 명령어
2010/11/06 01:12 2010/11/06 01:12