Cache Control은 리소스의 캐쉬를 브라우저에서 얼마나 보관하는지를 지정해주는 요소이다. max-age 속성에 초 단위로 기록된 시간만큼 브라우저에서 리소스를 보관하게 된다. 같은 URL로 리소스 대한 호출이 다시 일어 났을 때, max-age만큼 경과시간을 확인하고 max-age만큼의 시간이 흐르지 않았을 때는 웹 서버에 리소스를 요청하지 않고 캐쉬에 있는 리소스를 사용하게 된다.

header('Cache-Control: max-age=86400');
header('Content-Type: image/jpg');
if(isset($_GET['base64'])) {
	$out = base64_encode(file_get_contents($path));
	header('Content-Length: '.strlen($out));
	print $out;
} else {
	header('Content-Length: '.filesize($path));
	print file_get_contents($path);
}
Posted by 강부자아들
,
Same Origin Policy
특정 origin의 웹 문서가 다른 origin의 웹 문서에 대해서 속성들을 획득/수정(get/set)이 불가능한 것.
Same origin은 같은 프로토콜(http나 https) 그리고 같은 host(주소), 그리고  같은 포트번호를 가진 것을 말한다.

HTML5 Cross-Document Messaging

Cross-Document Messaging은 다른 origin을 가진 사이트끼리 데이터를 주고 받는 것이다. 하지만 악의적인 공격에 의해 웹 브라우징을 하는 클라이언트들이 피해를 볼 수 있기 때문에, 브라우저 벤더들에서는 Cross-Document Messaging을 허용하지 않고 있다.

하지만 여러 사이트들에서 가져온 정보를 가지고 새로운 정보를 만들어 내는 Mashup의 경우는 Cross-Document Messaging로 인해 제약을 많이 받고 있다. 이러한 문제를 해결하기 위해서 HTML5에서는 Cross-Document Messaging라는 스팩을 정의하고 있다.

Cross-Document Messaging는 iframe, tab, window들 간에 안전한 cross-origin 통신을 가능하게 한다. Cross-Document Messaging는 메세지를 전송하기 위한 표준화된 방법으로 postMessage API를 정의하고 있다.


chatFrame.contentWindow.postMessage('Hello, world', 'http://www.example.co.kr');

메세지를 수신하기 위해서는 페이지에 이벤트 핸들러만 추가시켜 주면 된다. 이벤트 핸들러를 통해 메세지가 도착했을 때, origin을 확인할 수 있고 메세지로 무엇을 할지 말지 결정할 수 있다. 아래는 임으로 정의한 messageHandler라는 함수를 이용하여 메세지를 처리하는 과정을 나타내고 있다.

      window.addEventListener("message",messageHandler,true);
      function messageHandler(e) {
        switch(e.origin) {
          case "friend.example.com":
          // 메세지 처리
          processMessage(e.data);
          break;
        default:
          // 메세지의 origin을 인식할 수 없음니다.
          // 메세지 무시
        }
      }

아래는 IBM에서 제공하는 PPT로 Cross-Domain에 대한 해법들에 대해서 매우 잘 정리하고 있다.

Posted by 강부자아들
,
옵션 관련 링크
http://alexgorbatchev.com/SyntaxHighlighter/manual/configuration/
function path() 
{ 
  var args = arguments, 
      result = [], 
      ; 
          
 
      result.push(args[i].replace('@', './images/')); 
      document.getElementById("canvas");
  return result; 
}; 
 
Posted by 강부자아들
,
new Option([text[, value[, defaultSelected[, selected]]]])

Option 오브젝트는 선택목록에 있는 모든 옵션들을 위해 생성되어 지고, select 오브젝트의 options 프로퍼티에 넣어지게 된다. 이것은 두 가지 방법 중 하나를 통해서 이뤄지게 된다: HTML의 <option> 태그를 이용하거나 Option 생성자를 통해서 이루어 진다. HTML을 이용해서 남녀선택목록을 만들려고 하면 코드는 다음과 같다.

Code:

<option>남자</option>

또한 Option 생성자를 이용해서 적절한 Select 오브젝트의 options 프로퍼티의 인덱스에 넣는 방법은 아래와 같다. 여기서는 myForm이라는 Select 오브젝트에 Option 오브젝트를 넣었다.

Code:

document.myForm.gender[0] = new Option(“남자”)

코드의 마지막에는 Option 오브젝트를 위와 같은 방법으로 생성한 후, 반드시 history.go(0)을 이용하여 문서를 새로고침 해 주어야 한다. Option 생성자를 이용 함으로써 우리는 옵션이 선택되어 졌을 때나, 폼 양식이 전송되어 졌을 때 서버로 되돌려질 값을 지정할 수 있다.

Code:

new Option(“남자”,”man”)

옵션 박스의 디스플레이 창에서 특정 옵션 값을 디폴트로 선택하게 하는 것도 가능하다.(예를 들면 HTML에서 <option>태그의 “selected” 속성이 하는 기능 같은 것). 이것은 defaultSelected 인자 값을 true로 설정하면 된다.

Code:

new Option(“남자”,”man”,true)

selected 인자 값은 복수선택을 할 때 이용된다.

프로퍼티

defaultSelected 프로퍼티
이 프로퍼티는 Boolean 값으로 HTML의 selected 속성과 함께 option이 마크업 되어 있는 지를 반영한다. true 값이면 HTML의 <option> 태그의 selected 속성이 있다는 것이다.
구문 : object.defaultSelected
selected 프로퍼티
이 프로퍼티는 Boolean값으로 특정 옵션이 선택 되었는지 아닌지를 나타낸다. selected 프로퍼티는 아무때나 설정될 수 있고, 즉각적으로 Select 오버젝트에 반영 된다.
구문 : object.selected
text 프로퍼티
이 프로퍼티는 HTML option 태그의 Select 오브젝트의 텍스트 값을 나타낸다. 언제든지 재 설정 가능하고, 즉각적으로 선택된 곳에 반영된다.
구문 : object.text
value 프로퍼티
이 프로퍼티는 옵션이 선택되고 폼 양식이 전송될 때, 서버에서 돌아오는 문자열 값을 반환한다. 또한 HTML의 VALUE 속성에 반영 된다. 만약 VALUE 석성이 없다면, value 프로퍼티는 빈 문자열이다.
구문 : object.value

메쏘드

Select 오브젝트는 Object 오브젝트의 watch와 unwatch 메쏘드를 상속받는다.

 

 

참조 : http://www.devguru.com/technologies/ecmascript/quickref/option.html

Posted by 강부자아들
,

HTML5에는 클라이언트 저장소에 대한 기능을 제공한다. 또한 HTML5의 canvas 앨러먼트는 클라이언트 측의 SQL 저장소의 base64로 인코딩 되어진 텍스트를 이미지로 그릴 수 있다. 이러한 조합은 와이파이나 3G망을 사용할 수 없는 환경에서 Application Cache 스펙과 함께 조합하면 유용하게 사용될 수 있다. Geolocation API도 offline 환경하에서도 사용 가능하므로 적절한 지역을 캐쉬할 수 있다고 하면, 오프라인 상황에서도  괜찮은 웹 지도 서비스를 제공할 수 있다.

Posted by 강부자아들
,
둔산지역에 있는 소담애라는 족발집에 다녀왔다. 근사한 인테리어를 가진 족발집이다


 
내가 시켜먹은 족발이다. 유황족발이라서 반짝거린다*^^*

이것은 주먹밥. 아래는 족발이다. 직접 여기서 썰어서 준다
맛있어서 그런지 평일에도 진수어학원쪽의 후미진 지역에 위치해 있어도 항상 사람들로 붐빈다.
둔산에서 몇 안되는 또 가고 싶은 음식점 중에 하나이다~

족발먹을 때는 소담애로 가야겠다~
Posted by 강부자아들
,

미디어쿼리

카테고리 없음 2010. 10. 25. 11:42

데스크탑 웹 브라우저와 모바일 웹 브라우져(아이폰, 아이패드 등)등의 스타일시트(CSS)를 구분하기 위한 미디어 쿼리(Media Queries)를 Andy Clarke씨가 정리했습니다.
크게 스타일시트의 속성으로 구분하는 방법과 HTML의 link앨러먼트로 구분하는 두 가지 방법이 있습니다.

1. 스타일시트의 속성으로 구분하는 방법 : 이 방법은 스타일시트 파일 내에 아래와 같은 방법으로 @media on screen으로 시장하는 파일 만들어 /* Style */ 부분에 각각 기기마다의 스타일을 정의하는 방법입니다.

/* Smartphones (portrait and landscape) ----------- */
@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 480px) {
/* Styles */
}

/* Smartphones (landscape) ----------- */
@media only screen 
and (min-width : 321px) {
/* Styles */
}

/* Smartphones (portrait) ----------- */
@media only screen 
and (max-width : 320px) {
/* Styles */
}

/* iPads (portrait and landscape) ----------- */
@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) {
/* Styles */
}

/* iPads (landscape) ----------- */
@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : landscape) {
/* Styles */
}

/* iPads (portrait) ----------- */
@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : portrait) {
/* Styles */
}

/* Desktops and laptops ----------- */
@media only screen 
and (min-width : 1224px) {
/* Styles */
}

/* Large screens ----------- */
@media only screen 
and (min-width : 1824px) {
/* Styles */
}

/* iPhone 4 ----------- */
@media
only screen and (-webkit-min-device-pixel-ratio : 1.5),
only screen and (min-device-pixel-ratio : 1.5) {
/* Styles */
}

2. HTML의 link 앨러먼트를 이용한 방법 : 하나의 큰 용량의 CSS파일에 1과 같이 모든 기기들의 스타일을 정의하고 싶지 않을 수가 있다. 이런 경우에는 link 앨러먼트를 이용하여서 media 속성에 같은 쿼리를 대신 넣어주고 스타일시트를 지정해 줄 수 있다.

<head>

<link rel="stylesheet" href="smartphone.css" 
media="only screen and (min-device-width : 320px) 
and (max-device-width : 480px)">

<link rel="stylesheet" href="smartphone-landscape.css" 
media="only screen and (min-width : 321px)">

<link rel="stylesheet" href="smartphone-portrait.css" 
media="only screen and (max-width : 320px)">

<link rel="stylesheet" href="ipad.css" 
media="only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px)">

<link rel="stylesheet" href="ipad-landscape.css" 
media="only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : landscape)">

<link rel="stylesheet" href="ipad-portrait.css" 
media="only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : portrait)">

<link rel="stylesheet" href="widescreen.css" 
media="only screen and (min-width : 1824px)">

<link rel="stylesheet" href="iphone4.css" 
media="only screen 
and (-webkit-min-device-pixel-ratio : 1.5), 
only screen and (min-device-pixel-ratio : 1.5)">

</head>


참조 :
http://www.stuffandnonsense.co.uk/blog/about/hardboiled_css3_media_queries/
http://firejune.com/1633

Posted by 강부자아들
,

Ctrl + Shift + L : 단축키 목록

Ctrl + space : 코드 가이드

Ctrl + M : 화면 확대/축소

Ctrl + D : 라인 지우기

Ctrl + Alt + ↓ : 코드 복사하여 붙여넣기

선택영역 + Ctrl + K : 선택영역 찾아가기

Posted by 강부자아들
,

JavaScript

Javascript는 웹 사이트 주소 넣는 곳에 "javascript:<들어갈 자바스크립트 코드>"와 같은 형태로도 실행 될 수 있다.

예를 들어 크롬을 실행시키고, 주소 창에 javascript:alert('test');와 같이 넣으면,

아래와 같이 경고 창을 확인할 수 있다. 즉 JavaScript를 주소 창에 입력 함으로써 실행할 수 있는 것이다.

javascript:window.location.href=<이동하고자 하는 url주소>와 같은 코드는 웹 브라우져를 이동하고자하는 url로 접속하게 해준다. 나중에 YouTube동영상을 다운로드 하는 주소로 연결할 때 이 JavaScript가 실행된다. 또한 YouTube의 동영상들은 yt라는 JavaScript 객체를 사용하는데 yt.getConfig('SWF_ARGS')['<속성이름>'] 과 같이 사용하여 동영상의 속성 값을 알 수 있다. 예를 들어 javascript:alert(yt.getConfig('SWF_ARGS')['video_id']);는 비디오의 id 값을 출력한다.

 

YouTube

YouTube의 동영상은 http://www.youtube.com/ 뒤의 URL에 get_video.php?와 함께 적절한 인자 값을 넣으면 다운로드 받을 수 있다. 이러한 인자 값들은 YouTube사이트의 Flash플레이어의 ActionScript 에 적혀 있다. 우리는 이러한 인자 값들을 Flash object를 통해 JavaScript에서 얻어 올 수 있다. 인자 값에는 여러 가지가 있는데 video_id, t(token),q, fexp, invideo, sourceid, l(length), fmt_map(format map), sk 등이 있다.

t 는token으로 비디오를 보거나 다운로드 받을 수 있게 해준다. token은 특정 시간이 지나면 해제되기 때문에, 영구적인 비디오 다운로드 링크를 제공하지 못하게 하는 역할을 한다. flv형식의 비디오를 받으려면 t(token)과 video ID(video_id)가 있으면 된다. 가끔 token과 더불어 필요한 인자 값이 있는데, sk 값이다. 가끔은 l 값도 필요로 한다. 다운로드 받는 주소는 아래와 같다.

 

http://www.youtube.com/get_video.php?video_id=[id]&fmt=[영상에 맞는 fmt ]&sk=[sk]&t=[t]

 

[id]는 동영상의 고유 주소인 id이고 fmt는 아래 표와 같다. 동영상마다 적절한 fmt 값을 설정해 주어야 한다. 동영상을 보다가 소스코드를 보면 fmt_map이라는 변수를 볼 수 있는데 맨 앞 부분에 정의된 숫자가 fmt 값이 될 수 있는 숫자이다. javascript:alert(yt.getConfig('SWF_ARGS')[ 'fmt_map']);를 통해 확인할 수 있다.

식으로 값이 나오는데 이는 37, 즉 fmt=37과 같이 넣어 줄 수 있다는 말이다. 즉 HD1080 해상도까지 지원하는 것이다.

Fmt ID

포멧

픽셀 해상도

비디오 코덱

음성 코덱

해상도

비고

fmt=0 

flv

320x240

flv1

mp3 1.0 22KHz

[ ]

( fmt=5와 같음)

fmt=5 

flv

320x240

flv1

mp3 1.0 22KHz

[small ]

 

fmt=6 

flv

480x360

flv1

mp3 1.0 44KHz

[ ]

(No more...)

fmt=13 

3gp

176x144

H263

AMR 2.0 8KHz

[ ]

(핸드폰 용)

fmt=17 

3gp

176x144

mpg4

AAC 1.0 22KHz

[ ]

(핸드폰 용)

fmt=18 

mp4

480x360

H264

AAC 2.0 44KHz

[large ]

 

fmt=22 

mp4

1280x720

H264

AAC 2.0 44KHz

[HD720 ]

 

fmt=34 

flv

640x480

H264

AAC 2.0 44KHz

[medium]

(기본값)

fmt=35 

flv

854x640

H264

AAC 2.0 44KHz

[large ]

 

fmt=37 

mp4

1920x1080

H264

AAC 2.0 44KHz

[HD1080]

 

 

이렇게 javascript:alert(yt.getConfig('SWF_ARGS')[ 'fmt_map']);로 확인된 값을 가지고 이제 스크립트를 만들어 주소 창에 넣으면 된다. 아래는 몇 가지 예제이다.

Flash Videos (.flv)

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

High Quality MP4 Format

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=18&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

High Definition (720p)

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=22&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

High Definition (720p)    

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=37&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

 

javascript:var fmt_id = yt.getConfig('SWF_ARGS')['fmt_map'].substr(0,2); window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=" + fmt_id +"&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

Appendix A

비디오의 화질은 아래와 같다.

Standard FLV Video

Video: Flash Video 1 320x180 [Video] 
Audio: 
MPEG Audio Layer 3 22050Hz mono 64Kbps [Audio]

File Size: 617kb

Higher Quality MP4 Format 

Video: MPEG4 Video (H264) 480x270 24.93fps [Video]
Audio: 
AAC 44100Hz stereo 1411Kbps [Audio]

File Size: 1,162kb

High Definition 720p MP4 Format 

Video: MPEG4 Video (H264) 1280x720 30.00fps [Video]
Audio: 
AAC 44100Hz stereo 1411Kbps [Audio]

File Size: 4,168kb

On some videos: Standard=7mb, HD720p=47mb

 

http://nathanhammond.com/youtube-video-format-information

http://userscripts.org/topics/38520?page=1#posts-192672

http://docs.sun.com/source/816-6408-10/location.htm

Posted by 강부자아들
,

다양한 레스터 포맷간의 변환을 수행

사용법

gdal_translate [--help-general]

[-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/

CInt16/CInt32/CFloat32/CFloat64}] [-strict]

[-of format] [-b band] [-expand {gray|rgb|rgba}]

[-outsize xsize[%] ysize[%]]

[-unscale] [-scale [src_min src_max [dst_min dst_max]]]

[-srcwin xoff yoff xsize ysize] [-projwin ulx uly lrx lry]

[-a_srs srs_def] [-a_ullr ulx uly lrx lry] [-a_nodata value]

[-gcp pixel line easting northing [elevation]]*

[-mo "META-TAG=VALUE"]* [-q] [-sds]

[-co "NAME=VALUE"]*

src_dataset dst_dataset

요약

gdal_translate 유틸리티는 다양한 포멧들 사이의 변환을 할 수 있게 하고, 잠정적으로 subsetting, 리샘플링(resampling), rescaling pixel과 같은 프로세스에 수행될 수 있다.

 

-ot:  type

밴드(band)의 결과 값을 위해 데이터 타입을 지정( Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64)

-strict:

결과 형태로 변환될 부적합한 것을 허용하지 않을 사용하는 옵션

-of format:

결과 값의 포맷을 선택한다. 기본값으로 GeoTIFF (GTiff) 들어 간다. 포맷 축약어를 사용하여라. http://www.gdal.org/formats_list.html 표에 있는 Code 열을 참조하여 축약어를 사용하여라

-b band:

결과 값을 위해 입력 밴드(band)값을 band 자리에 설정하여라. 밴드(band)들은 1부터 다양한 수가 있다. -b 옵션은 결과 값이나 밴드의 순서를 바꾸기 위해 쓰여질 입력 밴드 값들을 선택하기 위해 사용된다.

-expand gray|rgb|rgba:

(GDAL 1.6.0부터 사용가능) 컬러 테이블을 가진 1개의 밴드 데이터 세트를 컬러 테이블을 가진 3(RGB) 혹은 4(RGBA)개의 밴드를 가진 데이터 셋으로 드러내기 위해 사용한다. JPEG, JPEG2000, MrSID, ECW 같이 컬러 인덱싱된 데이터 세트를 지원하지 않는 output 드라이버에 유용하다. 'gray' 옵션 (GDAL 1.7.0부터 사용가능) 그레이(gray) 레벨의 컬러 테이블을 가진 데이터 세트를 그레이 인덱스된 데이터 셋으로 확장을 가능하게 해준다.

-outsize xsize[%] ysize[%]:

출력파일의 사이즈를 설정한다. Outsize is in pixels and lines unless '' is attached in which case it is as a fraction of the input image size.

-scale [src_min src_max [dst_min dst_max]]:

src_max  범위까지의 입력 필설들을 dst_min 부터 dst_max 픽셀로 비율을 재조정 한다. 결과 값의 범위를 지정하지 않으면 0 부터 255 재조정 되고, 입력 값의 범위를 입력하지 않으면 원본 데이터로부터 자동적으로 계산된 입력 값이 들어가게 된다.

-unscale:

Apply the scale/offset metadata for the bands to convert scaled values to unscaled values. It is also often necessary to reset the output datatype with the -ot switch.

-srcwin xoff yoff xsize ysize:

원본 이미지로부터 복사하여 출력이 되어질 이미지의 부분만 지정해 준다.

-projwin ulx uly lrx lry:

-srcwin 같이 원본 이미지로부터 복사하여 출력이 되어질 부분만 지정한다. 하지만 코너들의 값을 지리좌표 값의 형태로 입력한다.

-a_srs srs_def:

출력 파일을 위해 투영(projection)값을 덮어 씌운다srs_def  WKT, PROJ.4, EPSG:n WKT 포함하고 있는 파일과 같이 GDAL/OGR 형태이다..

-a_ullr ulx uly lrx lry:

출력 파일의 경계좌표 값을 할당/덮어 씌운다. 소스파일로부터 나왔던 값들은 무시되게 된다.

-a_nodata value:

출력 밴드(band) 특정 nodata 값을 할당한다.

-mo "META-TAG=VALUE":

가능한 결과 데이터 세트에 할당할 메타데이터의 / 전달한다.

-co "NAME=VALUE":

출력 형식 드라이버(output format driver) 생성 옵션(creation option) 전달한다. 다수의 -co 옵션들이 열거 되어질 있다. 각각의 포멧에 대한 적적한 생성 옵션을 알려면 포맷 별로 포맷사양서 참조하여라.

-gcp pixel line easting northing elevation:

출력 파일을 위한 ground control point 추가한다. 옵션은 여러 세트의 GCP들을 호출하기 위해 여러 호출될 있다.

-q:

Suppress progress monitor and other non-error output.

-sds:

Copy all subdatasets of this file to individual output files. Use with formats like HDF or OGDI that have subdatasets.

src_dataset:

원본 데이터 세트의 이름. 파일이름이 수도 있고, 데이터 소스의 URL 수도 있고 다중데이터세트파일의 하위데이터세트일 수도 있다.

dst_dataset:

최종 결과 파일의 이름.

EXAMPLE

gdal_translate -of GTiff -co "TILED=YES" utm.tif utm_tiled.tif

Posted by 강부자아들
,