2010년 12월 7일 화요일

[Link] Javascript Closure

google검색 중 한국어 검색 결과에서 얻은 링크들

  • http://decoder.tistory.com/689
  • http://asrada2001.tistory.com/201
  • http://azraid.springnote.com/pages/5676725
  • http://blog.outsider.ne.kr/506
  • http://olpost.com/v/234581

2010년 12월 2일 목요일

RSS

RSS는 버전도 다양하고 RSS를 지칭하는 말들도 다양하게 존재했다.

RSS 0.9는 RDF Site Summary의 약자로 Netscape에서 my.netscape.com 에서 사용하기 위해 디자인되었으며 기존의 scriptingNews format 을 지원하고 RDF를 통해 header를 구성하고 나머지는 xml 로 되어 있다. (1999년 3월)

RSS 0.91은 Rich Site Summary의 약자로 Netscape의 Dan Libby에 의해 스펙이 만들어졌으며 RDF header를 제외하고 scriptingNews 2.0b1 의 대다수 기능을 포함하고 있다. (1999년 7월)

RSS 1.0은 오라일리의 Rael Dornfest가 이끄는 RSS-DEV 에서 발표하였다. RDF와 namespace 기반으로 되어 있으며 앞선 버전들의 format을 모듈로 받아 들였다. (2000년 8월)

RSS 0.92는 0.91 버전에 선택 요소들을 포함하고 있다. (2000년 12월)

RSS 2.0은 Really Simple Syndication의 약자로 0.92버전에 선택 요소들을 포함하고 있으며 0.92버전과의 하위호환성을 위해 namespace 를 2.0 내의 요소들에게는 적용되지 않지만 RSS 2.0 feed 들에게 적용되게 하였다.

참고
- http://en.wikipedia.org/wiki/RSS
- http://cyber.law.harvard.edu/rss/rssVersionHistory.html

RSS 구조에 대해 알아보기 위해 위키피디아의 문서를 열심히 번역하던 중...
키보드를 잘못 건드려 모두 날라가는 불상사를 겪었다...
이런 젝일...
다소 잘못된 번역이 있을테니 지적해 주시기 바란다.


그럼 이중에서 RSS 2.0 규격에 대해 알아보자.
이 문서에서 다루는 내용은 Harvar의 Berkman Center에서 제공하는 RSS 2.0 Specification을 기준으로 한다.

선언

RSS는 xml 문서이므로 xml 문서선언이 이뤄져야 하고 <rss>를 root element로 갖는다.

<?xml version="1.0"?>
<rss version="2.0">



본문 구조
본문은 다음 두개의 Section으로 이뤄져 있다.

<channel>
<item>

<channel> section은 현재 RSS를 제공하는 사이트(?)에 대한 정보를 담고 있으며
<item> 은 RSS로 제공되는 개별 내용이다.
마치 신문에서 <channel>은 신문사명, 제호 등 발간되는 신문에 대한 정보에 해당하고
<item>은 개별 기사에 해당한다.
<channel>은 optional 요소라고 하나 실질적으로 필수 요소의 역할을 한다.
개별 section의 하위 요소들에 대해 알아보자.
 


<channel> section
  • 필수 하위 요소
    
Element 명 설명 Example
title

현재 채널의 이름.

Website에서 제공되는 정보는 동일 RSS에서 제공하는 정보와 동일해야 한다.

Website의 사이트명과 동일해야 한다.

yoonani's news
link 해당 Website 의 url http://www.yoonani.pe.kr
description 채널에 대한 설명 yoonani가 제공하는 정보입니다.

  • 선택 가능 하위 요소
    
Element 명 설명 Example
language

W3C에서 정의한 채널에서 사용하는 언어 코드

(두자리 언어코드-두자리 국가코드)

en-us

ko-kr

copyright 채널의 저작권 http://creativecommons.org/licenses/by-nc-sa/2.0/
manageEditor 채널 Editor의 email yoonani@gmail.com
webMaster Webmaster email yoonani@gmail.com
pubDate 정기적인 배포 날짜로 신문사의 경우 24시간 주기등을 사용한다.기본적으로 RFC 822에 의한 시간 포맷을 사용하나 년도에 대해서는 두자리, 네자리 모두 가능 Sat, 07 Sep 2002 00:00:01 GMT+9
lastBuildDate 채널의 내용이 마지막으로 바뀐 날짜
category 채널에서 제공하는 카테고리 정보로 <item>이 사용하는 방법과 동일하다. <category>Info</category>
generator RSS를 제공하는 프로그램 명 MightyInHouse Content System v2.3
docs RSS file에서 사용하는 포맷에 대한 문서를 가리키는 URL http://blogs.law.harvard.edu/tech/rss
cloud 채널에 대한 업데이트를 공지하는 cloud에 등록하는 과정을 허가한다. <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>
ttl 원본 내용을 다시 읽어오기 전 캐쉬되는 시간을 분으로 나타낸다. <ttl>60</ttl>
image 채널에 표시될 GIF, JPEG, PNG 이미지를 지정한다. 예제의 하위 요소를 갖는다.

<url>

<title>

<link>

rating 채널의 PICS 등급을 나타낸다.
textInput 채널에 표시될 text 입력상자를 지정하는 것으로 예의 sub element를 통해 내용을 지정한다. <title>
<description>
<name>
<link>
skipHours RSS 정보를 읽어가는 측에 몇시간에 한번씩 정보를 확인하는지 알려준다.
skipDays RSS 정보를 읽어가는 측에 며칠에 한번씩 정보를 확인하는지 알려준다.


<item> 요소
Element 설명 Example
title 해당 아이템의 제목 Venice Film Festival Tries to Quit Sinking
link 해당 아이템의 URL http://nytimes.com/2004/12/07FEST.html
description 아이템의 간략 내용 Some of the most heated chatter at the Venice Film Festival this week was about the way that the arrival of the stars at the Palazzo del Cinema was being staged.
author 저자의 이메일 oprah@oxygen.net
category 해당 아이템의 카테고리
comments 해당 아이템의 댓글을 볼 수 있는 주소 http://www.myblog.org/cgi-local/mt/mt-comments.cgi?entry_id=290
enclosure 첨부한 미디어에 대한 설명
guid 아이템의 고유한 아이디 http://inessential.com/2002/09/01.php#a2
pubDate 해당 아이템의 작성 날짜 Sun, 19 May 2002 15:21:36 GMT
source 아이템이 들어있는 RSS 채널



간략히 RSS의 구조에 대해 알아보았으니...

다음엔 RSS Feeder를 만들고 이 Feeder로 부터 정보를 받아오는 Reader를 작성해 보자

2010년 11월 29일 월요일

Rockmelt(락멜트) 사용기

어제 rockmelt에 등록을 하고 나니 어제 새벽에 사용가능 메일이 왔다.
아직은 처음이라 본격적으로 다운로드를 지원하지 않고 사용신청 후 메일을 통한 승인이 이뤄질거 같은데...
잠깐 써본 바로는...
정말 SNS에 특화된 녀석이다...
아니 SNS 자체보가 커뮤니케이션을 위한 브라우져라고 해야 할까?

첫 모습을 한번 담아 보았다.

처음 RockMelt를 실행시키면 facebook과의 연결을 시도한다.


여기서 facebook 으로 로그인을 하면 다음과 같은 정보를 RockMelt에 보내고 이를 기반으로 서비스가 이뤄지는 것 같다.




기존 브라우저의 데이터를 가져올 것인지 확인하고




잠시 기다리면 RockMelt의 첫모습을 볼 수 있다.


화면을 보면 좌측에 facebook의 친구 리스트가 나오고 이중에서 RockMelt에 로그인되어 있는 친구는 초록색 버튼으로 표기되어 간단한 메세지를 주고 받을 수 있다.





마침 작성 중에 후배가 말을 걸어와 채팅화면을 보여줄 수 있어 다행이다.





우측은 기본적으로 facebook이 업데이트 상황과 twitter의 상태를 알아 볼 수 있는 탭이 위치하고 있다.




트위터의 경우 처음 접속시 로그인정보를 넘겨주어야 한다.



로그인 정보를 전달하고 나면 확인하지 않은 트윗이 몇개 있는지 보여주고 트위터 위젯 위로 마우스를 올리면 타임라인을 출력해 준다.




그리고 다른 블로그나 SNS 서비스 사이트를 등록할수 있는 위젯을 제공한다.



다른 서비스 추가 기능을 이용해 본인의 블로그를 추가해 보았다.





RockMelt를 오래 써 본것도 잘 아는 것도 아니다.
하지만 첫 인상만으로 상당히 잘 만들어졌다는 생각이 든다.
특히나 facebook, twitter, blog 등을 자주 사용하는 사용자들에게 모든 상황을 한눈에 알아볼 수 있어 더 없이 편한 네트워킹이 가능하리라 여겨진다.

이와 유사한 형태로 iPad App 나온다면 정말 좋을 것 같은 생각을 해본다...
(으....만들수 있는 능력이....)
 

2010년 7월 29일 목요일

ckEditor와 ckFinder 설치 및 테스트 (php)

많은 사람들이 사용했던 FCKeditor가 3.x 버전이 되면서 CKEditor로 불리면서 배포되고 사용되고 있습니다.
FCKEditor 의 성능을 그대로 이어받고 더욱 빨라진 CKEditor의 기본적인 설치 방법을 알아보겠습니다.
다시한번 말씀드리지만 기본적인입니다.
그중에서도 PHP를 기반으로 하고 있으며 php 코드를 불러와 사용하는 설치 및 테스트 방법입니다.
보다 발전되고 최적화 되어 있는 방법은 구글링을 통해 찾아보실 수 있으실 것입니다.

1. 소스 다운로드

위의 주소로부터 소스코드를 다운로드 받습니다.
CKFinder는 CKEditor를 통해서 파일(일반 파일, 이미지, 플래쉬 파일)들을 업로드 할 때 사용됩니다. FCKEditor에서는 두 기능이 합쳐졌다고 표현들을 하시는 것을 보았는데 제 생각에는 CKFinder는 보다 기능이 업그레이드 되었고 완전히 다른 기능이라고 생각됩니다. 그리고 CKFinder의 경우 이 문서에서는 PHP 를 사용할 것이므로 위의 다운로드 URL에서 php를 선택하시면 됩니다. (php외에 ASP.net, ASP, ColdFusion을 지원합니다.)

다운로드 받은 소스를 웹에서 접근 가능한 곳에 압축을 풉니다.
본 문서의 경우 http://localhost/phpTest/include/ 아래에 ckeditor와 ckfinder라는 디렉토리 명으로 되어 있습니다.

2. 설정
CKEditor의 경우 별 다른 설정 필요없이 사용하였습니다.
이에 반해 CKEditor는 파일업로드 등의 이유로 경로 및 업로드 파일에 대한 설정을 해 주어야 합니다.
ckfinder/config.php 를 여시면 다음과 같은 php 파일이 나타날 것입니다. (길이상 주석문은 모두 제거해 주었습니다.)

<?php
function CheckAuthentication()
{
// WARNING : DO NOT simply return "true". By doing so, you are allowing
// "anyone" to upload and list the files in your server. You must implement
// some kind of session validation here. Even something very simple as...

// return isset($_SESSION['IsAuthorized']) && $_SESSION['IsAuthorized'];

// ... where $_SESSION['IsAuthorized'] is set to "true" as soon as the
// user logs in your system. To be able to use session variables don't
// forget to add session_start() at the top of this file.

        // return false;
return true;                                // false를 true로 변경하여 upload 가능하도록 만듭니다.
                                                       // 보안상 true 보다는 주석문에 나타나는 것처럼
                                                       // 세션 변수 점검 등으로 true/false를 결정하는 것이 좋을 것입니다.
}


$config['LicenseName'] = '';
$config['LicenseKey'] = '';


// 호스트명을 뺀url 상의 경로입니다.
$baseUrl = '/phpTest/data/upload/';

// 파일 시스템 상의 절대 경로를 나타냅니다.
// $baseDir = resolveUrl($baseUrl);
// 위의 resolveUrl()이라는 메소드를 쓰는 대신 저는 아래와 같이 절대경로를 적어주었습니다.
// 이 경로는 chmod 777 로 잡혀있어야 합니다.
$baseDir = '/home/yoonani/Dropbox/works/phpTest/html/data/upload/';


$config['Thumbnails'] = Array(
'url' => $baseUrl . '_thumbs',
'directory' => $baseDir . '_thumbs',
'enabled' => true,
'directAccess' => false,
'maxWidth' => 100,
'maxHeight' => 100,
'bmpSupported' => false,
'quality' => 80);

$config['RoleSessionVar'] = 'CKFinder_UserRole';

$config['AccessControl'][] = Array(
'role' => '*',
'resourceType' => '*',
'folder' => '/',

'folderView' => true,
'folderCreate' => true,
'folderRename' => true,
'folderDelete' => true,

'fileView' => true,
'fileUpload' => true,
'fileRename' => true,
'fileDelete' => true);

$config['AccessControl'][] = Array(
'role' => '*',
'resourceType' => 'Images',
'folder' => '/Logos',

'folderView' => true,
'folderCreate' => true,
'folderRename' => true,
'folderDelete' => true,

'fileView' => true,
'fileUpload' => false,
'fileRename' => false,
'fileDelete' => false);

$config['DefaultResourceTypes'] = '';

// 업로드될 일반 파일들에 대한 설정입니다.
// url 키에 값으로 $baseUrl .files를
// directory 키에 값으로 $baseDir.files로 설정되어 있는 관계로
// $baseDir에 하위에 files 디렉토리가 있어야 합니다.
// 또한 files는 chmod 777 권한이어야 합니다.
// 이 경로를 바꾸시려면 두 값을 바꾸시면 됩니다.
// maxSize 키 값이 0으로 되어 있는데 이것은 업로드될 파일의 크기를 나타냅니다.
// 여러분들이 원하시는 값으로 나타내실 수 있으며 bytes, K, M, G 등으로 그 크기를 정할 수 있습니다.
// allowExtensions : 업로드 허용가능한 확장자입니다.
// deniedExtensions : 업로드 불가능한 확장자입니다.
$config['ResourceType'][] = Array(
'name' => 'Files', // Single quotes not allowed
'url' => $baseUrl . 'files',
'directory' => $baseDir . 'files',
'maxSize' => 0,
'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip',
'deniedExtensions' => '');


//위의 File과 동일하지만 이 곳은 이미지와 관계된 것들입니다.
$config['ResourceType'][] = Array(
'name' => 'Images',
'url' => $baseUrl . 'images',
'directory' => $baseDir . 'images',
'maxSize' => "16M",
'allowedExtensions' => 'bmp,gif,jpeg,jpg,png,avi,iso,mp3',
'deniedExtensions' => '');


// 마찬가지로 위의 File과 동일하지만 플래쉬와 관계된 것들입니다.
$config['ResourceType'][] = Array(
'name' => 'Flash',
'url' => $baseUrl . 'flash',
'directory' => $baseDir . 'flash',
'maxSize' => 0,
'allowedExtensions' => 'swf,flv',
'deniedExtensions' => '');


// 아래는 그냥 기본값으로 두었습니다.
$config['CheckDoubleExtension'] = true;
$config['FilesystemEncoding'] = 'UTF-8';
$config['SecureImageUploads'] = true;
$config['CheckSizeAfterScaling'] = true;
$config['HtmlExtensions'] = array('html', 'htm', 'xml', 'js');
$config['HideFolders'] = Array(".svn", "CVS");
$config['HideFiles'] = Array(".*");
$config['ChmodFiles'] = 0777 ;
$config['ChmodFolders'] = 0755 ;
$config['ForceAscii'] = false;

include_once "plugins/imageresize/plugin.php";
include_once "plugins/fileeditor/plugin.php";

$config['plugin_imageresize']['smallThumb'] = '90x90';
$config['plugin_imageresize']['mediumThumb'] = '120x120';
$config['plugin_imageresize']['largeThumb'] = '180x180';



3. 사용 예제
php 방식으로 사용하는 예제입니다.

경로는 ckeditor, ckfinder는 include 디렉토리의 하위에 있으며 예제 파일들은 include와 같은 경로상에 위치합니다.

먼저 form 생성 파일입니다.

<html>
<head>
<?php
// ckeditor 경로 설정
include_once './include/ckeditor/ckeditor.php';
// ckfinder 경로 설정
include_once './include/ckfinder/ckfinder.php';

// ckEditor 객체 생성
$ckeditor = new CKEditor();
// 경로 지정
$ckeditor->basePath = '/phpTest/include/ckeditor/';
// ckeditor 객체와 ckfinder의 경로를 이용하여 ckfinder를 ckeditor에 포함시킨다.
// 소스코드를 보시면 더욱 자세한 내용을 알 수 있습니다.
CKFinder::SetupCKEditor($ckeditor, '/phpTest/include/ckfinder/');
?>
</head>
<body>
<form name="ckTest" method="POST" action="getCKtest.php">
<?php
// textarea 의 name이 editor1 이 되는 ckEditor를 포함하는 textarea 생성
$ckeditor->editor('editor1');
?>
<input type="submit" />
</form>
</body>
</html>



실행화면입니다.




먼저 웹 브라우저로 전송된 소스코드를 살펴봅시다.
다음과 같이 파란색으로 되어 있는 코드가 생성되었습니다.


<html>
<head>
</head>
<body>
<form name="ckTest" method="POST" action="getCKtest.php">
<textarea name="editor1" rows="8" cols="60"></textarea>
<script type="text/javascript">//<![CDATA[
window.CKEDITOR_BASEPATH='/phpTest/include/ckeditor/';
//]]></script>
<script type="text/javascript" src="/phpTest/include/ckeditor/ckeditor.js?t=A5AB4B6"></script>
<script type="text/javascript">//<![CDATA[
CKEDITOR.replace('editor1', { "filebrowserBrowseUrl": "\/phpTest\/include\/ckfinder\/ckfinder.html", "filebrowserImageBrowseUrl": "\/phpTest\/include\/ckfinder\/ckfinder.html?type=Images", "filebrowserFlashBrowseUrl": "\/phpTest\/include\/ckfinder\/ckfinder.html?type=Flash", "filebrowserUploadUrl": "\/phpTest\/include\/ckfinder\/core\/connector\/php\/connector.php?command=QuickUpload&type=Files", "filebrowserImageUploadUrl": "\/phpTest\/include\/ckfinder\/core\/connector\/php\/connector.php?command=QuickUpload&type=Images", "filebrowserFlashUploadUrl": "\/phpTest\/include\/ckfinder\/core\/connector\/php\/connector.php?command=QuickUpload&type=Flash" });
//]]></script>
<input type="submit" />
</form>
</body>
</html>

php 코드를 사용하여 위와 같이 웹 페이지 안에 CKEditor를 삽입하였으며 이 코드에 의해 CKFinder 역시 추가되었습니다. 이를 이미지 버튼을 눌러 확인해 보겠습니다.

다음과 같이 보조 창이 뜹니다.
여기서 서버 보기 (Browse Server) 를 클릭해 봅시다.



다음과 같은 판타스틱한 파일 업로드 상자가 나옴을 알 수 있습니다.



여기서 파일을 업로드 하고 업로드한 사진을 클릭하면 ckfinder의 config.php에서 설정한 $baseDir에 _thumnail 이란 디렉토리가 생기고 거기에 지금 보이면 썸네일 사진 또한 같이 저장됩니다.

자 이제 텍스트 상자에 입력을 마치고 서버로 값을 전송하고 그 값을 어떻게 받아오는지 봅시다.
다음은 폼으로부터 값을 전달받아 단순히 화면에 출력시키는 코드입니다.




<?php
$eData = $_POST["editor1"];
?>
<html>
<head>
</head>
<body>
<?php
echo $eData;
?>
</body>
</html>



일반 php에서 폼을 통한 값의 전달시 사용하는 방법을 그대로 따릅니다.
앞선 폼에서 이름을 editor1이라 하였으므로 editor1으로 POST로 전달된 값으로부터 받아와서 그대로 출력합니다.
다음과 같은 결과를 보여줍니다.











아주 기본적인 ckEditor, ckFinder에 대해 알아봤습니다.

제가 계속해서 사용해 보고 더욱 자세한 사항 올리도록 하겠습니다.

감사합니다.