2013년 9월 17일 화요일

Head First HTML with CSS & XHTML 요약1

주요사이트 정리


약어 정리
  • HTML : HyperText Markup Language
  • CSS : Cascading Style Sheet
  • HTTP : HyperText Transfer Protocol
  • URL : Uniform Resource Locators
  • PNG : Portable Network Graphics


주요 반복 구문
  • style 태그 구문 : <head> 태그 하위에 추가
    <style type=”text/css”>
    ...내용</style>
  • css 파일 외부 링크 : <head> 태그 하위에 추가
    <link type=”text/css” rel=”stylesheet” href=”
    $url”/>
  • css link 속성 중 media 값 항목 :
    • screen : 컴퓨터 화면
    • print : 프린터 출력용 화면
    • handheld : 모바일 장치 와 휴대전화
    • tty : 텔레타이프와 터미널
    • tv : 텔레비젼
    • voice : 스피치 브라우저
    • projection : 슬라이드


주요 문자 속성
  • > : &gt;
  • < : &lt;
  • & : &amp;


주요 HTML Tag
  • <html> : 최상위
  • <title> : 페이지 제목
  • <head> : 머릿말
  • <body> : 내용
  • <h1> ~ <h6> : 제목1 - 제목6 , 블록 head
  • <p> : 문단 , 인라인 , paragraph
  • <style> : css 관련
  • <img> : 이미지를 표시하는 태그,빈태그 src=”url” , image,인라인
  • <em> : 강조 , emphasize,인라인
  • <a> : 링크, anchor (닻,앵커),인라인
  • <q> : 인용, quote (인라인)
  • <blockquote> : 인용 , 블록
  • <br> : 라인 브레이크 태그,빈 태그 , line break
  • <ul> : 순서화되지 않는 리스트 , unordered list
  • <ol> : 순서화된 리스트, ordered list
  • <li> : 리스트 항목, list item
  • <dl> : 정의 목록 , definition list
  • <dt> : 정의 용어 , definition term
  • <dd> : 정의 설명 , definition description
  • <address> : 연락처, 주소 정보를 알려주는 태그
  • <code> : 컴퓨터 프로그램 코드과 정보를 알려주는 태그
  • <pre> : 타이핑 한 결과 대로 보여주는 태그
  • <strong> : 특별한 강조를 하는 태그,(인라인)
  • <hr> : 수평선 ,horizontal rule
  • <div> : 블록를 그룹화 시킴
  • <span> : 인라인 그룹화 시킴
  • <table> : 테이블 태그
  • <th> : 테이블 제목 , table header
  • <tr> : 행 , table row
  • <td> : 정보 , table date
  • <caption> 테이블 캡션


주요 HTML 태그 속성
  • img의 src : 이미지 자원 위치를 알려 준다. URL 형식 ,source
  • style의 type : 종류, 관용구형태로 text/css 형태를 사용
  • href : 링크 위치를 알려줌. URL형식 , hyper reference
  • 모든 태그의 id : 엘리먼트를 구분 식별자,사용자가능 유형(A-z,하이픈,밑줄,콜론,..그러나 공백문자 제외)
  • 모든 태그의 class : 엘리먼트 그룹의 선택하기 위해서
  • a의 target : _blank 일 경우 새로운 창으로 링크 결과를 보여준다.
  • img의 alt : 이미지를 찾을 없을 때 설명 (alternative text describing)
  • img의 width,height : 이미지의 실제 크기를 넣어 줌.


주요 CSS 속성
  • margin : 밖쪽 여백 (top right bottom left)
    • margin-left : 왼쪽 바깥 여백 , 값 형태는 20px, 20%
    • margin-right : 오른쪽 바깥 여백
  • padding : 안쪽 여백 (top right bottom left) , 반시계 반향
  • color : 폰트색 변경 가능(전경색)
  • font : 관련 설정 (단일 설정: style weight size/line-height family)
    • font-family : 폰트 설정 , 값은 다중으로 가능 하면 ‘맑은 고딕'
    • font-size : 폰트 크기 (px,em,%)
    • font-weight : 폰트 굵기
    • font-style : 폰트 스타일 (italic,oblique)
    • line-height : 줄 간격 (em)
  • text-decoration : underline
  • text-align : 블록엘리먼트에 속한 텍스트를 정렬하기 위해서 정렬
      • center : 가운데 정렬
      • right : 오르쪽 정렬
      • left : 왼쪽 정렬
  • border : 경계선 관련 설정 , 선 두께,형식, 색
    • border-color : 경계선 색
    • border-width : 경계선 두께
      • thin , medium , thick
      • 1-6px
    • border-style : 경계선 종류(실선,점선)
      • solid : 실선
      • double : 이중선
      • groove : 홈이 있는 선
      • dotted : 점선
      • dashed : 긴 점선
      • inset : 안쪽들어간 3차원 느낌선
      • outset : 반쪽들어간 3차원 느낌선
      • ridge : 페이지 돌출형 느낌선
  • background : 관련 설정들 (단일 설정: color image repeat)
    • background-color : 바탕색 , 속성값은 #rr,gg,bb , white,gray,black
    • background-image : 배경 이미지 값예) url(images/background.gif)
    • background-repeat : 반복 여부 (
      • repeat : 기본값  
      • no-repeat : 반복 없음
      • repeat-x : x 축으로 반복
      • repeat-y : y 축으로 반복
      • inherit : 부모 상속
    • background-position : 이미지 위치 (top left) 위쪽 왼쪽
  • width : block 엘리먼트의 경우는 content의 너비만 설정함.
  • 속성값 중 !important : 저자 스타일을 재 정의 가능 함.
  • float : 흐름에 대한 정의 배치
  • clear : 흐름을 막는 역할을 수행한다.
  • 위치관련 속성
    • position : 위치 속성
      • static : 기본값 , float 속성을 사용가능 해짐.
      • absolute : 절대 좌표값을 잡을 수 있다.
      • fixed : 고정-브라우저 상대적 좌표 , 주로 광고를 표시 할때
      • relative : ?
    • top : 위로 부터 위치
    • left : 왼쪽으로 부터 위치
    • z-index : 층을 의미 값이 높을 수록 위쪽에 있음.
  • caption-side : 캡션 위치 설정 (bottom, top)
  • border-spacing : 셀사이의 공간
  • border-collapse : 테두리 혼합(collapse)
  • 리스트 관련 속성
    • list-style-type : 리스트의 marker 꾸미기
      • disc : 꽉찬동그라미
      • circle : 떵빈 동그라미
      • square : 네모난 상자
      • none : 없음.
    • list-style-image :  사용자 정의 marker url(URL)
    • list-style-position : 마커과의 위치
      • inside : 마커 밑
      • outside : 텍스트 밑에 마커가 옮


CSS 선택자 예제
  • 선택된 요소의 하위 요소까지 선택됨.
  • p : 단일 요소
  • h1,h2 :  여러 요소 선택
  • p.$className : p 요소 class가 $className인것
  • .$className : $className인 모든 요소
  • p.#$id : p 요소 중 id가 $id인것
  • #$id : 모든 요소중 id가 $id인것
  • div h2 : div h2 의미는 div가 부모 , h2 자식 즉 div요소중 h2 자식을 선택
  • #$id $emName : $id를 요소중에 엘리먼트 이름이 $emName를 선택(직계 자손은 아님)
    #$id > $emName - 이렇게 하면 직계 자손됨.
  • a:$status : $status에 선택 가능 , 아래 이외 상태들 focus , active
    예) a:link , a:visited , a:hover


HTML 문서 타입 정의

2013년 9월 15일 일요일

자바7 NIO.2 - 내용정리 6장

chapter 6. 와치 서비스 API
오브젝트의 변경이나 이벤트를 감시하는 기능을 제공하는 쓰레드에 안전한 서비스다. 와치 서비스는 주로 생성, 삭제, 수정 처림 디렉토리의 내용 변화를 위해 디렉토리를 감시하는데 쓰인다.
NIO.2 이전에는 폴링하거나 다른 방식을 사용했음.

6.1 와치 서비스 API 클래스

java.nio.file.WatchService 인터페이스 : 와치 서비스 API의 시작점
파일시스템 감시하기 위한 클래스 설명
  • 감시가 가능한 오브젝트 Watchable object : java.nio.file.Watchable를 구현한 인스턴스 ** 중요
  • 이벤트 타입 Event Type : 표준 이벤트 java.nio.file.StandardWatchEventKinds 정의, WatchEvent.Kind<T> 구현
  • 이벤트 수정자 Event Modifier: WatchService에 감시 가능한 오브젝트를 등록할지 한정 한다.
  • 와처 Watcher: 오브젝트를 감시 한다.WatchService가 바로 와쳐

6.2 와치 서비스 구현하기


6.2.1 WatchService 생성하기
WatchService watchService = FileSystems.getDefault().newWatchService();

6.2.2 와치 서비스에 오브젝트 등록하기
Watchable 구현한 오브젝트 등록 가능함. 등록시 어떤 서비스가 감시하고 통지할지를 위한 이벤트 식별이 필요.
관련 메서드 : Watchable.register()
지원하는 이벤트 타입(StandardWatchEventKinds
  • ENTRY_CREATE : 디렉토리 항목이 생성됐다. 해당 디렉토리에 있는 파일 이름 바뀌거나 이동한 경우에도 발생
  • ENTRY_DELETE : 디렉토리 항목이 삭제. 해당 디렉토리에 있는 파일 이름 바뀌거나 파일이 디렉토리 바깥으로 이동한 경우에도 발생
  • ENTRY_MODIFY : 디렉토리 항목이 수정됐다. 어느 이벤트가 수정인지는 플랫폼에 따라 다소 다를 수 있음. 실제로 파일의 내용이 수정됐을 때 항상 수정 이벤트가 발생한다. 일부 플랫폼에서는 파일의 속성이 변경해도 이 이벤트가 발생
  • OVERFLOW : 이벤트가 소실됐거나 버려진 경우. 이 이벤트를 받으려 등록할 필요는 없다.
6.2.3 유입 이벤트 대기하기
유입 이벤트를 대기하려면 무한 루프를 사용해야 함. 이벤트가 발생했을 때 와치 서비스는 해당하는 와치 키를 신호로 보낸다.
6.2.4 와치 키 가져 오기
와치 키를 가져오는 세가지 메소드(모두 키를 가져오고, 큐에서 키를 제거한다) - 차이점은 키가 없을 때 동작 방식

  • poll() : 이용할 수 있는 키가 없으면 즉시 null 값을 반환한다.
  • poll(long,TimeUnit) : 이용할 수 있는 키가 없으면 지저된 시간동안 대기한 다음 다시 시도한다. 다시 시도 하였을 때도 이용할 수 있는 키가 없으면 null을 반환 한다. long 대기시간 , TimeUnit 시간 단위
  • take() : 이용할 수 있는 키가 없으면 큐에 키가 들어올 때까지 대기한다. 몇가지 조건에 대해서는 무한 루프를 중지 한다.

- 참고 문헌 : 한빛미디어 , 자바7 NIO.2 파일&네트워크 프로그램밍

자바7 NIO.2 - 내용정리 5장

chapter 5. 재귀 작업:Walk

파일에 관련에 프로그램밍은 재귀적인 적당하다. 즉 파일 트리 삭제, 복사, 이동에서 흔하게 사용될 수 있다.
NIO.2에서 파일 트리의 순회traversal process 캡슐화 하여 java.nio.file.FileVisitor 인터페이스로 나타냄.

5.1 FileVisitor 인터페이스

접근 전, 접근 중, 접근 후 , 접근 이 실패했을 때를 위한 Hook을 제공한다. 이것을 이용해서 파일을 처리할 수 있다.
즉 관련 상태를 보고 어떻게 처리할지 선택, 무엇을 할지 결정할 수 있음.
그 결과를 FileVisitResult enum으로 알 수 있다.
FileVisitResult 상수 값
  • CONTINUE : 순회 과정이 계속 진행 중인 상태
  • SKIP_SIBLINGS : 방문 중인 파일이나 디렉토리의 형제를 방문하지 않아도 순회 과정은 지속된다.
  • SKIP_SUBTREE : 방문 중인 디렉토리의 다른 항목을 방문하지 않아도 순회 과정이 지속된다.
  • TERMINATE : 순회 과정이 종료 되어야 한다.

5.1.1 FileVisitor.visitFile() 메소드
디렉토리에 있는 파일에 대해 호출된다. 보통 CONTINUE나 TERMINATE를 결과로 반환한다. 예를 들면 어떻 파일을 찾을 때까지는 CONTINUE, 파일을 발견한 다음에는 TERMINATE를 반환 한다.
메서드 서명
FileVisitResult visitFile(T file,BasiceFileAttributes attrs) throws IOEXception

5.1.2 FileVisitor.preVisitDirectory() 메소드
디렉토리에 있는 항목을 방문하기 전에 디렉토리에 대해 호출된다.
반환 결과
  • CONTINUE 반환 : 항목을 방문
  • SKIP_SUBTREE 반환 : 항목을 방문하지 않는다.
  • SKIP_SIBLINGS 결과 반환 : 방문 중인 파일이나 디렉토리의 형제를 방문하지 않는다.
FileVisitResult preVisitDirectory(T dir,BasiceFileAttributes attrs) throws IOEXception

5.1.3 FileVisitor.postVisitDirectory() 메소드
디렉토리에 있는 항목(후손까지)을 모두 방문하거나(IO 에러 발생해서 중단 시킨 경우) 방문이 갑자기 중단된 후에 호출된다. 인자 IOException은 방문하는 에러가 없다면 nul 이다.
FileVisitResult postVisitDirectory(T dir,IOException exc) throws IOEXception

5.1.4 FileVisitor.visitFileFailed() 메소드
파일을 어떤 이유로 접근할 수 없을 때 호출.
FileVisitResult visitFileFailed(T file,IOException exc) throws IOEXception

5.2 SimpleFileVisitor 클래스

이미 FileVisitor의 모든 메소드를 구현한 클래스, 일반적으로 이것을 상속에서 사용한다.

5.3 재귀 처리

Files.walkFileTree() 메소드를 호출해서 프로세스를 시작한다.

5.4 공통 작업 : Walk

5.4.1 파일 검색 애플리케이션 작성하기
FileVisitor 기반의 검색 도구 작성시 기억해야 하는 사항
  • visitFile() 메서드가 현재 파일과 검색 범위 사이를 비교하기에 가장 좋은 위치이다. 이 시점에 개별의 파일의 이름 확장자, 속성을 추출하거나 읽기 위해 파일을 열 수 있다. 파일 이름, 확장자등을 사용해서 방문한 파일이 검색하려는 파일인지 결정할 수 있다. 이런 정보를 조합해서 복잡한 검색 조건을 지정할 수 있다. 단 이 메소드는 디렉토리는 찾지 않는다.
  • 디렉토리를 찾고 싶다면 preVisitDirectory() 나 postVisitDirectory() 메소드에서 비교를 수행해야 한다. 어떤 메소드를 선택하는 가는 경우에 따라 틀림.
  • 파일을 방문할 수 없더라도 문제가 전체 검색 처리를 중단해야 하는 것이 아니므로 visitFileFailed() 메소드는 FileVisitResult.CONTINUE를 반환 해야 한다.
  • 파일 이름으로 검색을 한다면 파일 트리에 해당 이름으로 된 파일이 하나만 있다는 사실을 알아야 한다. 그러므로 visitFile() 메소드에서 파일을 찾았다면 FileVisitResult.TERMINATE를 반환 해야 한다. 그렇지 않은 경우엔 FileVisitResult.CONTINUE를 반환해야 한다.
  • 검색 과정에서 심볼 링크를 따라가는 것은 좋은 생각이다. 심볼 링크를 따라가면 심볼링크가 가리키는 대상의 서브 트리를 순회하기 전에 검색하려는 파일이 있을 수도 있기 때문이다. 그렇다고 심볼 링크를 따라가는 것이 항상 좋은 것은 아니다. 예를 들어 파일 삭제를 할 때는 심볼 링크를 따라가지 않는 게 좋다.

5.4.2 파일 삭제 애플리케이션 작성하기
FileVisitor구현을 통해서 delete() 혹은 deleteIfExist() 구현시 주의 사항
  • 디렉토리를 삭제하기전에 디렉토리에 있는 파일은 반드시 모두 삭제해야 한다.
  • visitFile() 메서드가 개별 파일을 삭제하기에 가장 좋은 위치이다.
  • 디렉토리가 비어 있을 때만 디렉토리를 삭제할 수 있으므로 postVisitDirectory() 메소드에서 디렉토리를 삭제하는 것이 좋다.
  • 파일을 방문할 수 없다면 visitFileFailed() 메소드는 상황에 따라 FileVisitResult.CONTINUE 나 FileVisitResult.TERMINATE를 반환해야 한다.
  • 삭제 처리에 심볼 링크를 따를 수 있지만, 심볼 링크는 종종 삭제 영역 바깥의 파일을 가리키므로 권장하지 않는다. 심볼 링크가 삭제 영역을 절대로 벗어나지 않는다고 확신하거나 충분한 조건을 통해 바람직하지 않는 삭제가 일어나지 않는다고 확신한다면 심볼링크를 따라 갈 수 있다.

** 삭제된 파일을 휴지통으로 보내는 작업은 JNI를 사용해서 Window API SHFileOperation() 메소드를 호출해서 수행할 수 있다. 관련 내용은 다음 참고

5.4.3 파일 복사 애플리케이션 작성하기
주의 사항
  • 디렉토리에서 파일을 복사하기 전에 디렉토리 부터 복사해야 한다. 원본 디렉토리를 복사하면 비어 있는 대상 디렉토리가 만들어 진다. 이 작업은 반드시 preVisitDirectory() 메소드에서 수행해야 한다.
  • visitFile() 메소드가 개별 파일을 복사하기에 가장 좋은 위치다.
  • 파일이나 디렉토리를 복사할 때 REPLACE_EXISTING 과 COPY_ATTRIBUTE 옵션 사용 여부를 결정해야 한다.
  • 원본 디렉토리의 속성을 보존하고 싶다면 파일을 복사한 다름에 postVisitDirectory() 메서드에서 작업을 수행해야 한다.
  • 링크를 따라 가지(FOLLOW_LINKS)로 결정했고, 파일 트리에 부모 디렉토리의 순환 링크가 있다면 visitFileFailed() 메서드에서 FileSystemLoopException 예외와 함께 루프 디렉토리가 보고된다.
  • 파일을 방문할 수 없다면 visitFileFailed() 메서드는 상황에 따라 FileVisitResult.CONTINUE나 FileVisitResult.TERMINATE를 반환해야 한다.
  • 복사과정은 FOLLOW_LINKS 옵션을 지정한 경우에만 링크를 따라간다.

5.4..4 파일 이동 애플리케이션 작성하기
파일 트리 이동은 파일 트리 복사와 삭제를 애플리케이션 하나로 결합한 작업이다.
실제로 파일 트리 이동에는 두 가지 방법
  • Files.move(), Files.copy() 와 Files.delete() 조합
  • Files.copy()와 Files().delete()
주의사항

  • 디렉토리에서 파일을 이동하기 전에 디렉토리 자체를 이동해야 한다. 비어 있지 않는 디렉토리는 이동할 수 없으므로 Flies.copy() 메서드를 사용해야 한다. Files.copy() 메서드는 비어 있는 디렉토리를 복사 할 것이다. 이 작업은 preVisitDirectory() 메서드에서 수행 되어야 한다.
  • visitFile() 메서드가 개별 파일을 이동하기에 가장 좋은 위치다. 이 작업을 위해 Files.move() 메서드를 사용하거나 Files.copy()와 Files.delete() 메서드를 조합해서 사용할 수 있다.
  • 원본 디렉토리의 모든 파일을 대상 디렉토리로 이동한 후에는 Files.delete() 메서드를 호출해서 원본 디렉토리를 삭제해야 한다. 이 때는 원본 디렉토리가 비어 있어야 한다. 이 작업은 반드시 postVisitDirectory() 메서드에서 수행 해야 한다.
  • 파일이나 디렉토리를 복사할 때  REPLACE_EXISTING 과 COPY_ATTRIBUTE 옵션 사용 여부를 결정해야 한다. 또한, 파일이나 디렉토리를 이동할 때 ATOMIC_MOVE가 필요한지도 결정해야 한다.
  • 원본 디렉토리의 속성을 보존하고 싶다면 파일을 이동한 다음에 postVisitDirectory()에서 작업을 수행해야 한다. lastModifiedTime 같은 일부 속성은 preVisitDirectory() 메서드에서 추출해서 postVisitDirectory() 메소드에서 설정할 때까지 값을 저장하고 있어야 한다. 원본 디렉토리에서 파일을 이동한 후에는 디렉토리 내용이 바뀌고 처음의 수정일도 새로운 날짜로 덮어써지므로 이처럼 처리해야 한다.
  • 파일을 방문할 수 없다면 visitFileFailed() 메서드는 상황에 따라 FileVisitResult.CONTINUE나 FileVisitResult.TERMINATE를 반환해야 한다.
  • 이동 과정은 FOLLOW_LINKS 옵션을 지정한 경우에만 링크를 따라간다. 심볼 링크 이동은 링크가 가리키는 대상이 아니라 링크 자체를 이동하는 것임을 명심하자.

    - 참고 문헌 : 한빛미디어 , 자바7 NIO.2 파일&네트워크 프로그램밍