!!!주의: 글을 끝까지 읽으세요!!!!

주크온 cd굽기 정말 편하군요.....cd굽기방식을 이용해서 drm이 없는 보통의 mp3를 다운받는 방법 말입니다...
저도 의심해서 한번도 안썼던 것인데.. (효율성이 없을 줄 알았습니다. 그러나 320kbps에 풀 태깅까지!!!!!)
이거 정말 좋은데요??
무슨 말인지 모르시는 분들은 네이버에서 'jukeon tmp'로 검색해보세요. 금방 아실 겁니다.
검색해보세요. 검색결과 꽤나 나옵니다.
그럼 무슨 말인지 아시게 되실 겁니다. 상당히 좋네요..이건 뭐...DRM은 있으나 마나?
알면서도 왜 한번도 써볼 생각을 안했는지... 제가 한심스럽네요..
CD굽기를 하면 CD가 실수로 궈질 수 있으나,

noteburner를 설정해놓고 하면 가상으로 CD를 굽는 척 하기 때문에진짜 CD 날리지 않고도 CD굽기를 할 수 있어서 가상으로 구워지는 동안에 mp3를 안정적으로 복사할 수 있음.
안정적으로 할 수 있더군요..
좋네요..그 후에 태그 프로그램으로 이름만 살짝 쿵 바꿔주면 만사 오케이!!!.
드래그 아시죠? 모르면 바보고....

힌트는 여기까지...
by Anna 안나 2008. 11. 8. 01:22
* 구매형에 한해서 일어난 일입니다. 임대형 쪽 상황은 전혀 모름...

일단 기본적인 것을 말하자면 구매형 DRM은 오프라인 라이센스가 적용되어 랜선을 뽑아도 플레이가 가능합니다.
그리고 음악을 주크온이 아닌 플레이어에서 들을때 로그인을 요구하지 않습니다. 오프라인 라이센스가 있기 때문이죠.
그런점에서 컨버팅이 쉽고, 이에 따라서 돈내고 구매한 DRM을 컨버팅으로 제거하고 프리 DRM 음원으로 듣자는
시도가 있었고, 그래서 여러가지 방법이 나왔습니다.

그 방법을 설명하기 전에 원래 DRM의 방식은 다음과 같습니다.
구매형이 미디어쉘 DRM과(mp3.ms) MS-DRM(.wma) 양 DRM으로 받아져서 160Kbps고정 비트레이트인 MS-DRM과
128,192, 320kbps의 고음질 비트레이트를 지원하는 미디어쉘 drm이 있었습니다.
하지만 미디어쉘 DRM은 태그를 지원하지 않았고, MS- DRM은 태그를 풀지원하여 각자 일장일단의 장단점이 있었습니다.

MS-DRM 컨버팅은 식은죽 먹기였고, 미디어쉘 DRM(.MS)은 처음에는 컨버팅 방법이 많이 알려지지 않았었지만
얼마전까지 6가지의 컨버팅 방법이 알려지는 등 많은 방법으로 컨버팅이 가능했었습니다. 그래서 태그를 지원하지 않았어도
고음질의 음원을 받기 위해 미디어쉘 drm음원인 .MS 파일을 많이 받았었죠.....그런데..

그런데 돌연 주크온 쪽이 최근 구매형 다운로드 DRM 방식을 바꾼겁니다. 160kbs MS-DRM은 계속 지원을 하지만
고음질 음원쪽인 미디어쉘 DRM음원들을 모조리 마크애니 DRM(MarkAny DRM, 통칭 MaDRM)으로 바꿔버리는 바람에
고화질 음원 컨버팅에 차질을 빚게 된 것이죠. 뭐... 160Kbps에 만족하시는 분들께서는 문제가 전혀 없으시지만...
160kbps와 192kbps의 차이를 느끼시는 분들은 조금이라도 고음질 음원을 찾게 되시죠...그래서 문제가 된겁니다.

지금 구매형 drm을 다운로드 하시면 '음악이름_DRM.mp3'로 받아집니다. 보통 mp3 하고 똑같은 확장자이기 때문에
보통의 컨버터나 음악 플레이어에서는 보통의 mp3파일로 취급하려는 경향이 있고, 대부분이 미디어플레이어와 연동이
안되고 각자의 mp3 코덱을 사용하기 때문에, 플레이 할 수 있는 플레이어도 매우 적습니다. 이 마크애니 drm의 경우
다이렉트쇼 기반인 미디어쉘보다 호환성이 더 낮아서 기본적으로는 Windows Media Player에서만 플레이 되게 설계되어
있습니다. 그러나 Windows Media Player 기반 mp3 디코더를 이용하는지, 해당 drm을 지원하는지, 극소수의 플레이어는
마크애니 플레이어를 지원하고 있습니다.

현재, MaDRM(마크애니DRM)이 플레이 가능하게 확인된 플레이어(주크온 제외)는

Windows Media Player 11
곰오디오
알송(불완전 지원)

이렇게 3개의 플레이어입니다. 이 중 컨버팅이 가능한 유일한 플레이어는 Windows Media Player 11으로,
Chronotron WAV Output Plug-in을 이용하면 wav로 고속 직접 컨버팅이 가능하게 됩니다. 그러나 wav로 컨버팅 후
mp3로 다시 변환해야 하는 수고스러움이 있기 때문에 예전같은 편리한 컨버팅이 불가능하게 된 것이죠...
뭐... 완전히 컨버팅 자체가 불가능한 건 아니니....괜찮긴 하지만... 그래도 귀찮네요.

귀찮으신 분들 + 막귀 분들 께서는 wma 파일로 다운로드 하셔서 Protected Music Converter로 mp3나 wma로 전환하시면
태그 살리시면서 쉽게 전환하실 수 있습니다.

만일 windows media player에서 _DRM.mp3 파일이 재생이 안될 경우 밑에 포스트에 연결해진 파일을 까시면 됩니다.
그러면 windows media player에서 재생이 되실겁니다.

그럼...이만...
by Anna 안나 2008. 11. 8. 01:20
얼마전(2주 이내)연속적인 업데이트가 계속 이어지더니 어느샌가 구매된 음악 칸에서 다운받는 파일확장자가
'mp3.MS'가 아닌 '_DRM.mp3'가 받아지기 시작했습니다. 날이 갈수록 mp3.MS 확장자는 줄어들더군요. 처음에는
.mp3로 받아지고 주크온으로 틀었을때 플레이가 되기래, MediaShell 시스템을 버리고 FreeDRM체계로 가는줄 알았습니다.

추후 이게 뭔 일인가 하고 계속 지켜보던 중 DRM.mp3 파일의 확장자가 플레이가 안된다(!!!!)는 충격적인 얘기를 듣게
되었습니다. 저는 주크온 쪽이 MS 파일을 unDRM시켜서 공급시키는 줄로만 알고 있었기에 이게 웬 청천벽력이냐 싶어
당장 _DRM.mp3를 플레이 해 보았습니다. 주크온 플레이어에서는 잘 돌아가는군요... 일반 mp3 플레이어에서는?
ㄷㄷㄷ.... 플레이가 안됩니다 ㅜㅜ

흑흑... 주크온을 믿은 제가 잘못이겟죠 ... ㅜㅜ

아무튼 ... 그래서 새로운 DRM 파일을 분석한결과 헤더에 다음과 같은 메세지가 들어있는 것을 알아냈습니다.

'MaDRM_{6FAFCD03-A7EF-451c-8137-A68741C9B491}'

MaDRM이라... 도저히 뭐가 떠오르지 않더군요.... 그렇게 시간을 보내다가...

그러던 와중에 어떤 분께서 어떤 DRM에 관해 질문을 해주셨습니다. 그래서...혹시 이건가?하고 그 DRM 소프트를
깔자 놀랍게도 파일이 플레이 되었습니다!!!!! 그 drm의 이름은 '마크애니(MarkAny) DRM'이였습니다. MaDRM... 말되죠?

관련 프로그램은 이곳에서 찾아보실 수있습니다. 이 페이지를 참고하시거나 아래의 exe를 받아 설치하세요.

http://teens.et-house.com/pages/service/download_guide_03.asp
http://file.et-house.com/ne_common/download.asp?contets_file=\\teens\\download\\MACSSetup_NYE.exe

위 파일을 받으신 후 chronton wave output으로 빼시면 해제 됩니다...(무슨말인지 아시는 분들은 아실겁니다)

위 방법으로 하면 유일하게 undrm이 되실겁니다. 그러나 노파심에
기존의 MediaShell 방법으로 컨버팅이 되나 시도해 보았으나 불행히도 이 DRM은 DirectShow 기반이 아니라서
윈도우 미디어 플레이어가 연동되어 플레이 되는 알약을 빼놓고는 전부 플레이가 안되더군요.....MediaShell은
DirectShow기반이어서 DirectShow를 지원하는 플레이어 및 컨버터(kmp, winamp,goldwave,switch 등)는
모두 플레이가 가능했지 말입니다..쓰읍...

그래서 지금까지 시도해본 플레이어 및 컨버터로는(kmp,winamp, protected music converter, switch, goldwave, cool edit)
이정도입니다만.... 씨알도 안먹히더군요....-ㅁ-... .. 게다가 이제는 확장자가 그냥 mp3여서 해깔려하는 것도 같고....

그리고 kmp에서 억지로 관련 dll을 추가하려 했으나... 먹히지 않더군요..그래서 포기...gg
걍 맘 편하게 먹고 wmp11에서 chronton wav output으로 빼서 switch로 컨버팅해서 쓰기로 했습니다...

차근차근 테스트하다 보면 또 되는 프로그램 나오겠죠...그리고 해외에서도 많이 관련문서가 있는 걸로보아
많이 알려진 drm 같습니다... 또 연구해보면 뭔가가 나오겟죠 ㅋㅋㅋㅋ

그건 그런데...악덕 회사 JukeOn은 지금(10/25)까지도 DRM 방식에 변경이 있는지도 말하고 있지 않습니다.
최근에 업그레이드 된걸 찾아봤더니 단지 다운로드 성능 개선이라네요?!?
제 생각에는 DRM변경은 이때 이루어진 것 같군요....=ㅁ=(밑 표 참고)


[v2.8.1.11] 업그레이드 안내 - 다운로드 성능 개선 08.09.25
|
조회 1009





안녕하세요. 쥬크온입니다. 쥬크온 플레이어가 2.8.1.11 버전으로 업그레이드 되었습니다.
업그레이드를 통해 더욱 안정적으로 쥬크온 플레이어를 이용하실 수 있습니다.
※ 쥬크온 v 2.8.1.11 업그레이드 주요 사항 1. 다운로드 서버 작업 및 성능 개선 안정적인 다운로드 서비스를 위해 다운로드 서버 작업을 진행하였습니다. 앞으로도 더욱 향상되고 편리한 서비스를 이용하실 수 있도록 최선을 다하겠습니다.
감사합니다.
휴....믿을놈 하나없다니깐....-ㅁ-.....

그리고....위에서 제가 말한 exe를 까시고 혹시 그걸다시 제거하셨다면... 다시 까셔도 주크온 drm이 제대로 플레이 되지
않습니다. 그런 경우 주크온을 재설치 해주세요. 그럼 잘 되실 겁니다.

그럼 모두들 좋은 하루 되세요~~
by Anna 안나 2008. 11. 8. 01:20
wavoutsetup-shkim1987.zip

비DRM 다운로드 서비스를 40% 정도 지원한다는 주크온(JukeOn), 그러나 실제로 주크온 다운로드 서비스를 쓰다보면 거의 대부분의 파일에 DRM이 걸려있어(특히 가요는 80%이상.) DRM을 지원하지 않는 기기에서 원하는 곡을 듣기는 정말 어렵다. 그런다고 컴퓨터에서 실시간 녹음을 해서 일일이 듣자니 그것도 할짓이 못되고, 안들을 수도 없고.... ㅡㅡ;; 그래서 이래저래 인터넷을 뒤지며 어떻게 해야 가장 효율적으로 DRM음원을 추출할 것인가에 대해 알아보던 중, .MS 파일이 MediaShell 컴포넌트를 이용해 미디어 플레이어에서 wav추출이 가능하다는 소리를 듣고 시도해보았다. 결론은 정말된다! 물론 그 뒤로 바로 mp3로 전환하기만 하면 거의 무손실의 mp3을 수 있다. (게다가 한 곡 당 wav 추출 시간은 4~7초 정도... 정말 빠르지 않은가?) 사실 얼마나 주크온 플레이어를 쓰고 있는지는 잘 모르겠지만, 많은 사람들이 이 방법을 통해 애플이나 다른 옛날 mp3 플레이어에서 drm음원들을 맘껏 즐길 수 있으면 하는 바람이다. 주크온에서 drm 파일을 받으면 .MS 파일의 형태로 다운로드가 된다. 이것은 MS(MediaShell)의 약자로 MediaShell Filter를 통해서만이 play가 가능하다. 주크온에서는 이 미디어 쉘 필터를 내장하고 있어서, .MS 파일의 플레이가 가능하지만, 다른 플레이어에서는 이 필터를 내장하고 있지 않고 있기 때문에, 이 필터를 설치하지 않는다면 다른 모든 플레이에서는 .mp3.MS 파일을 들을 수 없다.

((-------IMAGE-------))

이 미디어 쉘 필터(MSAgent)는 강남 구청 수능 방송에서 다운로드가 가능하다. 아래의 링크에서 받을 수 있다. http://edu.ingang.go.kr/LMS/servlet/eduport.front.upload.UplDownloadFile?pSaveKey=BACK.SYSTEM.SWDATA.UPLOAD.SAVEPATH&pFileName=MsAgent_Setup.exe&pRealName=1182487710103.exe 아래의 미디어 Shell Filter를 설치하면 drm 폴더 내 .ms 파일의 아이콘이 다음과 같이 변한다.

((-------IMAGE-------))

이제 파일을 더블 클릭해보자. 그럼 Media player가 플레이되면서.... .MS 파일이 플레이 된다! (오~~~옷!) (나중에 파일 연결 설정을 변경하면 다른 플레이어에도 연결이 가능하다.. 나는 winamp에 연결해서 쓰고 있음...)

((-------IMAGE-------))

클릭 고고싱~ 여기서 이제 첨부파일을 설치하자(waveoutsetup-shkim1987.zip). 이것은 chronton wave output이라는 windows media player 플러그 인으로써 winamp의 wav output 플러그 인과 동일한 기능을 한다. 설치를 한후 플러그 인을 설정해주고 wav 저장폴더를 설정해주고, 음악을 플레이 하면 수 초내에 음악이 변환되어 목표 폴더에 wav로 전환되어 나온다. 자 그럼 다음과 같이 '메뉴->보기 -> 플러그인 -> 기타 -> chronton wave output 플러그인' 에 '체크'표시 확인 하고, 저장폴더 설정도 옵션 -> 플러그인에서 설정 체크 해주시고(저장 폴더 체크할때 'Disable Audio output'박스를 체크해두자.) 자 모든게 잘 되었고, 하드디스크에 1G이상의 여유공간이 있다면 변환을 시작하자. 주의할 점은 한 곡당 25~35MB 정도의 wav 파일 용량이 든다. 물론 mp3로 변환하면 팍! 줄어들지만.... wav파일들을 충분히 저장할 충분한 공간은 있어야 한다.(뭐 요즘 하드가 보통 300G이상인데 걱정할 필요는 없겠지. ㅡㅡ;;)

((-------IMAGE-------))

일단 '셔플', '반복'같은 옵션들이 켜져있다면 끄도록 하자. 볼륨막대는 어디두나 상관이 없다. 일단 드래그 앤 드롭으로 .MS 파일들을 몇개 재생목록에 갖다놓자. 그리고 재생목록에서 재생을 실행시킨다. 그럼 몇 초간격으로 곡이 넘어가며 빠른속도로 목적 폴더에 wav 파일이 생성될 것이다. 그럼 그 wav 파일을 가지고 wav -> mp3 컨버터로 전환만 해주면 mp3를 쉽게 얻을 수 있다. 이런 식으로 .MS 파일을 쉽게 WAV로 전환하고 다시 MP3로 전환해 거의 1년 가까이 써오고 있다. 최근엔 DRM걸린 WMV, WMA 파일을 컨버팅할 수 있는 프로그램을 찾게 되고, .MS 파일도 Winamp에서 바로 mp3로 전환할 수 있게 되어 한결 더 편해졌다. 다음에는 DRM 걸린 WMV, WMA파일을 컨버팅하는 프로그램에 대해 쓰겠다. WAV 컨버팅 프로그램으로는 개인적으로 Audio Converter 2.1을 쓰고 있다.
by Anna 안나 2008. 11. 8. 01:12
DRM 제거 프로그램인 FairUse4WM v1.3 Fix2를 잘 쓰고 있었는데 윈미플레이어를 10에서 11로 업그레이드 한 후로는 작동이 안됐습니다. 해결책을 찾아 Doom9 포럼 및 구글을 뒤져서 윈미플레이어를 구버전으로 롤백도 해보고, FairUse4WM 최신 버전인 Fix2가 커버하는 윈미플레이어 버전 이하로도 낮춰봤지만 제 컴에서는 안통하더군요. 또 다른 DRM 제거 프로그램인 unDRM도 윈미플레이어 업그레이드 때문인지 소용없었습니다.

외국 포럼을 뒤적인 결과 윈미플레이어 11에서도 통하는 DRM 제거 프로그램인 SoundTaxi, Tunebite가 유명하다고 해서 사용해 봤습니다. 하지만 사운드를 거의 손실하지 않고 DRM만 제거하는 FairUse4WM에 비하면 이 프로그램에서는 음질 손실이 좀 생깁니다.

Tunebite 프로그램이 SoundTaxi에 비해 좀 더 나았고 원본파일에 가깝게 변환이 되긴 하지만, 이 프로그램도 결국은 DRM 파일을 플레이하면서 그걸 바로 녹음하는 방식이었습니다. 굳이 프로그램 이것저것 깔 것 없이 곰녹음기나 골드웨이브로 바로 녹음해도 비슷한 사운드 콸러티를 얻을 수 있을 것같습니다.



* 윈미플레이어 11 설치 후 FairUse4WM v1.3 Fix2가 실행이 안될때1. 윈미플레이어를 구버전으로 롤백한 후 FairUse4WM을 실행해 본다.
2. FairUse4WM을 반드시 사용해야 하는 경우는 윈도우를 밀어버리고 (ㅡ,ㅡ;) 깨끗한 상태에서 윈미플레이어 10 또는 이하 버전을 설치하고 FairUse4WM을 실행한다.


하지만 FairUse4WM 때문에 윈도우를 밀기는 좀 뭐하죠. 이럴때..


* DRM없는 음악파일 만드는 팁
1. DRM 파일을 플레이 해 놓고 곰녹음기 또는 골드웨이브로 바로 녹음한다. (다소 원시적이고 사운드 손실이 생깁니다. ㅡ,ㅡ)
2. DRM 파일을 CD-RW에 굽는다. 그리고 이것을 다시 임포트한다. (번거로우나 이 방법을 추천~!!!)



FairUse4WM를 계속 사용하실 분들에게는 윈미플레이어 11 업데이트 절대(!!!) 비추합니다. 어떤 곳에서 보니 FairUse4WM이 더 이상 업그레이드 되지 않는다는 얘기도 있더군요.



* Tunebite 스크린샷




* SoundTaxi Platinum 스크린샷



by Anna 안나 2008. 11. 8. 01:03
제로보드 사이트에서 몇몇 분들이 소스를 공개해 달라고 하셔서 원리를 설명 드릴까 합니다.

근데 참 어려운게 페이지 원리 이전에 위젯의 원리부터 설명해야할 필요가 있다는게... ㅠㅠ

위젯 프로그램은 ./widgets 라는 폴더안에 들어가 있으며, 이곳에 있어야지 실행가능 합니다.

newest_document 스킨을 이용한 페이지 기능 설치 방법을 설명 드리겠습니다.

추가, 수정에 필요한 파일들(실행 순서대로 나열합니다.)
newest_document/conf/info.xml <- 입력을 받기 위한 입력창
: 관리자페이지에서 코드 실행하기전에 이곳으로부터 정보를 입력 받습니다.
newest_document/newest_document.class.php <- 입력 받은 정보를 처리
: 입력 받은 정보를 적절히 정리해서 DB로 부터 결과값들을 받고 스킨 처리를 하는 파일
newest_document/queries/getNewestDocuments.xml <- DB Query용 XML 파일
: $page 번호 값에 따라서 결과를 출럭하기 위해 <navigation>에 내용을 추가 해야 합니다.
newest_document/queries/getNewestDocumentsCount.xml <- DB Query용 XML 파일
: 결과값용 Query와 다르게 페이지 기능을 만들기 위해 하나의 Query를 더 해야합니다.
newest_document/skins/default/list.html <- DB로 부터의 결과를 이용하여 표현하는 스킨 파일


- info.xml -
<var id="page_count">
<name xml:lang="ko">페이지 목록수</name>
<type>text</type>
<description xml:lang="ko">출력될 페이지의 수를 정하실 수 있습니다. (기본 5개)</description>
</var>
<var id="page_type">
<name xml:lang="ko">페이지 출력 여부</name>
<type>select</type>
<description xml:lang="ko">페이지를 출력할지 선택하세요.</description>
<options>
<name xml:lang="ko">N</name>
<value></value>
</options>
<options>
<name xml:lang="ko">Y</name>
<value>Y</value>
</options>
</var>
xml용으로 된 정보 입력 방식입니다. 위의 page_count와 page_type이라는 정보를 받고
페이지 네비게이션 출력 여부나 출력 시 몇개 까지 출력할지 등을 정할 수 있도록 추가합니다.


- newest_document.class.php [중요] -

이 파일에서 거의 모든 기능을 하기 때문에 이곳에서의 진행내용을 이해하지 못하면 만들기 어렵습니다.
우선, 페이지 기능을 만들기 위해서는 약간의 산수가 필요합니다.
그리고 계산을 위한 값이 만들어져야 겠지요.
$output = executeQueryArray('widgets.newest_document.getNewestDocuments', $obj);
이것을 기준점으로 위쪽은 정보를 어떻게 DB로 보낼지 입력 받은걸 처리하는 과정이며,
아래쪽은 DB에서로 부터 나온 결과물을 어떻게 처리할지의 과정이라고 보시면 됩니다.

/* 페이지 네비게이션 기능 추가 */
// 페이지 목록 수 (1,2,3,4....)
$page_count = $args->page_count;
if(!$page_count) $page_count = 5;
$obj->page_count = $page_count;

// 페이지 출력 여부
$page_type = $args->page_type;

// 페이지 번호 구하기
if($page_type=='Y') $obj->page = (Context::get('page'))? Context::get('page'): 1;
/* 페이지 네비게이션 기능 추가 끝 */
간단히 설명 들어갑니다.
info.xml로 부터 입력 받은 값들은 상단에 function proc($args) {} 선언으로 부터 넘어오게 됩니다.
$args에는 아까 입력했던 page_count나 page_type 등이 포함하여 많은 정보들이 넘어오게 됩니다.

$page_count = $args->page_count;
if(!$page_count) $page_count = 5;
$obj->page_count = $page_count;

넘어온 page_count에 값이 없으면 기본값을 생성하기 위해 위와 같은 처리를 해줍니다.
(넘어온 데이터를 굳이 $page_count로 불필요하게 만들어서 담는 이유는 DB처리 후에
페이지 계산을 위해서 필요하기 때문에 마 본인이 별도로 담아 놓은 것이니 큰 신경쓰지마시길 바랍니다.)

$page_type = $args->page_type;
DB로 넘어가는 값이 아닌 skin과 함수상의 처리이기 때문에 $obj로 넘기지 않습니다.
if($page_type=='Y') $obj->page = (Context::get('page'))? Context::get('page'): 1;

페이지를 사용하기로 했다면 현재 주소에 페이지가 있는지 검사 후 없으면 기본값 1로 대처하도록 합니다.
(Context::get('변수')는 주소창에서 index.php?aaa=bbb&ccc=ddd 등의 매개변수의 값을 뽑아오는 방법 입니다.)
$output = executeQueryArray('widgets.newest_document.getNewestDocuments', $obj);
$output_count = executeQueryArray('widgets.newest_document.getNewestDocumentsCount', $obj);
widgets.newest_document.getNewestDocuments 는
widgets/newest_document/getNewestDocuments.xml 의 정보를 불러오는 의미 입니다.


$output과 또 하나 $output_count 부분을 하나더 만들어서 페이지 계산을 위해
위젯의 결과물을 뽑으려고 하는 대상의 전체 게시물 수를 뽑습니다.
// 페이지용 Query에 오류가 생기면 그냥 무시
if(!$output_count->toBool()) return;
/* 페이지 네비게이션 기능 추가 */
$widget_info->page_type = $page_type;
$widget_info->total_count = $output_count->data[0]->count; // 전체 개시물 수
$widget_info->page = (!Context::get('page'))? 1:Context::get('page'); // 현재 페이지
// 총 페이지 수
$total_count = $widget_info->total_count/$list_count;
if($widget_info->total_count%$list_count != 0) $total_count+=1;
$widget_info->total_page = floor($total_count); // 총 페이지 수
$widget_info->page_count = $page_count; // 총 페이지 수
/* 페이지 네비게이션 기능 추가 끝 */
본격적으로 페이지 기능 구현을 위한 정보들을 뽑아 정리 합니다.
$widget_info->page_type = $page_type;

아까전에 $page_type으로 저장했던 info.xml에서 받아온 출력여부를 저장합니다.
(별도로 $widget_info로 저장한 이유는 skins파일에 한번에 모아서 정보를 보낼려고 하는 겁니다.)
$widget_info->total_count = $output_count->data[0]->count; // 전체 개시물 수
$output_count에서의 결과물이 단일일(한줄) 경우에는 위와 같이 직접 그 값에 접근시키면 됩니다.
$widget_info->page = (!Context::get('page'))? 1:Context::get('page'); // 현재 페이지

위에 DB로 넘기기전에 선언했던 방식인데 이곳에서도 선언하도록 했습니다.(페이지 계산을 위해)

페이지 기능 계산을 위해서는 총 게시물의 수, 한페이지당 출력 수, 페이지번호 수 등의 값이 필요합니다.
$total_count = $widget_info->total_count/$list_count;
전체 게시물수/현재 페이지 수 = 총 페이지번호가 나오겠지요.

if($widget_info->total_count%$list_count != 0) $total_count+=1;
변수는 0부터 시작하기 때문에 표현을 위해서 0이 나오면 1이 되도록 하나씩 더 합니다.

$widget_info->total_page = floor($total_count); // 총 페이지 수
floor() 함수를 이용해서 혹시나 나오는 소수점을 제거 합니다.
$widget_info->page_count = $page_count; // 총 페이지 수

페이지 갯수를 skin처리를 위해 넘깁니다.



다음은 skin파일에서 역으로 newest_document.class.php안의 함수를 호출하여 page 내용을 받아오기 위한 함수들 입니다.
/**
* @brief 다음 페이지 요청
**/
function WD_getNextPage($total_count, $total_page, $cur_page, $page_count = 10) {

$first_page = $cur_page - (int)($page_count/2);
if($first_page<1) $first_page = 1;
$last_page = $total_page;
if($last_page>$total_page) $last_page = $total_page;
if($total_page < $page_count) $page_count = $total_page;

$GLOBALS['wd_total_page'] = $total_page;
$GLOBALS['wd_first_page'] = $first_page;
$GLOBALS['wd_page_count'] = $page_count;
$GLOBALS['wd_last_page'] = $last_page;

$page->first_page = $first_page;
$page->last_page = $last_page;

return $page;
}

function WD_getNextPage2() {
$page = $GLOBALS['wd_first_page']+$GLOBALS['wd_i']++;
if($GLOBALS['wd_i'] > $GLOBALS['wd_page_count'] || $page > $GLOBALS['wd_last_page']) $page = 0;
return $page;
}

function WD_getNextClear() {
$GLOBALS['wd_i'] = 0;
}
($GLOBALS['변수'] 를 이용한 이유는 원래 제로XE에서 만들어져 있는 곳을 보면, $this->변수로 써 처리 되어있는데 저는 이게 이상하게 못불러오더라고요. 위젯이라서 그런가?? 아무튼, 그래서 어쩔 수 없이 저리 처리했으며 $GLOBALS로 들어간 변수는 처리할때만이 아니라 그 해당 페이지에서의 완전한 종결까지 누적되어야 하기 때문에 저렇게 사용하였습니다.)



- getNewestDocuments.xml -
<query id="getNewestDocuments" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
<condition operation="equal" column="category_srl" var="category_srl" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="order_type" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
페이지별로의 결과를 뽑기 위해서 아래의 내용을 추가합니다.
<navigation> 안에
<page_count var="page_count" default="10" />
<page var="page" default="1" />
를 추가해주세요.

- getNewestDocumentsCount.xml -
<query id="getNewestDocumentsCount" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="count(*)" alias="count" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
<condition operation="equal" column="category_srl" var="category_srl" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="order_type" />
</navigation>
</query>
getNewestDocuments.xml 의 정보와는 다르게 전체 게시물 수를 구하기 위해
<column name="*" /> 을
<column name="count(*)" alias="count" /> 으로

<navigation> 에서 아래의 것을 제거합니다.
<list_count var="list_count" default="20" />


- list.html -
<!--@if($widget_info->page_type=='Y')-->
<!-- 페이지 네비게이션 -->
<div class="pageNavigation">
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="goToFirst">
<img src="./images/common/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<!-- 페이지 정보 구하기 위해 선언 -->
{@$page_view = WD_getNextPage($widget_info->total_count,$widget_info->total_page,$widget_info->page,$widget_info->page_count)}
<!-- 중복 페이지 정보 출력을 위해 사전 초기화 -->
{@WD_getNextClear()}
<!--@while($page_no = WD_getNextPage2())-->
<!--@if($widget_info->page == $page_no)-->
<span class="current">{$page_no}</span>
<!--@else-->
<span class="pageNavigations"><a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}" class="pageNavigation2">{$page_no}</a></span>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_view->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="goToLast">
<img src="./images/common/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
</div>
<!--@end-->
중요한 부분만 설명하겠습니다.

view plaincopy to clipboardprint?{@$page_view = WD_getNextPage($widget_info->total_count,$widget_info->total_page,$widget_info->page,$widget_info->page_count)} {@$page_view = WD_getNextPage($widget_info->total_count,$widget_info->total_page,$widget_info->page,$widget_info->page_count)}
아까 넘겼던 전체 게시물 수, 전체 페이지 갯수, 현재 페이지, 출력될 페이지상의 번호 갯수 를 WD_getNextPage로 넘겨 처리 받아서 $page_view로 결과를 담습니다.

해당 함수에서 결과로 나오는 값은

view plaincopy to clipboardprint? $GLOBALS['wd_total_page'] = $total_page; $GLOBALS['wd_first_page'] = $first_page; $GLOBALS['wd_page_count'] = $page_count; $GLOBALS['wd_last_page'] = $last_page; $page->first_page = $first_page; $page->last_page = $last_page; $GLOBALS['wd_total_page'] = $total_page; $GLOBALS['wd_first_page'] = $first_page; $GLOBALS['wd_page_count'] = $page_count; $GLOBALS['wd_last_page'] = $last_page; $page->first_page = $first_page; $page->last_page = $last_page;
이것들이며 $GLOBALS은 누적, 다른곳에서의 호출을 위해 사용하고 $page는 최초 페이지 번호(당연히 1이겠죠), 마지막 페이지 번호를 담습니다.

view plaincopy to clipboardprint?{@WD_getNextClear()} {@WD_getNextClear()}
상하로 중복 출력을 위해서 항상 시작전 결과값 중에 $GLOBALS['wd_i'] 횟수가 남아있다면 이를 0으로 초기화 합니다.

view plaincopy to clipboardprint?<!--@while($page_no = WD_getNextPage2())--> <!--@if($widget_info->page == $page_no)--> <span class="current">{$page_no}</span> <!--@else--> <span class="pageNavigations"><a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}" class="pageNavigation2">{$page_no}</a></span> <!--@end--> <!--@end--> <!--@while($page_no = WD_getNextPage2())--> <!--@if($widget_info->page == $page_no)--> <span class="current">{$page_no}</span> <!--@else--> <span class="pageNavigations"><a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}" class="pageNavigation2">{$page_no}</a></span> <!--@end--> <!--@end-->
이제 while 문을 써서 $page_no가 나올때까지 반복합니다.

view plaincopy to clipboardprint?function WD_getNextPage2() { $page = $GLOBALS['wd_first_page']+$GLOBALS['wd_i']++; if($GLOBALS['wd_i'] > $GLOBALS['wd_page_count'] || $page > $GLOBALS['wd_last_page']) $page = 0; return $page; } function WD_getNextPage2() { $page = $GLOBALS['wd_first_page']+$GLOBALS['wd_i']++; if($GLOBALS['wd_i'] > $GLOBALS['wd_page_count'] || $page > $GLOBALS['wd_last_page']) $page = 0; return $page; }
한번 실행할때 마다 $GLOBALS['wd_i'] 증가와 함께 WD_getNextPage을 선언했을때의 페이지 관련 정보를 더해서 그 마지막 페이지 이상인지 이하인지를 계산해서 결과를 보냅니다.
여기서 전체페이지번호 수와 증가 페이지번호수를 비교, 마지막 페이지번호를 비교해서 while 계속을 진행할지 멈출지를 계산합니다.

d
df



by Anna 안나 2008. 11. 6. 00:42
예전에 zbXE 퍼머링크 달기라고 팁을 하나 올렸었는데요.

그걸 중심내용을 건드리지 않고 애드온으로 제작해 보았습니다.

위 제목이 무슨 말이냐 하면

http://www.animeclub.net/zbXE/57279 의 주소를

http://www.animeclub.net/zbXE/entry/문자-퍼머링크-주소로-사용하기 의 주소로 사용 할 수 있도록 해주는 겁니다.
(여기서 출력하면 주소창에는 urldecode() 처리가 되질 않아서 깨지네요... 복사해서 붙여넣기 후 열어보세요)

이런 방식은 '텍스트큐브' 에서 사용 하는 방식으로 zbXE에서도 사용할 수 있도록 구현해 봤습니다.





특수문자 제거 위 설정 화면 처럼 기본 특수문자 설정 이외의 문자들을 잘라낼수 있도록 특수문자를 추가할 수 있도록 하였습니다.
구분은 <> 으로 해주시면 됩니다.
(특수문자 구분 기호를 처음에 |@|로 하였는데 a|@|b 이렇게 적어놓으면 Array로 변해버리네요.)

Entry 구분기호 기본적으로 entry/ 라는 이름이 무난하다고 봤습니다.
@나 : 등 다른 특수문자등도 사용 가능합니다.
그리고 이 기능을 설정 후에는 .htaccess 의 제일 하단에 아래의 내용을 추가해주세요.
# Entry link
RewriteRule ^구분기호(.*)$ ./index.php?entry=$1 [L]
RewriteRule ^([a-zA-Z0-9_]+)/구분기호(.*)$ ./index.php?mid=$1&entry=$2 [L]

주소 접근식은 'http://도메인/모듈/구분기호Entry이름' 입니다.
또한, rewrite mod가 사용 불가능한 계정에서는 'http://도메인/?구분기호Entry이름' 이런식으로 접근 하실 수 있습니다.


위 부분이 설정이 되셨다면 게시판 등에서 위 주소로 바뀔 수 있도록 한가지 더 소스를 수정해주셔야 합니다.

예) 게시판 리스트 출력 소스
제로XE/modules/board/skins/xe_board/style_list.html
기존 : getUrl 로 검색해서 찾아봐주세요 ^^
{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle, 'cpage','')}
변경 : 애드온에 함수가 있으며 위 getUrl 함수를 적절히 변형시켜줍니다.
{procEntryTitle($module_info->mid, $document->get('extra_vars20'), $document->document_srl, $listStyle, $page)}

위 방식으로 공지사항 주소 및 게시물 링크 주소를 바꿔주시면 입력 주소형태 및 rewrite mod 여부에 따라 출력 되도록 하였습니다.


Entry 주소는 일단 xe_modules 테이블 에서 extra_vars20으로 임의로 설정하였습니다.
게시판 설정에서 20번째를 활성화하시면 제목이 아닌 원하시는 이름으로 퍼머링크 주소를 만드실 수 있습니다.
만약 활성화가 되지 않았다면 글 작성 시 게시물의 제목이 퍼머링크로 변형되어 입력 됩니다.

주의1) procEntryTitle() 함수를 쓴상태에서 애드온이 '미사용'일 경우 화면이 출력되지 않습니다.
주의2) 타 애드온 등과의 호환성은 아직 제대로 확인이 되질 않았습니다. 버그등이 있다면 알려주시면 수정하도록 하겠습니다.
by Anna 안나 2008. 11. 6. 00:31


밑에 실시간 애드온에서 기능을 조금 손 봤습니다.

- 기능 추가 -
1. 쪽지 도착시 음성 발생 기능 추가
( 님의 팁을 참조했습니다. ^^ 팁 잘쓸게요)
2. confirm 여부
( 쪽지 도착할때 바로 팝업을 뜨게 할지 confirm에서 확인을 거쳐 뜨게할지를 정할 수 있게 했습니다. )

ps : 음성파일(memo_on_swf)은 제로보드4 에서 사용한 음성을 첨부했습니다.

아래는 설치법 입니다.

-------------------
현재 쪽지기능을 창을 새로고침하거나 페이지를 이동하지 않더라도 체크해서 표시해주는 애드온 입니다.

첨부파일을 애드온(addons) 폴더에 복사하여 주시고 XML.request.php은 외부페이지로 연결 시켜줘야 합니다.


설치 방법
1. real_message.zip 파일을 압축울 풀면 real_message 폴더와 XML.request.php 파일이 나온다.
- [폴더] real_message
- [파일] XML.request.php

2. [폴더] real_message는 addons 폴더 안에 복사한다.

3. [파일] XML.request.php은 외부페이지 연동을 시키기 위한 파일이므로 임의의 곳에 복사한다.
(외부페이지로 사용할 임의의 폴더에 복사해두세요)

4. 관리자페이지에서 외부페이지를 하나 설정하여 레이아웃이나 기타 설정을 최소(아무것도 설정하지말고)로 설정하고
해당 XML.request.php파일의 경로를 입력하여 외부페이지를 만든다.

5. 관리자페이지에서 애드온 real_message 설정을 눌러 위 그림대로 XML request용 으로 만든 외부페이지 이름을 적는다.
(이름이 잘못되거나 형식이 잘못되면 오류납니다.)

6. 시간 설정은 제로XE를 이용하여 결과물 출력시 최소용량이 1.5KB가 나왔기 때문에 10초보단 30초 정도면 무난할 것 같습니다.

7. 사용하려는 모듈을 체크(이때 꼭 외부페이지로 만든 것도 체크해주어야 한다.)

8. 애드온 실행

- 추가 -
9. 커뮤니케이션 애드온에서 외부페이지로 만든 모듈을 체크풀어주시기 바랍니다.
( 고로 전체 체크 안되어 있는 상태에서 전체 체크 하시고 XML_request용 모듈만 체크 푸세요)

(※ 9번 항목은 버그 개선 전 까지 진행하지 마십시오.)


ps : 애드온 처리 1.0.5 지금 버그 있는거 아시죠?
한군대를 세팅하면 딴대가 다 초기화 되어 버립니다. -ㅅ-;;
또한 구 버젼에도 그랬지만 커뮤니케이션 애드온 에서 모듈 선택을 지정해버리면
'쪽지 보내기' 가 활성화 되지 않는 문제가 있습니다.

하여, 커뮤니케이션 애드온 패치를 알려드립니다.(오류가 개선될때까지 임시로 사용하세요)
./제로XE/addons/member_communication/member_communication.addon.php 파일을 엽니다.

그리고 제일 위에서 아래의 소스를 삽입해주세요.
-----------------
<?php
if(!defined("__ZBXE__")) exit();

// 실시간 애드온용 외부페이지 모듈이라면 패스
if(Context::get('mid') == 'XML_request') return;

밑줄 친 부분은 외부페이지로 설정하였던 모듈명을 적어주시기 바랍니다.

ps : 역시나 어김없이 실수가 있었군요 ^^;
( 3명 받으셨는데 다시 받아주세요. )
by Anna 안나 2008. 11. 6. 00:31


일전에 팁으로 남겼던 이전글, 다음글을 이번에 위젯으로 만들어 보았습니다.

스킨은 버튼형 스킨과, 리스트형 스킨 두개를 기본 제공합니다.

- 설치 -
- division.zip의 압축을 푼 후 ./제로보드XE/widgets/ 폴더 안에 복사하여 주세요.
- 그 후 관리자페이지 -> 위젯 메뉴에서 이전글, 다음글 출력 위젯을 코드생성해서 스킨의 원하는 위치에 삽입하여 주시면 됩니다.


- 옵션-
- 이전글(정렬식 중 제일 최근 글), 다음글(정렬식 중 제일 오래된글) 형태로 2개를 만들어놔야 이전글, 다음글 표기가
원활하게 됩니다.
(이전글 위치와 다음글 위치를 따로따로 원하는 곳에 삽입하시라고 분리했습니다.)
- 제목 부분을 입력하시면 리스트형에서 '제목' : [내용] 으로 표기 됩니다. (버튼형은 버튼명이 됩니다.)
- 목록 수 : 기본 1개인데 여러개 출력 가능합니다.(제한없음)
(리스트형에서 유효하며, 버튼형에서 실행시 버튼이 여러개 생기게 되니 리스트형용으로만 사용하십시오.)
- 제목 글자수 : 리스트형에서의 제목길이 출력 입니다.
- 정렬 대상 : 등록순인지 글 수정순인지로 정렬 합니다.
- 검색 내용 적용 : 이전글 다음글의 표기에 대해 검색 내용이 적용된 상태에서 정보를 구할지 여부입니다.
- 분류 내용 적용 : 카테고리 선택시 선택된 카테고리 내에서 정보를 구할지 여부입니다.
- 모듈 : 위 화면에는 짤렸는데 기본적으로 모듈을 자신이 사용할 모듈로 선택해주셔야 합니다.
모듈을 여러개 중복으로 선택시 선택된 모듈에서 계산하여 정렬방식순으로 이전글, 다음글을 구합니다.


적용방법(기본 스킨으로 설명)

먼저 위 설치 항목에서 얻어온 코드를(이전글 1개, 다음글 1개 총 두개의 코드값필요)

./modules/board/skins/xe_board/view_document.html 약 144줄
<!-- 목록, 수정/삭제 버튼 -->
<div class="contentButton">
<div style="float:left;">
<img class="zbxe_widget_output" widget="division" skin="button" colorset="normal" title="이전글" division_type="prev" order_target="list_order" search_type="Y" category_type="Y" mid_list="모듈명" />
</div>
<div style="float:left;">
<img class="zbxe_widget_output" widget="division" skin="button" colorset="normal" title="다음글" division_type="next" order_target="list_order" search_type="Y" category_type="Y" mid_list="모듈명" />
</div>
<!--@if($module_info->default_style != 'blog')-->
<a href="{getUrl('document_srl','')}" class="button"><span>{$lang->cmd_list}</span></a>
<!--@end-->
<!--@if($oDocument->isEditable())-->
<a href="{getUrl('act','dispBoardWrite','document_srl',$oDocument->document_srl,'comment_srl','')}" class="button"><span>{$lang->cmd_modify}</span></a>
<a href="{getUrl('act','dispBoardDelete','document_srl',$oDocument->document_srl,'comment_srl','')}" class="button"><span>{$lang->cmd_delete}</span></a>
<!--@end-->
</div>
주황색의 태그를 만들어주시고 빨간색으로 표기된 형식의 위젯 코드를 삽입해주세요.
밑줄 친 내용에서 타이틀명과 사용하려는 모듈을 선택해주세요.
(위 사항 모두 위젯코드로 설정하면 자동 출력되는 사항이니 특별한 일이 없는한 위젯코드는 수정하지 않으셔도 됩니다.)


ps : 명칭에 대해서 설명드리겠습니다.

이전글 : 원래대로(?)라면 오래된 내용순으로 적합한 이름인듯하나, 보통 위에서 아래로 글을 읽어가기 때문에 최근글을 이전글이라
이름을 명했습니다.
다음글 : 해당글에서 하단에 표기되는 다음글의 의미는 내가 보고 있는 글의 다음 목록(밑에글) 글이라고 생각하여 다음글이라 이름을 명했습니다.

위 두개 모두 서로 말이 잘못된 것 같다고 생각이 되시면 타입은 이전글(prev)로 하시고 title명으로만 '다음글' 이라고 명명하셔도 됩니다.

ps : DocumentItem 함수들 적용 시켰습니다.
스킨에서 사용되는 변수 정보와 함수 정보는 게시판 리스트 스킨에서 사용되는 형식은 거의 다 될겁니다.
이미지 섬네일 등 필요한 내용은 게시판 스킨의 함수선언법 등을 참조하여 스킨 제작시 도움이 되시길 바라겠습니다.


@@ 다음글, 이전글 수정 합니다. @@ // 08.07.25 20:00
- 위젯 옵션 추가 -
- {$document_srl} 등을 선택하여 그 값으로 부터 앞뒤를 계산하도록 옵션 추가 합니다.
(블로그나 최근글 위젯 등에서 사용하심 되겠네요)
- $document_srl 변수명을 기본적으로 표기하게 해놨는데요. 상황에 따라서 $oDocument->document_srl 이나 Context::get('document_srl') 로 바꿔주셔야 합니다.
(이 부분은 사용하시는 스킨에서 다른 변수 선언 명을 참조해주세요.)

- 스킨 수정 -
- 별거 아닌 수정이지만 중요하다고 생각도 들기에 수정해서 다시 올립니다.
- 전체모듈대상으로 이전글 다음글 사용시 현재 접속중인 모듈명이 부득이하게 포함되는 주소체계라서 이를 수정합니다.


@@ 전체파일을 다시 올립니다. 다운 받으셔서 덮어 씌워주세요. ^^

'widget' 카테고리의 다른 글

최근 게시글 위젯 페이지 기능 추가본  (0) 2008.11.06
최근 웹진 위젯 페이지 기능 추가  (0) 2008.11.06
Ajax 파일출력  (1) 2008.06.21
by Anna 안나 2008. 11. 6. 00:29


ZBXE 1.0.5 newest_document 기본위젯에 페이지 기능을 추가했습니다.

만들어놓은 스킨은 기본 default 스킨에만 해뒀으며, 상하 출력을 위한 분들을 위해 설정은 위 그림 처럼 맞춰뒀습니다.

사용된 함수법은 medias의 위젯에서 만들어놓은 기능을 적용시켰습니다.


- 설치법 - (※주의 기존 newest_document를 덮어씌우는 경우 이므로, 사전에 꼭 백업을 해둡시다.)
1. 첨부파일 newest_document_page.zip 파일을 다운 받으셔서 압축을 푸시면 newest_document 폴더가 나옵니다.
2. 해당 폴더를 widgets폴더 안에 덮어씌우시기 바랍니다. (꼭! 기존꺼는 백업 필수)
3. 위젯 코드생성에서 페이지 출력 수를 정해주시고 (기본 5개) 페이지 출력 여부를 꼭 Y 로 설정하세요 (기본 N)


활용법은 뭐 다들 아시겠지만 통합 게시판이라는게 없어서 불편한 참에 위젯을 쓰자니 페이지 기능이 없어서 만들어 봤고요,
이로써 전체게시판처럼 만들어서 사용할 수 있겠네요(보는것만 되겠지만)

전체게시물 보기의 연속성을 위해서 게시판 스킨 보기메뉴에서 하단에 리스트 보이는걸 없애고 이 위젯을 만들어 놓으면,
전체 게시판 기능으로써 사용 가능할 듯 합니다.

ps : 페이지 네비게이션 함수가 허접함의 극치이니 고수님들께서 대폭 수정하여 기능개선해 주시면 좋겠네요. ^^
by Anna 안나 2008. 11. 6. 00:27



이상하게 저는 skin부분에 있는 thumbnail 부분에서 오류가 나는데요.

정식 스킨이 오류날리는 없는거 보니 제꺼랑 먼가 안맞는듯해요.

하지만 그 부분 정식이랑 같게 포함 시켰습니다.

- 설치법 -
(※ 꼭 설치하기 전에 webzine 스킨을 백업해 둡시다.)
(※ 이 스킨을 사용하기 전에 newest_document 스킨도 페이지 기능이 적용되어 있어야 합니다.)
1. webzine_page.zip을 다운 받으셔서 압축을 푸시면 webzine 폴더가 나옵니다.
2. 이를 widgets 폴더에 복사해주세요( 기존꺼 있음 덮어씌우세요. )
3. 관리자 페이지에서 위젯-> 웹진-> 위젯코드 생성을 누르셔서 페이지 기능 부분을 설정 한 후 코드를 만들어서 사용하세요.

스킨은 xe_official에만 적용 되어있습니다.
해당 스킨의 list.html파일을 참고하셔서 다른 위젯 스킨이 있으시면 추가해주세요.
by Anna 안나 2008. 11. 6. 00:25
기본 구성 설명에 이어서 이번에는 간단히 위젯 소스를 적용시키는 과정만을 알려드리겠습니다.

최근 이미지 위젯에 페이지 기능을 위한 추가, 수정 파일

./widgets/newest_image/conf/info.xml <- 입력을 받기 위한 입력창
: 관리자페이지에서 코드 실행하기전에 이곳으로부터 정보를 입력 받습니다.
./widgets/newest_image/newest_images.class.php <- 입력 받은 정보를 처리
: 입력 받은 정보를 적절히 정리해서 DB로 부터 결과값들을 받고 스킨 처리를 하는 파일
./widgets/newest_image/queries/getOneFileInDocument.xml<- DB Query용 XML 파일
: $page 번호 값에 따라서 결과를 출럭하기 위해 <navigation>에 내용을 추가 해야 합니다.
: 또한 기존 files 모듈에 있던 내용을 위젯에 생성이 필요합니다.
./widgets/newest_image/queries/getOneFileInDocumentCount.xml <- DB Query용 XML 파일
: 결과값용 Query와 다르게 페이지 기능을 만들기 위해 하나의 Query를 더 해야합니다.
./widgets/newest_image/skin/default/list.html <- DB로 부터의 결과를 이용하여 표현하는 스킨 파일

(※ 이미 설명드린 부분(하단참조) 있기 때문에 아래부터는 존칭은 생략 하겠습니다.)

- info.xml -
........ XML 선언 문들......
<options>
<name xml:lang="ko">표시하지 않음</name>
<name xml:lang="jp">非表示</name>
<name xml:lang="zh-CN">不?示</name>
<name xml:lang="en">Hide</name>
<name xml:lang="es">Ocultar</name>
<name xml:lang="ru">Скрывать</name>
<value>N</value>
</options>
</var>
<var id="page_count">
<name xml:lang="ko">페이지 목록수</name>
<type>text</type>
<description xml:lang="ko">출력될 페이지의 수를 정하실 수 있습니다. (기본 5개)</description>
</var>
<var id="page_type">
<name xml:lang="ko">페이지 출력 여부</name>
<type>select</type>
<description xml:lang="ko">페이지를 출력할지 선택하세요.</description>
<options>
<name xml:lang="ko">N</name>
<value></value>
</options>
<options>
<name xml:lang="ko">Y</name>
<value>Y</value>
</options>
</var>
</extra_vars>
</widget>


한 페이지 당 출력할 페이지 번호 갯수와, 페이지 출력 여부 설정 값을 입력 받기 위해
page_count, page_type 항목을 선언


- newest_images.class.php -
/* 페이지 네비게이션 기능 추가 */
// 페이지 목록 수 (1,2,3,4....)
$page_count = $args->page_count;
if(!$page_count) $page_count = 5;
$obj->page_count = $page_count;

// 페이지 출력 여부
$page_type = $args->page_type;

// 페이지 번호 구하기
if($page_type=='Y') $obj->page = (Context::get('page'))? Context::get('page'): 1;
// 기존 변수 추가로 저장
$list_count = $obj->list_count;

/* 페이지 네비게이션 기능 추가 끝 */

// 정해진 모듈에서 문서별 파일 목록을 구함
$files_output = executeQueryArray("widgets.newest_images.getOneFileInDocument", $obj);
$output_count = executeQueryArray('widgets.newest_images.getOneFileInDocumentCount', $obj);

...중략...

$z=0;
foreach($files_output->data as $key => $val) {
$files_output->data[$z] = $files_output->data[$key];
unset($files_output->data[$key]);
$z++;
}

...중략...

/* 페이지 네비게이션 기능 추가 */
$widget_info->page_type = $page_type;
$widget_info->total_count = $output_count->data[0]->count; // 전체 개시물 수
$widget_info->page = (!Context::get('page'))? 1:Context::get('page'); // 현재 페이지
// 총 페이지 수
$total_count = $widget_info->total_count/$list_count;
if($widget_info->total_count%$list_count != 0) $total_count+=1;
$widget_info->total_page = floor($total_count); // 총 페이지 수
$widget_info->page_count = $page_count; // 총 페이지 수
/* 페이지 네비게이션 기능 추가 끝 */

...중략...

/**
* @brief 다음 페이지 요청
**/
function WD_getNextPage($total_count, $total_page, $cur_page, $page_count = 10) {

$first_page = $cur_page - (int)($page_count/2);
if($first_page<1) $first_page = 1;
$last_page = $total_page;
if($last_page>$total_page) $last_page = $total_page;
if($total_page < $page_count) $page_count = $total_page;

$GLOBALS['wd_total_page'] = $total_page;
$GLOBALS['wd_first_page'] = $first_page;
$GLOBALS['wd_page_count'] = $page_count;
$GLOBALS['wd_last_page'] = $last_page;

$page->first_page = $first_page;
$page->last_page = $last_page;

return $page;
}

function WD_getNextPage2() {
$page = $GLOBALS['wd_first_page']+$GLOBALS['wd_i']++;
if($GLOBALS['wd_i'] > $GLOBALS['wd_page_count'] || $page > $GLOBALS['wd_last_page']) $page = 0;
return $page;
}

function WD_getNextClear() {
$GLOBALS['wd_i'] = 0;
}


newest_images.class.php 파일안에 구석구석 위의 변수가 들어가면 페이지 기능이 완성 된다.


1. 첫번째 페이지 기능을 위한 정보 입력 및 처리
/* 페이지 네비게이션 기능 추가 */
// 페이지 목록 수 (1,2,3,4....)
$page_count = $args->page_count;
if(!$page_count) $page_count = 5;
$obj->page_count = $page_count;

// 페이지 출력 여부
$page_type = $args->page_type;

// 페이지 번호 구하기
if($page_type=='Y') $obj->page = (Context::get('page'))? Context::get('page'): 1;
// 기존 변수 추가로 저장
$list_count = $obj->list_count;

/* 페이지 네비게이션 기능 추가 끝 */

XML로 만들었던 page_count와 page_type을 DB로 보내기 위해 위와 같이 선언 한다.
(※ 다른 위젯과 다르게 $list_count 변수가 없어서 마지막에 $list_count = $obj->list_count;을 추가 선언해준다.)

2. DB로 보낼때 페이지 기능에서 필요로 하는 값중에는 전체 게시물수가 필요함.
전체 게시물 수를 구할 수 있도록 아래와 같이 선언
// 정해진 모듈에서 문서별 파일 목록을 구함
$files_output = executeQueryArray("widgets.newest_images.getOneFileInDocument", $obj);
$output_count = executeQueryArray('widgets.newest_images.getOneFileInDocumentCount', $obj);

기 존 $files_output = executeQueryArray("file.getOneFileInDocument", $obj); 를 수정하게 되면 중심 모듈을 건드리게 되기 때문에 아래와 같이 위젯 폴더안에 queries라는 폴더를 하나더 만들어서 새로이 생성해준다.
전체 게시물 수를 구하도록 끝에 Count를 더 달아서 파일을 생성해준다.


3. 결과값의 순서를 수정
$z=0;
foreach($files_output->data as $key => $val) {
$files_output->data[$z] = $files_output->data[$key];
unset($files_output->data[$key]);
$z++;
}

다른 위젯과 다르게 임의의 page( limit 0, 5 ) 가 선언되면
$files_output->data[0] ..[1]..[2]..... 가 아니라 $files_output->data[343]... [344]...[345].....
순으로 저장 되기에 이를 0번 부터 사용하도록 수를 수정 한다.


4. 페이지 계산에 필요한 정보를 list.html로 보내기 위해 아래와 같이 정리 한다.
/* 페이지 네비게이션 기능 추가 */
$widget_info->page_type = $page_type;
$widget_info->total_count = $output_count->data[0]->count; // 전체 개시물 수
$widget_info->page = (!Context::get('page'))? 1:Context::get('page'); // 현재 페이지
// 총 페이지 수
$total_count = $widget_info->total_count/$list_count;
if($widget_info->total_count%$list_count != 0) $total_count+=1;
$widget_info->total_page = floor($total_count); // 총 페이지 수
$widget_info->page_count = $page_count; // 총 페이지 수
/* 페이지 네비게이션 기능 추가 끝 */
Context::set('widget_info', $widget_info);
...중략...

5. list.html에서 호출에 오는 함수 정보.
/**
* @brief 다음 페이지 요청
**/
function WD_getNextPage($total_count, $total_page, $cur_page, $page_count = 10) {

$first_page = $cur_page - (int)($page_count/2);
if($first_page<1) $first_page = 1;
$last_page = $total_page;
if($last_page>$total_page) $last_page = $total_page;
if($total_page < $page_count) $page_count = $total_page;

$GLOBALS['wd_total_page'] = $total_page;
$GLOBALS['wd_first_page'] = $first_page;
$GLOBALS['wd_page_count'] = $page_count;
$GLOBALS['wd_last_page'] = $last_page;

$page->first_page = $first_page;
$page->last_page = $last_page;

return $page;
}

function WD_getNextPage2() {
$page = $GLOBALS['wd_first_page']+$GLOBALS['wd_i']++;
if($GLOBALS['wd_i'] > $GLOBALS['wd_page_count'] || $page > $GLOBALS['wd_last_page']) $page = 0;
return $page;
}

function WD_getNextClear() {
$GLOBALS['wd_i'] = 0;
}

위와 함수를 이용하여 페이지 계산, 초기화 등의 정보를 구한다.


- getOneFileInDocument.xml -
<query id="getOneFileInDocument" action="select">
<tables>
<table name="files" alias="files"/>
<table name="documents" alias="documents"/>
</tables>
<columns>
<column name="files.upload_target_srl" alias="document_srl"/>
</columns>
<conditions>
<condition operation="in" column="files.module_srl" var="module_srls" notnull="notnull" filter="numbers" />
<condition operation="equal" column="files.direct_download" var="direct_download" pipe="and" />
<condition operation="equal" column="files.isvalid" var="isvalid" pipe="and" />
<condition operation="equal" column="files.upload_target_srl" var="documents.document_srl" pipe="and" />
</conditions>
<groups>
<group column="files.upload_target_srl" />
</groups>
<navigation>
<index var="list_order" default="documents.list_order" order="asc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

기존의 기본 XML에서 아래의 내용을 추가한다. (페이지 별로 내용 축출을 위해 필요)
<page_count var="page_count" default="10" />
<page var="page" default="1" />


- getOneFileInDocumentCount.xml -
<query id="getOneFileInDocumentCount" action="select">
<tables>
<table name="files" alias="files"/>
<table name="documents" alias="documents"/>
</tables>
<columns>
<column name="count(files.upload_target_srl)" alias="count"/>
</columns>
<conditions>
<condition operation="in" column="files.module_srl" var="module_srls" notnull="notnull" filter="numbers" />
<condition operation="equal" column="files.direct_download" var="direct_download" pipe="and" />
<condition operation="equal" column="files.isvalid" var="isvalid" pipe="and" />
<condition operation="equal" column="files.upload_target_srl" var="documents.document_srl" pipe="and" />
</conditions>
<groups>
<group column="files.upload_target_srl" />
</groups>
<navigation>
<index var="list_order" default="documents.list_order" order="asc" />
</navigation>
</query>

내용은 그대로 getOneFileInDocument.xml에서 가져오돼 바꿔줘야 할 부분
<query id="getOneFileInDocumentCount" action="select">id명을 파일명과 일치시킨다.
<column name="count(files.upload_target_srl)" alias="count"/><column name="count(files.upload_target_srl)" alias="count"/>count()로 감싸고 alias="count" 라는 이름으로 명시.
<list_count var="list_count" default="20" />해당 내용 삭제하여 전체 게시물로써의 게시물수를 구한다.


- list.html -<!--@if($widget_info->page_type=='Y')--> <!-- 페이지 네비게이션 --> <div class="pageNavigation"> <a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="goToFirst"> <img src="./images/common/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a> <!-- 페이지 정보 구하기 위해 선언 --> {@$page_view = WD_getNextPage($widget_info->total_count,$widget_info->total_page,$widget_info->page,$widget_info->page_count)} <!-- 중복 페이지 정보 출력을 위해 사전 초기화 --> {@WD_getNextClear()} <!--@while($page_no = WD_getNextPage2())--> <!--@if($widget_info->page == $page_no)--> <span class="current">{$page_no}</span> <!--@else--> <span class="pageNavigations"><a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}" class="pageNavigation2">{$page_no}</a></span> <!--@end--> <!--@end--> <a href="{getUrl('page',$page_view->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="goToLast"> <img src="./images/common/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a> </div> <!--@end-->

<!--@if($widget_info->page_type=='Y')-->
<!-- 페이지 네비게이션 -->
<div class="pageNavigation">
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="goToFirst">
<img src="./images/common/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<!-- 페이지 정보 구하기 위해 선언 -->
{@$page_view = WD_getNextPage($widget_info->total_count,$widget_info->total_page,$widget_info->page,$widget_info->page_count)}
<!-- 중복 페이지 정보 출력을 위해 사전 초기화 -->
{@WD_getNextClear()}
<!--@while($page_no = WD_getNextPage2())-->
<!--@if($widget_info->page == $page_no)-->
<span class="current">{$page_no}</span>
<!--@else-->
<span class="pageNavigations"><a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}" class="pageNavigation2">{$page_no}</a></span>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_view->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="goToLast">
<img src="./images/common/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
</div>
<!--@end-->

중요한 선언만 설명
{@$page_view =
WD_getNextPage($widget_info->total_count,$widget_info->total_page,$widget_info->page,$widget_info->page_count)}
$widget_info로 넘겨받은 페이지 계산을 위한 전체 게시물 수, 전체 페이지 수, 현재 페이지 번호, 한페이지에 출력될 페이지 번호의 수를 WD_getNextPage로 호출하여 $page_view에 결과를 저장한다.

{@WD_getNextClear()}

상 하로 중복 선언이 될 경우 기존에 이용되었던 $GLOBALS 변수를 초기화 시킨다.
<!--@while($page_no = WD_getNextPage2())-->
...내용...
<!--@end-->

WD_getNextPage2() 를 호출시마다 반복시켜서 내용이 없을때까지 수행한다.




위 설명은 왠만한 위젯에서 공통적으로 적용가능합니다. (리스트형)
1~5번의 위치만 제대로 잡아주시고 DB용 xml만 제대로 선언해주신다면 페이지 네비게이션 이용에
문제가 없을 걸로 봅니다.

전체 소스결과를 출력하긴 좀 그래서 newest_images 위젯을 배포하겠습니다.
위 소스를 기반으로 확인해보시고 다른곳에 적용해보시고 하세요.
보다 자세한 원리의 강좌는 제 홈페이지에 설명되어있습니다.
http://www.animeclub.net/zbXE
by Anna 안나 2008. 11. 6. 00:08
test
by Anna 안나 2008. 11. 2. 22:36
네..오랜만에 이런글 써보는군요.. 설명들어가죠. -잘못된 진실 1. QPST는 불법 프로그램이다? 그래서 잘못만지면 메인보드가 날아간다고? -QPST는 미국의 퀄컴이라는 회사에서 만든 모바일 컨텐츠 관리 프로그램입니다.어떤경로에서인지 이게 유출되어서 일반인들 사이로 퍼진거죠.퀄컴사에서는 이미 몇몇 회사에 이 프로그램을 배포한 전력이 있으므로 불법은 절대로 아닙니다. 그리고 우리가 쓰는 핸드폰의 메인보드 칩셋은 퀄컴에서 만든 기술을 기반으로 제작합니다.미쳤다고 퀄컴에서 자신들의 기술이 담긴 메인보드를 고장낼 프로그램을 개발할 것 같습니까? 메인보드에는 아무런 영향도 미치지 않으며, 시스템 파일 및 중요파일을 건드렸을 경우에 한해서만 핸드폰에 이상이 생길 수 있습니다. 이럴 경우 메인보드 교체에서 심하면 핸드폰 전체 교체가 필요할 수 있으며, 이경우의 비용은 X5500기준으로 최소 8만 5천원에서 25만원정도 들어갑니다. 2. 얼라? 그럼 QPST로 게임 넣어가도 대리점에서 아무말 못한다는거 아닌가? 나이스! -착각하지 마시길...저는 QPST는 불법이 아니라고 했지만, 게임을 넣어도 대리점에서 아무말 못한다는 소리는 안했습니다.우리나라의 모든 모바일 게임회사들은 한국 모바일게임협회의 정책에 따라 저작권을 등록합니다. 만약 이 저작권에 위배되어 게임이 마구 퍼져나가는 사태(지금같은거죠..ㅡㅡㅋ;)가 발생하면 한국 모바일게임협회에서는 이 사건이 일어난 통신사로 책임을 돌려버립니다.이통사들 큰일나죠..그래서 발견 즉시 핸드폰 포맷시켜버리라고 각 대리점에 지침을 내려버리는 겁니다. 하지만 만약 사용자들의 중요한 정보들이 날아갈 경우는? 큰일나죠. 그래서 대부분의 대리점에서는 전번, 사진, 동영상등을 만약을 위해 백업해놓고 사용자에게 이건 불법이며 어쩌구저쩌구...합니다. 뭐 5년이하의 징역이 어떻고 1억 이하의 벌금이 나오며..무시하십쇼 철저히! 미성년자들은 법에게서 보호받으며, 성인들일지라도 대리점에서 고발하지는 못합니다. 고발햇다가 되려 고발당하면 어쩔 겁니까? 결국 대책은 없는거죠. KTF대리점들은 약 3만명의 블랙리스트를 작성했다고 합니다. 여기 올라가면 나중에 불이익 생길 지도 모르니 각별히 주의하시도록... 아참, 업글 받으러갈때는 멀티팩제한 반드시!^^ 3. 근데..QPST로 멀티팩 용량 넘기면 문제생긴다면서? 한계가 얼마야? -약 3.8메가입니다. 이 이상은 더이상 넣으면 심각한 문제가 초래되며, '큰일'이라는 엄청난 사태를 만날 사도 있습니다. 한계용량은 3.8메가, 가능용량은 2.17메가, 적정용량은 2메가 입니다. 용량넘기면 게임 세이브 일체 안됩니다. 주의하세요! 단지 용량넘긴다고 문제는 안발생합니다. 한계가 넘어가면 문제가 생기지만요.. 4. QPST는 좋은프로그램인데! 내일 핸드폰 바꾸면(혹은 업글하면) 게임 왕창 넣어보자! -큰일납니다. 2005년 1월3일 이후 출시되는 모든 폰들은 QPST 빌더 2.7버젼 이상만 지원하며, 그 이하버젼에서는 동작조차 안합니다. 주의하시길.. KTF는 그렇지 않지만 LGT같은 경우, 업그레이드를 하면 QPST가 아예 먹지않는 상황도 발생합니다. 현재 퀄컴사에서 사용하는 QPST는 3.1 엔터프라이즈 익스퍼트 빌더-익스클루시브 퀄컴 코퍼레이션 버젼(QPST nterprise Expert Builder-Exclusive Qualcomm.co.Ltd)이며, 유출 방지를 위해 사용자들만의 고유번호를 직접 부여하고 IP주소까지 감시하고 있습니다. 무섭죠..; 현재 나오는 폰들은 빌더 2.9이상의 상위버젼만을 지원한다고 하는군요. 몇몇 폰들 제외하고 말이죠^^; -오류났을 때의 대처법 1. 삭제, 생성키도 안먹고..폴더는 나오는데..이상해요! -접속이 끊긴 경우입니다. 잠시 컴퓨터를 끈 상태에서 다시 재부팅 해서 다시 시도해보시길..이때 핸드폰은 가만히 내버려 두셔야 합니다. 2. 연결했는데 N/A라는 것만 떠요. -아예 USB포트조차 연결이 안된 경우입니다. 접속상태를 확인해보시고, 그래도 안된다면 컴퓨터를 재부팅 해보십시오. 그래도 안된다면 같은 이동통신사의 다른 핸드폰을 끼워보세요. 만약 남의 것은 되는데 자신의 것이 안된다면 대리점 가서 A/S받으세요. 반드시'MP3 넣으려고 하는데 연결이 자꾸 안된다고 하는데요. USB연결이 안되는것 같아요'라고 하셔야 합니다. 만약 'QPST사용하려는데 안되네요..'하면 당장 10만원청구할 겁니다. 아마도 말이죠^^; 3. kmp파일을 넣는데 자꾸 전환이 어쩌고..해요..어떡하죠..ㅠㅠ -mp3의 경우 1메가바이트당 약 2분가량이 걸립니다. 보통 3메가니까 7~8분이 필요하죠. 5메가의 경우는 12분정도 걸립니다. 전환창이 뜨면 살포시 옆으로 밀어놓은 후, 대충 10분쯤 후에 전환을 누르시면 됩니다. 그럼 들어가 있죠. 4. 한글이름으로 된 파일을 넣었어요! 어떡하면 해결할 수 있죠? -먼저 한글파일은 지워지지도 않고..여하튼 그럴 겁니다. 그렇다면 먼저 그 파일과 이름과 확장자까지 똑같은 파일을 만드세요. 만약 불치병.kmp파일이라면 이것과 이름과 확장자까지 똑같지만 용량은 없는 파일을 하나 만드세요. 텍스트파일을 바꾸는 것을 추천합니다. 만든 것을 한글파일이 있는 폴더안에 넣으면 영어로 뭐라고 뜹니다. YES누르면 오케이! 5. 'Don`t Open&Modify Your Phone. Please Reset your Phone'이게 뭐죠? 왜 이런게.. -저도 한번 겪었죠. 업글후 가끔 나타나는 현상입니다. 핸드폰 다시켜신 후에 바로 QPST로 연결 후 접속하시면 됩니다. 6. 게임을 넣었는데 화면에 비해서 작아요(혹은 너무커요!) -작은경우는 작은화면용 게임을 큰화면에 넣은 경우, 너무 큰 경우에는 큰화면용 게임을 작은화면에 넣은 경우입니다. 알아서 분류하세요. 참고로 큰화면용 게임의 가능 인치수는 약14.8인치입니다. 왠만해서는 가장 작은 컴퓨터 모니터와 맞먹는 크기라는 소리죠. 7. 핸드폰이 갑자기 꺼졌다 켜지고 그래요.. -저도 지금 그러는데 말이죠^^; 최근에 넣은 지니북 파일 및 게임파일은 지워주세요. 그다음 다시 한번더 사용해 보다가 그래도 계속 그러면..자기가 직접 다운방은 것들 ?고 다 지운후 A/S센터으로 가세요! A/S센터가 제일입니다. 8. 다른사람들은 2.17메가까지 쓴다는데 저는왜 2.07메가정도죠? 그리고 A/S센터 가면 그동안 다운받은거 지운거 너무 많아서 들통나지 않을까요? -멀티팩에 들어가셔서 제어판-메모리정보-파일관리에 있는 BMP파일을 모두 지우시면 용량은 늘어납니다. 또한, 삭제 기록같은 경우는 QPST에서 Brew-Download-dllog파일을 지우시면 됩니다. dllog.idx는 절대로!!!!지우면 안됩니다. --------------------------------------------------------------------------- 추가할 것이나 더 궁금한 건 리플 달아주세요. 추가하겠습니다. Special Thanks - 만드는데 도움주신분 - 비은님 - ⓝⓔⓥⓔⓡ려둬 의 머리속('';) =비은님의 답변분량과 제 머릿속에서 나온 정보를 종합해서 만든 자료입니다. 옮길 시에는 반드시 출처를 밝혀주시기를 부탁드리겠습니다.=
http://blog.daum.net/crazim/4606200
by Anna 안나 2008. 11. 2. 00:30
1. 산요(SMP-017S)
먼저, 휴대폰은 잠금 상태여야 한다.
그 상태에서 * 를 꾹 누르고 있는다
곧 SEURITY CODE 를 입력하라는 화면이 나오는데,
여기에 *72696#767 이라고 쓴다.
그러면 이 휴대폰의 비밀번호는 초기화가 되어
0000 으로 바뀌게 된다 2. LG 싸이언 폴더 011용
잠금상태든, 아니든 상관 없다
메뉴 버튼을 누르고 0 번을 누른다
비밀번호를 누르라는 말이 나오는데
모든 칸을 0 으로 다 채운다.
그러면 테스트 모드 같은게 나오는데
서비스 설정으로 들어간다
확인 버튼을 눌러서 계속 넘어가다
휴대폰 번호가 찍혀있는 화면이 나올 것이다
여기서 휴대폰 번호를 다시 쓰고
계속 확인 버튼을 누른다
그러면 전원이 꺼졌다 다시 들어오면서
비밀번호는 0000 이 된다
- 플립(WEVER)에서 해 보았으나 실패 했음 3. 삼성 애니콜 - 되는 것두 있고 안되는 것도 있음
애니콜 폴더는 됨
잠금상태에서 112 를 누르고 통화 버튼을 누른다
그러면 화살표가 전화기 쪽으로 이동하는데
그 화살표와 전화기가 만나는 때를 잘 노려
종료 키를 누르면 '이 번호를 저장할까요?'
라는 말이 뜨면서 비번은 깨진다
그러나 만약 사용자가 사생활 보호 기능을 해 놓았다면
문자등을 보는것은 불가능하다
이 방법은 실로 성공 확률이 매우 적다 4. BONUS - 삼성 애니콜 테스드 모드
일반 상태에서 5809540*45680 을 하면
테스트 모드가 나오고,
여기서 48을 누르면 진동 ON, 49는 진동 OFF
27은 백라이트 ON, 28은 백라이트 OFF,
25는 램프 ON, 26은 램프 OFF, 02는 종료이다
숫자가 안 적혀질땐 # 를 한번 누르고 쓰면 된다 5. 모토로라 MP-9000(9100)
잠기지 않은 상태에서 해야 될 것이다(기억이 가물가물~~)
147*369#789@**@##@
여기서 @ 는 편지 모양 버튼을 뜻한다
그러면 여러가지 메뉴가 나오는데
서비스 설정이였던가?.....
어쨌든 여기 어딘가에 비밀번호가 찍혀있다 6. 걸리버 폴더
잠긴 상태에서 *5625# 을 누르면
메뉴가 나타날 것이다(아마...)
거기서 1번(맞을꺼야...^^)을 누르면
그 중에 LOCK CODE 라고 적혀서
비밀번호가 적혀 있을 것이다 7. 스카이 IM-1100,1200 - 버전이 높으면 안될수도 있음...^^
먼저 전화번호부 로 들어가서
이름으로 찾기에 들어간다
그 다음에 그림문자중에 2칸을 차지하는 그림을 7개 넣는다
맨 처음으로 가서 아무 버튼이나 꾹 누른다
그러면 숫자가 찍힌다
거기서 같은 버튼이든, 다른 버튼이든, 또 누른다
그러면 숫자가 적힘과 동시에 화면이 깨지는데,
여기서 앞으로 쭉 가다 보면
비밀번호가 찍혀있다(날짜 앞에...^^) 8. BONUS - 스카이 테스트 모드
#7583538324#8378# 9. BONUS2 - 스카이 NAM 설정 모드
#7583538324#626 안녕하세요. 박기성입니다. Qpst를 사용하려고 하다보니 큐리텔의 경우 spc 코드가 필요하여 공유하고자 작성합니다.
즐거운 시간 되세요. 감사합니다. 큐리텔 spc = 580918 입니다. Qpst 사용시 000000 칸에 580918을 넣어야 휴대폰과 연결됩니다. 아래사항은 참조하세요. (설명서 및 기타) ================================== ***강추****에버하구 큐리텔 비번 푸는법 일단 EVER!! 에버...폰 많이 쓰시죠?? 에버폰은 비번 쉽게 풀수있습니다. 자..따라해보세요.. 32147*0#9632580321456987*0# 누르시면 비번 뜹니다 ㅋ 32147*0#963=한바퀴돌리세요 3부터 반시계로..
2580=키패드 중간에 숫자 쭉 내려오세요..
321-> 1밑에4부터-> 456-> 6밑에9부터-> 987-> 7밑에*부터-> *0#
다음에는 큐리텔 설명드릴께요..팩택&큐리텔 이것두 많이쓰시죠?? 일단 #을 3초눌러서 잠금상태로 바꾸세요 그리고 #5625* 을 누르시면 서비스메뉴라구 뜨시죠...1번에 LOCK CODE 라고있어요 확인눌르면 및에 비번이 뜹니다.. 그리고는 자동으로 폰이꺼지죠.. 다시켜시면 잠금상태이시죠? 아까 비번 본걸러 푸시면 돼요
원본 : 휴대폰 비번푸는 방법
by Anna 안나 2008. 11. 2. 00:28
이전에 유효성이니 접근성이니 꽤 고리타분한 이야기에서 벗어나서 이제 Effects 부분들입니다. 먼저 사이트에 각 기능성 플러그인들을 작동시키기 전에 몇가지 참고할 만한 부분들을 짚고 넘어가겠습니다. 이것은 Planning 1과 2에서 다루지 못했던 부분이거나 따로 파트를 나누기엔 소소한 부분들입니다.

#1 최초 사이트 스킨은 대암지기님의 스킨으로
사이트의 스킨을 만들때는 항상 제로보드 XE 기본 스킨으로 시작하는 것이 좋습니다. 아시는 분은 다 아시겠지만 기존에 변경된 스킨을 사용하면 추가, 삭제된 코드들 때문에 혼동이 올 수 있으니 되도록이면 보드 스킨도 기본 Official 스킨을 사용하시는 것이 좋겠습니다. 그리고 많은 플러그인들이 제로보드의 확장변수와 연동되서 작동하게 되므로 확장변수에 대한 이해도 미리 해놓으시면 좋습니다. 확장변수를 게시판에 쉽게 적용 할 수 있도록 대암지기님께서 등록하신 스킨이 가장 좋습니다. 기본 스킨에 확장변수 부분만 편리하게 정리한 아주 좋은 스킨입니다.

#2 Jquery를 호출 할 자바스크립트는 별도 JS 파일로 관리
Jquery용 플러그인을 호출 할때 쓰이는 자바스크립트 구문들은 모두 스킨 html 파일에 넣지 말고 따로 global.js등으로 분리하여 layouts 폴더의 js 폴더내에 저장하는 것이 좋습니다. 이 부분은 이번 내용에 포함되어 있으니 아래 Fade In MouseOver 부분에서 같이 하시면 되겠습니다.

#3 @font-face를 이용한 웹 폰트 사용
WTA에서는 @font-face를 사용해서 조그마한 도트 폰트를 사용하고 있습니다. 인터넷 익스플로러에서만 작동하는 이 Function은 CSS 2.1에 포함되지 않은 비표준 코드입니다. 하지만 CSS3에서는 표준으로 사용 될 예비 코드입니다. 사용을 해도 앞으로 문제가 없는 부분이므로 용도에 맞게 적용하시면 좋은 효과를 보실 수도 있습니다. 더 많은 CSS3의 기능들을 살펴보시려면 이 드래프트 문서를 참고해서 W3C에 제출된 로드맵을 살펴보세요.

#4 글쓰기 버튼을 이용한 컨텐츠 등록은 FireFox로
게시판에 컨텐츠를 올릴때 HTML 태그 부분에 버그가 있습니다. IE에서는 특정 태그(예를들면 P나 BR태그)들이 한번 저장하고나서 수정화면으로 들어가면 대문자로 바뀌어 있습니다. 대문자로 바뀐 태그는 CSS 유효성 검사에서 에러를 일으킵니다. FireFox에서는 태그가 대문자로 변경되는 일은 없습니다. 다만 IMG 태그 맨 뒤에 슬러쉬(/)가 붙지 않아 이 또한 에러로 처리 됩니다. 유효성 검사에 뜻을 많이 두시는 분은 글 수정 하실때 일일이 본문내의 이미지 태그 뒤에 슬러쉬를 다시 붙인 후 등록을 해야하는 번거로움이 있습니다.


Fade In MouseOver
WTA 겔러리 썸네일에서 마우스가 겔러리의 Thumbnail 이미지 위에 올려졌을때 Fade In, Out하는 효과입니다. 이 효과는 BestWebGallery, CSS Gallery등에서 볼 수 있습니다. 단 몇줄의 Jquery 구문만으로 처리하는 간단한 방법이지만 다른 많은 썸네일 이미지보다 가독성을 끌어올리는 역할을 합니다. 이 스크립트는 CSS Gallery의 Skill Share라는 이용자 포럼에서 질문과 답변 부분을 검색해 찾은 내용입니다.

먼저 global.js라는 빈 파일을 만들고 아래의 구문을 넣어 저장합니다. Jquery 구문은 비단 보드 뿐만아니라 레이아웃이나 기타 스킨에서도 언제든지 쉽게 불러 올 수 있어야 하므로 레이아웃 스킨에 넣는 것을 권장합니다.

/zbxe/layouts/스킨폴더명/js/global.jsFade In MouseOverview plaincopy to clipboardprint?$(document).ready(function(){ $(".thumb").fadeTo("slow", 1.0); // This sets the opacity of the thumbs to fade down to 60% when the page loads $(".thumb").hover(function(){ $(this).fadeTo("slow", 0.2); // This should set the opacity to 100% on hover },function(){ $(this).fadeTo("slow", 1.0); // This should set the opacity back to 60% on mouseout }); }); $(document).ready(function(){ $(".thumb").fadeTo("slow", 1.0); // This sets the opacity of the thumbs to fade down to 60% when the page loads $(".thumb").hover(function(){ $(this).fadeTo("slow", 0.2); // This should set the opacity to 100% on hover },function(){ $(this).fadeTo("slow", 1.0); // This should set the opacity back to 60% on mouseout }); });
제로보드 기본스킨의 style.gallery.html에 보면 썸네일 이미지를 둘러싸고 있는 DIV태그는 .thumb입니다. 그래서 위와같이 MouseOver 되었을 때의 효과가 .thumb 클래스에서만 작동되도록 작성된 코드입니다. Jquery가 설치되어 있다면 이 코드만으로 마우스오버는 작동합니다.
by Anna 안나 2008. 11. 2. 00:25

#1. jquery.tooltip의 셋팅
겔러리의 썸네일 이미지에 마우스를 올리면 Preview 이미지가 마우스를 따라다니는 효과는 webtrendawards와 bestwebgallery에서 볼 수 있습니다. 이 기능은 bassistance.de에서 오픈소스로 내놓은 Jquery의 플러그인 Tooltip을 사용합니다. 기본적으로는 마우스오버가 되었을 시에 Text를 출력하지만, 제로보드의 확장변수와 함께 사용해서 약간의 마크업 팁을 응용하면 간단히 Preview 이미지를 넣을 수 있습니다.

먼저 이 툴팁 오픈소스를 제공하는 사이트에서 약간의 데모와 기능을 살펴보고 필요한 파일을 다운로드 합니다. 다운로드 받은 파일의 압축을 풀면 꽤 여러가지 파일들이 나오는데, 여기서는 마우스 오버시에 이미지가 출력되는 부분만 취급할 것이므로 그 외의 기능에 대한 설명은 생략하고 그에 해당하는 파일들의 설치법에서도 거론하지 않겠습니다.

압축을 푼 파일중에서 필요한 파일은 다음과 같습니다.

jquery.tooltip.js jquery.dimensions.js jquery.js이 중에서 jquery.js는 이미 이전에 설명한 바 있고 이미 설치되어 있다는 가정하에, 나머지 두개의 자바스크립트를 계정에 복사하여 설치합니다. 다른 JS 파일의 Include와 마찬가지로 layout.html에 추가하면 됩니다. (jquery.dimensions.js는 미리보기 이미지가 화면의 끝쪽으로 밀려서 안보이게 되는 경우, 공간이 넓은쪽으로 자동으로 밀어주는 역할을 해줍니다)

만일 Jquery대신 Prototype을 사용하는 이용자의 경우에는 Prototip 2라는 툴팁 플러그인이 있습니다. 이 플러그인 사용을 권장합니다. Jquery의 툴팁에는 없는 토글 기능이나 기타 여러가지 부수기능이 더 많이 구현되어 있고 디자인도 깔끔하게 베이스로 깔려있어 사용하기가 좋습니다.

/zbxe/layouts/스킨폴더명/layout.html레이아웃 파일에 JS 파일을 Include 합니다
<!-- js 파일 import -->
<!--%import("js/xe_official.js")-->
<!--%import("js/jquery.js")-->
<!--%import("js/jquery.dimensions.js")-->
<!--%import("js/jquery.tooltip.js")-->
4번 5번 줄이 새로 추가된 툴팁 관련 JS 입니다. 이제 레이아웃에 연동되어 있는 CSS파일 (기본은 default.css)를 열고 아래의 CSS 코드를 추가합니다.
#tooltip.preview {
background: url('../images/default/preview.png') no-repeat;
padding: 27px 15px 17px 18px;
border: none;
position: absolute;
z-index: 3000;
}

Preivew 이미지가 놓일 배경 이미지의 경로를 적어줍니다. 이 이미지 위에 미리보기 이미지가 얹혀지게 되는데, 배경이미지와 미리보기 이미지간의 정렬은 padding 값으로 합니다. 이 padding 값을 적절히 조절하면 배경이미지와 미리보기 이미지의 위치를 원하는 위치에 정확히 가져다 놓을 수 있습니다.

이전에 등록한 링크 사이트 제작을 위한 어드바이스 - Fade In MouseOver -편에서 설명했듯이 이번에는 global.js에 코드를 추가 할 차례입니다.
// Tooltip
$(function() {
$(".preview").tooltip({
track: true,
delay: 0,
showURL: false,
opacity: 1,
fixPNG: true,
showBody: "",
extraClass: "preview",
top: -35,
left: 20
});
});

여기까지 jquery.tooltip의 기능을 이용하기 위한 기본 셋팅은 끝났습니다. 이제 제로보드 XE에서 확장변수 부분을 끌어와서 화면에 출력시키는 부분을 연결하게 됩니다.


#2 제로보드 XE의 셋팅
먼저 제로보드 XE 관리자 페이지에서 게시판 정보수정을 통해 확장변수 한개를 활성화 시킵니다. 이 확장변수는 글쓴이로부터 미리보기 이미지의 경로를 입력받아 화면에 출력시킵니다. 형식은 한줄입력칸(홈페이지 URL 형식도 무관)으로 설정합니다. 이 확장변수는 번호 1번에 지정했으므로 style.gallery.html에서 호출할때도 변수 1로 호출하게 됩니다.

/zbxe/modules/board/skins/보드스킨명/style.gallery.htmljquery.tooltip을 제로보드와 연결합니다
<!-- 갤러리 목록 출력 -->
{@ $height = $module_info->thumbnail_height + 50; }
<!--@if($module_info->use_category=='Y')-->{@ $height += 20 }<!--@end-->
<!--@if($module_info->display_author!='N' || $module_info->display_regdate!='N')-->{@ $height += 25 }<!--@end-->
<!--@if($module_info->display_readed_count !='N' || $module_info->display_voted_count!='N')-->{@ $height += 25 }<!--@end-->

<div class="thumbnailBox">

<!--@foreach($document_list as $no => $document)-->
<!--@if(!$document->isNotice())-->

<div class="cell" style="width:{$module_info->thumbnail_width+30}px;height:{$height}px;">
<!--@if($document->thumbnailExists($module_info->thumbnail_width, $module_info->thumbnail_height, $module_info->thumbnail_type))-->
<a href="{getUrl('document_srl',$document->document_srl,'listStyle',$listStyle, 'cpage','')}"><img src="{$document->getThumbnail($module_info->thumbnail_width, $module_info->thumbnail_height, $module_info->thumbnail_type)}" border="0" alt="" class="thumb"/></a>
<!--@else-->
<img src="./images/common/blank.gif" border="0" alt="" class="thumb" width="{$module_info->thumbnail_width}" height="{$module_info->thumbnail_height}" />
<!--@end-->

위와 같이 style.gallery.html 파일에서 갤러리 목록이 출력되는 부분을 찾아봅니다. 썸네일 이미지 위에 마우스가 올라가면 이전에 지정한 확장변수에 입력된 이미지 경로가 출력되어야 하므로 14번째 a코드 줄을 수정하게 됩니다. 이 툴팁은 preview라는 이름의 클래스가 지정되어야 하고 title 셀렉터의 내용에 기재된 부분을 마우스 오버 팁으로 전환시켜주므로 두 부분을 수정해서 아래의 코드로 변경합니다.
<a
href="{getUrl('document_srl',$document->document_srl,'listStyle',$listStyle,
'cpage','')}" class="preview" title="&lt;img src={htmlspecialchars($document->get('extra_vars1'))} /&gt;"><img
src="{$document->getThumbnail($module_info->thumbnail_width,
$module_info->thumbnail_height, $module_info->thumbnail_type)}"
border="0" alt="" class="thumb"/></a>

이제 위 코드에서 class와 title이 지정된 것이 보입니다. 특히 title 셀렉터 부분을 유심히 봐야하는데, 본래는 여기에 일반 텍스트가 놓여지게 됩니다. 하지만 이미지를 출력시키기 위한 꽁수로 이미지 태그에 들어가는 꺽쇠를 위와같이 코드표시용 코드로 바꿔서 태그 자체를 삽입하면 title 셀렉터에 이미지 태그를 넣을 수 있습니다. 그리고 이미지 태그의 경로는 확장변수 1번이 지정한 경로를 불러오게끔 되어 있습니다.

이렇게해서 여러분은 갤러리 화면에 마우스 오버 미리보기 이미지를 사용 할 수 있게 됩니다.
by Anna 안나 2008. 11. 2. 00:25
디자이너 Ross Johnsson의 디자인 블로그 사이트 3point7designs에서 10개의 화면용 폰토 설정 지침인 10 Examples of Beautiful CSS Typography and how they did it…을 선보였다. CSS의 기본 타이포 스타일을 토대로 모든 기종의 컴퓨터와 OS에 탑재되어 있는 안전 폰트를 이용하여 글자 주위가 픽셀단위로 파괴되지 않고 가장 미려하게 보이는 셋팅을 기준으로 한 것.
by Anna 안나 2008. 11. 2. 00:24
[update 03.08.2008]
1. 이메일 주소 활용

G메일에는 기본적으로 제공되는 xxx@gmail.com 주소 외에도 다음과 같이 여러가지로 변형해서 사용 할 수 있습니다. 먼 저 + 표시를 넣어서 주소를 만들수 있는데요. xxx+spam@gmail.com 또는 xxx+shopping@gmail.com 처럼 기본 아이디 뒤에 "+"와 함께 다른 단어를 조합해도 xxx@gmail.com과 동일한 주소로 취급됩니다. 이 걸 이용해서 쇼핑몰등에 가입할때는 xxx+shopping으로 가입하고, G메일의 필터설정에서 xxx+shopping에서 오는 모든 이메일은 자동으로 shopping이라는 라벨이 붙게하고 보관처리 하는등 받은편지함을 보다 편리하게 관리 할 수 있습니다. 만 약 가입하려는 웹사이트에서 "+" 표시가 붙은 이메일을 받아들이지 않는 경우에는 xxx.shopping@gmail.com이나 x.xx.shopping@gmail.com 등 아이디 아무곳에서 "."을 섞어서 등록을 해도 이메일은 동일하게 xxx@gmail.com으로 들어옵니다. 두번째로, 기본적인 주소 xxx@gmail.com 외에 xxx@googlemail.com을 같은 주소로 사용 할 수 있습니다. 사이트마다 "+"나 "." 사용하는 것이 번거로울 경우 스팸이 의심되는 사이트에 이렇게 xxx@googlemail.com으로 등록하고 여기로 오는 메일은 자동으로 스팸처리되게 하면 편리합니다.
2. RSS로 구독하기

이메일을 RSS로 구독하는게 조금 낮설게 느껴지는 것이 사실이지만, 메일링리스트나 뉴스레터처럼 답장 쓸 필요없이 바로 읽고 폐기처분하는 것들은 RSS로 구독해서 보는 것도 괜찮은 것 같습니다. 먼저 RSS로 구독하고 싶은 특정 이메일 종류에 "newsletter" 같은 라벨적용 작업을 하고.. (한글 라벨은 안되는것 같습니다.) https://mail.google.com/mail/feed/atom/라벨이름 -> 라벨이름 자리에 만들어 놓은 라벨이름을 입력하고 구독하면됩니다. 그런데.. G메일을 RSS로 구독하기 위해서는 인증을 요구하기 때문에 대부분의 피드리더에서 사실 지원을 안합니다. (대표적으로 구글리더.. ;;) 한RSS도 지원을 안하는것 같고, 파이어폭스의 라이브북마크, Netvives나 FeedDemon, NetNewsWire 등이 지원을 하네요.. 파 이어폭스의 라이브북마크 같은 경우 G메일에 로그인만 되면 계속해서 북마크도구모음에서 체크 할 수 있고, about:config 페이지에서 browser.bookmarks.livemark_refresh_seconds를 원하는 초단위로 설정해 놓으면 자동으로 그 시간마다 업데이트하기 ?문에 사용하기 가장 편한것 같습니다. 이외에 특정 라벨 말고도.. http://mail.google.com/mail/feed/atom/ -> 최근의 읽지 않은 메일을 구독하는 주소입니다. http://mail.google.com/mail/feed/atom/unread/ -> 시간에 구애받지 않고 읽지 않은 메일은 모두 받을 수 있습니다.
3. 필터 설정 보낸사람 (From) 필드에 주소를 입력할때 특정 도메인으로부터 오는 모든 편지를 필터링하고 싶으면, *를 사용하면 됩니다. *@naver.com을 넣으면 naver에서 오는 모든 편지가 필터링됩니다. 보낸사람 (From) 필드에 여러개의 주소를 "OR" 연산자를 사용해 필터링 할 수 있습니다. 예) spam1@naver.com OR spam2@naver.com 첨부파일 종류도 filename:type을 검색어 필드에 넣어서 필터링 가능합니다. 만약에 .doc 파일이 들어간 이메일을 따로 보관하고 싶으면 검색어 필드에 filename:.avi를 입력하면됩니다. 이외에 보다 많은 필터 관련 연산자는 G메일의 고급검색 사용 페이지를 참조하세요.
4. 첨부 금지된 파일 보내기 많 은분들이 G메일을 싫어하는 이유중에 하나가 바로 .exe, .dll, .com 같은 실행파일을 못보내는 문제때문인데요.. 실행파일을 .zip 파일로 압축을 해도 온라인 스캐너에서 실행파일이라고 금지시키기 때문에 무척 짜증나는 문제입니다. 다음과 같은 꽁수로 번거롭긴 하지만 실행파일을 보낼수 있습니다. 파일의 확장자를 바꾸면 됩니다. a.exe 파일일 경우 a.exe.virus나 a.exe.pdf 처럼 확장자를 바꿔서 보내면 됩니다. zip 파일 대신 winrar를 이용해서 .rar로 압축하거나 7zip을 사용해서 .7z로 압축해서 보내면됩니다. 워드나 파워포인트 문서를 만들어서 거기에 실행파일을 첨부해서 보내면 됩니다. 이 밖에 G메일에서 허용된 용량인 20MB 이상의 파일을 보내거나 받을 사람이 많은 경우 YouSendIt이나 MediaFire 같은 파일호스팅 서비스를 이용해 먼저 파일을 업로드하고 링크를 첨부하는 것이 좋습니다. 덧붙여서.. 첨부 파일을 올리는데는 시간이 오래 걸리니까, 파일을 먼저 올리기 시작한 후에 메시지를 작성하는 것이 좋겠죠.. ^^;
5. 숨겨진 단축키 무슨 이유때문인지 몰라도 G메일에서는 삭제(Delete) 명령을 공식적인 단축키에 포함시키지 않았습니다. 하지만 Shift + 3 키를 누르면 메시지를 삭제 할 수 있습니다. (특정 운영체제나 브라우저에서는 작동하지 않을 수 있습니다. 제가 사용하는 파이어폭스2에서는 잘 작동하네요.) G메일을 빠르게 쓰는데 기본이 되는 기본적인 단축키와 콤보키 활용은 구글 도움말에 잘 나와있습니다. 그리고 라벨도 단축키로 대체 할 수 있는데요.. 예를들어 받은편지함의 읽지 않은 메시지를 검색 할 때 검색창에 label:inbox label:unread를 입력해서 검색하는데, l:inbox l:unread로 검색해도 동일한 결과를 보여줍니다. 라벨 명령 뒤에 붙는 쿼리도 단축키로 가능한데, 다음과 같습니다. ^b chats
^f sent mail
^i inbox
^k trash
^r draft
^s spam
^t starred messages
^u unread mail 예를 들어.. l:^i l:^u로 하면 l:inbox l:unread와 동일한 결과가 나옵니다.. ^^
6. 파이어폭스 확장기능

Better Gamil 2 - 유명한 G메일용 그리즈몽키 스크립트 몇개를 묶어서 확장기능으로 만든겁니다. G메일을 파이어폭스에서 주로 사용하신다면 적극 권장하는 파이어폭스 확장기능입니다. 주요 기능으로는.. 기본적으로 아웃룩 익스프레스에서 열리는 이메일 링크를 G메일로 보내기, 안전한 https 주소로 연결, 제목표시줄에서 받은편지함의 읽지 않은 편지 숫자를 먼저 보여주기, 키보드 매크로 지원, 구글리더와 통합, 메시지에 마우스 올릴때 롤오버 효과주기, 첨부파일 종류별 아이콘 다르게 표시하기 등등.. 이외에도 Gmail Blue와 Grays and Blues 스킨을 바로바로 바꿔서 쓸 수 있습니다.

Gmail Manager - 여러개의 G메일 계정을 한꺼번에 관리 할 수 있는 편안한 G메일 관리 확장기능입니다. 강병욱님이 만든 웹메일 알림이도 좋지만, G메일의 경우 스팸편지함도 같이 안읽은 메시지로 표시해줘서 저같은 경우는 네이버/다음/엠파스를 체크하는데 사용하고 있습니다.

Gspace - G메일의 넉넉한 용량을 FTP 사용하는 것 처럼 파일 저장 공간으로 활용 할 수 있습니다.

Gmail Search Extension - G메일을 파폭의 검색창에서 바로 검색 할 수 있습니다.
DragDropUpload - 파일을 드래그앤 드랍으로 G메일에 편리하게 추가 할 수 있습니다. 여러개 파일 올릴때 G메일 인터페이스는 솔직히 별로죠.. ;;

Customize Google - G메일의 광고제거, 보안접속, 스팸숨김 등등 몇가지 기능이 있습니다. G메일 뿐만 아니라 다른 구글 웹사이트에서도 사용 할 수 있는것이 장점

Gmail Skins - 한쪽에 날씨나 구글달력, 뉴스 같은 igoogle의 컨텐츠를 볼 수 있게 해주고, 피카사 웹앨범에서 이미지 넣기, 이모티콘/이미지/테이블/html 넣기, 첨부파일 아이콘을 종류에 맞게 변경하기, 받은편지함 색상 변경 등의 기능을 G메일 설정 화면에서 편리하게 제어 할 수 있습니다.
7. 그 밖에 다른 툴들..

GmailDrive - 윈도우에 Gmail Drive라는 가상 드라이브를 만들어줍니다. 탐색기에서 그냥 하드디스크 쓰듯이 편리하게 파일을 전송 할 수 있습니다. 맥용으로는 gDisk, 리눅스용으로는 GmailFS가 있습니다.

Gmail Notifier - 구글에서 만든 데스크탑 G메일 알리미입니다. 비슷한 툴로 Notifier2,GTray(윈도우 XP), GCount(맥), KCheckGmail(리눅스)이 있습니다.

Send To GMail - 컴퓨터에 있는 특정 파일을 바로 G메일로 보낼 수 있습니다.

You've Got Gmail - 종합 메신저 프로그램인 트릴리안에서 G메일을 확인 할 수 있습니다.

Gmail Icon Generator - 블로그나 웹사이트에 게시 할 수 있도록 G메일 아이콘을 만들어줍니다.
G메일 모빌 웹사이트 - 자바를 설치 할 수 있는 휴대폰이라면 gmail.com/app를 방문하시고, WAP으로 서핑이 가능하면 m.gmail.com을 사용하면됩니다.

Fon Gmail Uploader - 컴퓨터에 저장되어 있는 아웃룩 등의 로컬 메일을 손쉽게 G메일로 옮겨줍니다. 메일당 2초 정도씩 걸린다고하네요.

MailStore - G메일에 저장된 이메일을 내 컴퓨터의 안전한 곳으로 저장 할 수 있습니다. 윈도우 전용 유틸리티이구요.. 비단 G메일 뿐만아니라 아웃룩, 썬더버드, POP/IMAP 계정을 지원합니다. 백업된 이메일의 검색과 중복 메일의 제거도 가능합니다.


어휴.. 쓰다보니까 생각외로 길어졌네요.. 아무튼 저처럼 G메일 쓰시는 분들에게 많은 도움이 됐으면 좋겠네요.. :)
by Anna 안나 2008. 10. 26. 19:56
roamdrive_beta2.exe
아시는분들은 아시겠지만 10M 이상의 자료를 업로드하실일이 있으신분들은 쓰셔도 괜찮을듯싶네요~ 지메일드라이브랑은 전혀상관이없는 별게의 프로그램입니다~ roamdrive 라고합니다..아직 베타버전이구요 원리는 10M 이상의파일은 스스로 분할을해서 업로드를 시키고 다운받으면 다시합쳐서 다운해주는 프로그램이라고하네요~ 제가 사용해본결과 한글이 지원이안돼서 파일을 알아보기가 좀힘듭니다~ 그리고 업로드해놓고 G메일로 들어가봐도 좀 알아보기힘들고요 급하게 큰용량 업로드하실일 있으시면 추천합니다, 그리고 roamdrive 로 올린파일 외에 지드라이브나 기타 메일보내기형식으로 올려놓은 파일은 보여주질않습니다, 자세한 사항은 직접써보시면 아실거구요,,, 주의하실사항 주의. 1. 만약 .NET framework 1.1이 설치가 안되어 있으면 제대로 설치가 안되니 유틸을 설치하기전에 설치해야 합니다. 2. 만약 gmail의 언어가 한국어로 되어 있다면 업로드가 제대로 이루어 지지 않습니다. 언어를 영문으로 바꾸어 주셔야 합니다. 3. 압축파일이 아닌경우에도 오류가 발생할수 있습니다. 확장자를 변경하거나 압축파일로 만드셔야 합니다. 참고 만약 roamdrive를 설치할 수 없을 경우 분할된 파일을 다운로드 받아야 할때 도스 명령으로 분할 파일을 합칠수 있습니다. copy /b test_2-611.rar+test_2-612.rar test_2.61.rar 설치및 사용방법 다운받는 roamdrive_beta2.exe를 두번 클릭해서 설치한다 설치된 RoamDrive를 실행한다. 좌측 패널에서 Email Account를 클릭한다. E-mail Address에 Gmail의 전자우편 주소를, Password에 Gmail의 암호를 입력한다. 좌측 패널에서 Load/Refresh Files 아이콘을 클릭한다. Windows 탐색기로 업로드하려는 파일을 RoamDirve의 Your Files에 끌어 놓는다
by Anna 안나 2008. 10. 26. 19:55
winrar_v3.80-kmw25. . .




크랙실행 손모양에 클릭



찾아보기 윈라를 열기 크랙끝
by Anna 안나 2008. 10. 26. 19:54
파이어폭스가 나오기 이전부터 웹사이트의 비밀번호 관리와 자동으로 폼채우는 기능을 위해 Roboform을 사용해 왔습니다. 예전에 정식으로 구입했던 소프트웨어라 나름 애착도 있고, 손에도 너무 익어서 그동안 다른 패스워드 관리 프로그램에 눈을 돌리지 않았었는데요. 최 근에 이전 버전보다 속도와 편의기능이 많이 향상된 파이어폭스3 베타 버전을 사용하다 보니까, 로보폼 툴바의 미지원이 아쉽고, 파이어폭스 자체적인 패스워드 관리자는 기능은 너무 미흡해 보여서, 무료로 로보폼을 대체할만한 확장기능이 없나 찾아보았습니다. 그래서 몇가지 설치하고 지우다 찾아낸것이 Sxipper와 Autofill Forms입니다. Sxipper는 패스워드 관리, Autofill Forms는 자동으로 폼채우는 기능을 위한 확장입니다. 모두 파이어폭스 최신 버전인 Firefox 3 beta 5를 지원합니다.
1. Sxipper 웹 사이트의 패스워드를 저장했다가 원클릭으로 손쉽게 로그인을 도와주는 확장기능입니다. 패스워드 저장은 파이어폭스 자체 기능을 이용하네요. 자동 폼채우기 기능도 지원하지만 수동으로 필드를 추가/편집하는 부분이 없어서 이 기능은 아래에 소개하는 Autofill Forms 확장기능을 이용하는 것이 좋겠습니다. 주요 기능을 살펴보면.. 아이디/비밀번호 저장, 원클릭 로그인오픈ID 지원로그인 정보 백업/복구 기능로그인 정보 불러오기/내보내기 가능로보폼 로그인 정보 불러오기 가능

설치하고 로그인폼이 있는 웹사이트에 접속하면 이미지처럼 입력하는 곳에 회색 로고가 나타납니다.
정상적으로 로그인하고 Sxipper가 로그인 정보를 저장하게 합니다.
이제 다음에 다시 로그인할때 이미지처럼 로그인 정보가 표시됩니다. 클릭하면 아이디/비밀번호를 채워주고 자동으로 로그인됩니다.
동일 사이트에 여러개의 로그인 정보를 가지고 있다면 이렇게 보여줍니다.
로그인 설정 화면입니다. Show Passwords : 저장된 암호를 보여줍니다. Site Exceptions : 암호를 저장하지 않는 사이트를 추가하고 관리합니다. Import Roboform Passcards : 기존 로보폼 사용자의 패스워드를 불러옵니다. 개인적으로 너무 좋았습니다.. ㅠㅠ Export : .csv 파일로 내보낼수 있습니다. Import : .csv 파일을 불러옵니다. Enable OpenID Manager : 오픈ID 관리자를 활성화합니다.
일반 설정입니다. 별다르게 건드릴것은 없는것 같습니다. Send anonymous usage statistics to sxipper.com : 체크하면 사용정보를 익명으로 sxipper.com에 전송합니다. 이건 꺼두는게 좋겠죠.. ^^ Show logo in status bar : 상태표시줄에 로고 아이콘을 표시합니다. Local Data : 데이터를 백업하고 복구합니다.
2. Autofill Forms 미리 입력한 폼을 이용해 웹사이트의 폼들을 자동으로 채워주는 확장기능입니다. 폼이 있는 웹사이트에서 도구 메뉴의 버튼을 클릭하거나 Alt+J 단축키를 이용해 한번에 채워줍니다.
이렇게 비어있는 폼을..
원클릭이나 단축키로 요렇게 채워줍니다.
설 정 메뉴의 Simple 탭입니다. 왼쪽의 필드명과 상응하는 값을 채워주면 됩니다. 영문으로 되어있어도 폼의 속성값에 대응해서 채워지기 때문에 굳이 한글로 안바꾸셔도 되지만, 매치되는 필드가 없으면 이름도 비교하기 때문에 한글로 바꾸면 더 좋은 결과를 얻을것 같습니다.
Main 탭의 모습입니다. 폼과 관련된 여러가지 속성값을 추가/편집 할 수 있습니다. Name : 룰을 구분하는 이름입니다.Value : 폼필드에 입력되는 값입니다.Field rule : 룰이 어떤 필드값에 적용되는지를 결정합니다.Site rule : 특정 웹사이트에만 룰을 적용 할 수 있습니다. Fiel rule과 Site rule은 정규식을 사용하며, 비밀번호 필드는 원래 포함되어 있지 않지만 필요하다면 Field rule에 다음과 같이 넣어주시면 됩니다. (?:^passwd$)|(?:^password$)
Interface 탭 화면입니다. 폼을 채우거나 프로필을 전환하는 단축키를 지정 할 수 있네요.
폼을 입력하는 곳에 마우스 우클릭을 하고 Fill out this field를 선택하면 개별적으로 폼에 대응하는 값을 입력 할 수 있습니다.
Add a rule for this field를 선택하면 해당 폼의 속성값을 기존의 프로필에 추가 할 수 있습니다. 폼에 사용된 속성값을 알아내는데 유용합니다. 바로 아래에 있는 Add complete form as profile을 클릭하면 현재 폼에 입력된 값들로 새로운 프로필을 만들수 있습니다.

이상으로 로보폼이나 익스플로러의 알패스에 대응할만한 파이어폭스 확장기능을 간단히 살펴보았는데요. Sxipper 는 웹마나 아토처럼 완전 자동로그인 기능이 없어서 약간 아쉬웠지만, 기본에 충실한 관리 기능과 안정성에 높은 점수를 주고싶습니다. 몇 분정도만 사용해도 금방 익숙해지기 때문에 예전에 사용했던 로보폼이 생각나지 않더군요.. ^^; 그 리고 Autofill Forms의 경우는 파폭3 이상을 지원하는 폼관련 확장기능 중에 가장 유연한 성능을 보여주긴 했지만, 폼을 편집하거나 추가하는 부분이 한글화가 안되어 있어서 처음에 적응하기가 쉽지 않은것 같습니다. 로보폼에 비교했을때 100점중에 80점 정도 주고싶네요. 파폭을 쓰시면서 더 좋은 툴이나 방법이 있으면 댓글로 알려주세요~ ^^;
http://www.choboweb.com/entry/%ED%8C%8C%EC%9D%B4%EC%96%B4%ED%8F%AD%EC%8A%A4%EC%9D%98-%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C%EC%99%80-%ED%8F%BC-%EC%B1%84%EC%9A%B0%EA%B8%B0%EB%A5%BC-%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9C%BC%EB%A1%9C?category=24
by Anna 안나 2008. 10. 25. 23:47
여러가지 쓸만한 G메일 관련 그리즈몽키 스크립트를 합쳐 확장기능으로 만든 Better Gmail 2가 업데이트 됐습니다. 새롭게 추가된 기능으로는 다음 사항이 눈에 띄네요. 파이어폭스 3.0 지원HTML Signature (HTML 서명 넣기) <-- 언어를 영어로 선택해야 작동하네요.Filter Assistant (메시지창 안에서 필터 추가) <-- 이것도 언어가 영어일때 작동Gmail Redesigned 스킨
Gmail Redesigned 스킨은 정말 킹왕짱 멋집니다.. ㅎ
이밖에 Better Gmail 2의 쓸만한 기능을 보면..
Inbox Count First : 읽지 않은 메일 숫자를 탭 앞에 먼저 보여줍니다.
Add Row Highlights : 마우스 커서가 위치하는 메시지 줄을 하이라이트 시켜줍니다.
Attachment Icons : 첨부파일 종류를 아이콘으로 표현해서 쉽게 알아 볼 수 있습니다.
Folders4Gmail : 라벨을 트리 형식으로 관리 할 수 있습니다. Dad를 Family 하부 라벨로 넣으려면 Family/Dad 형식으로 라벨을 바꿔주면 됩니다.
그밖에.. Compose mailto: Links in Gmail : mailto 링크를 G메일로 연결해 줍니다. Hide Spam Count : 스팸 메시지 카운트를 숨겨줍니다. Hide Invites Box : G메일 초대 상자를 사이드바에서 숨겨줍니다. Macros, Macros Modified : 두 기능 모두 G메일에 몇가지 단축키를 더해줍니다. ?키와 h키를 누르면 도움말이 나와요. Gmail Blue와 Grays and Blues 스킨도 지원합니다.
파이어폭스와 G메일을 같이 쓰신다면 참 좋은 선택인것 같습니다.. ^^;
http://www.choboweb.com/entry/G%EB%A9%94%EC%9D%BC-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98-%EC%B6%94%EC%B2%9C-%EC%95%A0%EB%93%9C%EC%98%A8-Better-Gmail-2-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8?category=24
by Anna 안나 2008. 10. 25. 23:29
Stylish 확장 소개 및 다운로드 주소 : http://update.mozilla.or.kr/addons/?p=785&application=firefox&addonType=extension
https://addons.mozilla.org/ko/firefox/addon/2108

아래는 사이트 이용의 편리성, 파이어폭스 브라우저상에서의 표시문제해결, 개인적인 취향 등에
의해 작성하여 사용 중인 스타일들이다.

등록한 스타일들은 [파이어폭스 프로필폴더\stylish.rdf 파일]로 저장된다.
프로필 폴더가 여러개일 때도 stylish.rdf 파일만 복사 붙여넣기 하면 똑같이 적용된다. Daum카페 게시물 보기 페이지(bbs_read)에서
오른쪽에 붙어있는 '최신목록 목록 윗글 아랫글' 메뉴를 왼쪽으로 붙임.
(안 그럼 게시물에서 가로 스크롤바 생길 때 윗글, 아랫글 링크를 누르기가 불편해서.
'cafe155.daum.net'에서 숫자 부분이 카페마다 대부분 틀리기 때문에
자주가는 카페만 등록하여 사용.)
@-moz-document url-prefix(http://cafe155.daum.net/_c21_/bbs_read) {
#primary_content .list_btn div.listpage {float:left !important; padding: 6px 0px 0px 10px!important;}
} 티스토리 블로그 글쓰기창 가로 넓이를 540px에서 630px으로 넓혀줌.
(가로 600px 이미지를 주로 삽입하는데 가로 스크롤바가 생기는게 불편해서.
가로폭이 좁은 스킨에서는 바꾸지 않는게 좋음.)
'windspace.tistory.com'에 자신의 블로그 주소 입력.
@-moz-document url-prefix(http://windspace.tistory.com/owner/entry/) {
#tatterVisualEditor {width: 630px !important;}
} 네이버 블로그 메모로그 댓글에 스크롤바 생성. (안 그럼 댓글이 짤려서 다 못 봄.)
@-moz-document url-prefix(http://memolog.blog.naver.com/memoView) {
#CommentFrm {height: 500px !important;overflow-x:hidden !important; overflow-y:scroll !important;}
} 네이버 블로그 목록보기에서 태그 숨김.
(안 그럼 목록 제목이 태그 때문에 눈에 잘 안 들어와서)
@-moz-document url-prefix(http://blog.naver.com/) {
.listtbl .post-tag {display:none !important;}
} 올블로그 '블로그스피어스는 지금'칸 위에 '관심 가져주세요'칸을 덮어 씌움.
(단점 : '블로그스피어스는 지금'칸은 가려져서 볼 수 없게됨.)
@-moz-document url-prefix(http://www.allblog.net/) {
.issue_wrap {height:450px !important;}
.attPost {Position:absolute !important; top:100px !important;}
} 올블로그 '오늘 가장 많이 추천받은 글', '어제 가장 많이 추천받은 글' 스타일 약간 수정
(기존 연청색 줄무늬 바탕을 회색으로 변경.)
#most_favorite .list {height:280px !important;}
#most_favorite .list, #albling .contents li {background-color:#fff !important;}
#most_favorite .header h3 {background-image: url(http://files.allblog.net/img/i_upgrade.gif) !important;}
#most_favorite .list li {background-image: url() !important; padding-left: 5px !important;}
#albling .contents .image_wrap {display:none !important;}
#albling .contents .entry_wrap {width: 211px !important;padding-left: 0px !important;}
#albling .contents {border-left:1px solid #E0ECF4 !important;}
.read_ppl a {color:#B3C83F !important;font-weight:normal !important;}
} 조아라 만화작품 보기 페이지에 스크롤바 생성
(안 그럼 만화가 짤려서 다 못봄.)
@-moz-document domain("www.joara.com") {
#imagebook {overflow-x:hidden !important; overflow-y:scroll !important;}
}네이버 북마크 페이지 스타일 일부 변경.
(메모 내용 글씨 사이즈를 약간 키움.)
@-moz-document url-prefix(http://bookmark.naver.com/user/) {
#bookmark_comment {font-size:9pt !important; color:#666 !important;}
.gray02 {color:#3074A5 !important;}
} 네이버 블로그 안부게시판 글쓰기란에 회색 border 생성.
(안 그럼 글쓰기란과 그 외의 공간이 시각적인 경계가 없음.)
@-moz-document url-prefix(http://guestbook.blog.naver.com) {
#POSTEDITOR {border:solid 1px #ddd !important;}
} 싸이월드 뉴스 기사 페이지 오른쪽 메뉴 바탕색 변경
(기존 연청색에서 회색으로 변경.)
@-moz-document url-prefix(http://cynews.cyworld.com/) {
.news_section .mod_common04 { background:url('http://c1img3.cyworld.co.kr/img/cynews/bg_r_cmd02_btm.gif
') left bottom no-repeat !important; }

.news_section.mod_common04 .inner {background:url('http://c1img3.cyworld.co.kr/img/cynews/bg_r_cmd02_top.gif')left top no-repeat !important; }

.news_section .mod_common01 { background:url('http://c1img3.cyworld.co.kr/img/cynews/bg_r_cmd02_btm.gif
') left bottom no-repeat !important; }

.news_section.mod_common01 .inner {background:url('http://c1img3.cyworld.co.kr/img/cynews/bg_r_cmd02_top.gif')left top no-repeat !important; }
} 마가린 소셜 북마크 북마크 목록 스타일 변경.
(북마크 제목 크기 줄이고 검정색으로, 태그 파란색으로 변경. 기타 변경.)
@-moz-document url-prefix(http://mar.gar.in/) {
table:first-child {background-image:none !important;}
.header-title {color:#999 !important;}
#hiddenSection {border-bottom: 3px solid #d1d1d1 !important;}
.itemTitle {color:#212121 !important;font-size: 1.1em !important;}
#contentItem-section .itemsTitle {color:#212121 !important;font-size: 1.1em !important;}
.itemsTagTitle,.itemTagTitle {font: 0.9em '돋움',verdana !important; background-color: #efefef !important; border:1px solid #afafaf !important;color: #9f9f9f !important; padding: 2px 0px 0px 5px !important; margin-right: 7px !important;}
.itemsTag,.itemTag {color: #336699 !important;}
#contentItem-section span .nlbText {color: #666 !important;}
#contentItem-section .nlgText {color: #9f9f9f !important;font-size: 0.9em !important;display:block !important;width:70px !important;height:12px !important;overflow:hidden !important;white-space:nowrap !important;float:left !important;}
#contentItem-section a .postFunction {color: #666 !important;background-color: #eee !important;}
#contentItem-section .noText {color: #6f6f6f !important; text-decoration:underline !important;font-size: 1.1em !important;}
#contentItem-section .nextItem {height:16px !important;}
.itemNextLine5 {height:2px !important;}
} http://windspace.tistory.com/210
by Anna 안나 2008. 10. 25. 23:27
모질라 파이어폭스 폭스케 스타일
지난번에 폭스케 테마로 불여우 겉모양을 바꿔봤으니, 이번에는 관련 부가 기능을 이용해서 불여우 자체를 간단히 폭스케 스타일로 꾸며 보도록 하죠.

1. Foxkeh Theme를 설치합니다.
Foxkeh 테마를 설치해서 불여우 테마를 폭스케 스타일로 변경합니다.

2. フォクすけといっしょ 확장 기능을 설치합니다.
Hadakadenkyu가 만든 フォクすけといっしょ(폭스케와 함께) 확장 기능을 설치하면 아래 그림과 같이 불여우 인터페이스 배경 효과(북마크와 방문기록 사이드바, 부가 기능 관리자, 다운로드 관리자, 오류 정보, Mozilla Firefox 정보, 페이지 정보, 도구모음 설정)가 폭스케 스타일로 바뀌게 됩니다.

북마크 배경 / 방문 기록 사이드바 배경부가 기능 배경 / 다운로드 관리자 배경방문 사이트 오류 정보 배경 / Mozilla Firefox 정보창 배경페이지 정보 상단 배경 / 사용자 지정 도구모음 설정 하단 배경
3. 마지막으로 Jason Barnabe가 만든 Stylish 확장 기능을 설치한 다음 (불여우 재시작 필요), 추가로 About:Blank Firefox라는 Stylish용 스크립트를 설치('Load into Stylish' 단추 클릭)해서 about:blank(빈 페이지, 빈 탭, 새 탭, 작업 중 등) 배경을 폭스케로 바꿔줍니다.
Stylish용 about:blank 폭스케 스크립트는 찾아보면 몇 가지(About:blank - Foxkeh Side, About:blank Foxkeh - Front 등) 더 있으니 마음에 드는 걸로 적용하세요. 스크립트를 다룰 줄 아는 경우에는 직접 만들어서 사용해도 됩니다. 다양한 폭스케 이미지는 이곳으로.

Stylish용 사용자 스크립트로 변경한 about:blank 폭스케 배경
이상 끝.


꼬리)
모질라 일본에 폭스케 불여우 마스코트가 있다면, 모질라 중국에는 G-Fox라는 불여우 마스코트가 있습니다. G-Fox 테마도 있는데, 확장 기능 형식의 .xpi 파일이고 덩치도 큽니다. 압축을 풀어 대충 살펴보니 변경시키는 게 많은 것 같네요. 탭에는 반투명 효과가 있는 것 같습니다. 어쨌든 G-Fox 캐릭터는 귀여운데 테마는 제 취향이 아닌 것 같아 설치하려다 말았습니다.=ㅅ=아이폰/아이팟 터치용 폭스케 테마도 있습니다. 폭스케 가젯도 무지 귀엽네요.

http://ychur.tistory.com/261
by Anna 안나 2008. 10. 25. 23:26
Name : 제로보드
Language : PHP
설치형 게시판 중 가장 유명함. 다양한 스킨과 정보로 많은 사람들이 애용하는 중.
현재 배포중인 버전은 ZeroBoard4, ZeroBoardXE가 있습니다.
URL : http://www.zeroboard.com/



Name : 그누보드
Language : PHP
제로보드와 유사하면서도 기능면에 있어서는 제로보드보다 한단계 위라 할 수 있습니다.
하지만 커뮤니티쪽은 폐쇄적이라는게 좀 그렇죠.
URL : http://sir.co.kr/



Name : 테크노트
Language : PHP
제가 생각하기로 설치형 게시판 중 가장 뛰어난 프로그램이며 확장성은 대한민국에서 최고.
다만 초보자가 사용하기에는 너무 복잡하다는 단점이 있습니다.
URL : http://www.technote.co.kr



Name : GR보드
Language : PHP
신생(?)보드인데, 웹표준 등 개발자의 인식이 뛰어납니다.
현재 제작자가 군복무 중이며, 개발이 조금 더딘 점이 있습니다. 현재로서는 덩치가 가볍습니다.
URL : http://sirini.net



Name : 유니콘 보드
Language : JSP
URL : http://www.jakartaproject.com/



Name : IsBoard
Language : ASP
URL : http://www.isboard.net/



Name : 세팔보드
Language : CGI
예전에는 이용자가 정말 많았는데, 지금은 PHP에 뒤져서 사용자가 많이 줄었습니다.
현재 PHP 버전을 개발중이신 것으로 아는데, 정확한 일정은 알 수가 없네요.
URL : http://www.spcgi.com

http://jungkooki.byus.net/2113
by Anna 안나 2008. 10. 25. 11:18
1. 제로보드 (www.nzeo.com)  PHP+MySQL, 저작권 외부 표기 있음  설치형 게시판의 대표격이라 할 수 있을 만큼 두터운 사용자 층을 보유하고 있습니다. 제로보드 4.1 버전이 가장 많이 사용되고 있으며, 사용자가 많은 만큼 다양한 게시판 스킨과 플러그인이 있습니다. PHP와 MySQL이 지원되는 서버에서 사용이 가능하며, 외부에 저작권 표기를 해야 합니다.
2. 그누보드 (www.sir.co.kr)  PHP+MySQL(CUBRID), GPL 라이센스  제로보드와 함께 PHP 설치형 게시판의 양대산맥으로 꼽힙니다. 전문적인 지식을 가지고 있는 사용자가 많고, 제로보드에 비해 적긴 하지만 다양한 스킨이 공유되고 있습니다. MySQL 버전과 CUBRID 버전으로 나뉘어 배포되고 있으며, GPL 라이센스를 따르므로 저작권 표기가 자유롭습니다.
3. 알지보드 (www.rgboard.com)  PHP+MySQL, GPL 라이센스  앞서 언급한 두 게시판보다 유명하지는 않지만, 그래도 많은 사용자를 보유하고 있습니다. 카운터 등의 자체 내장된 애드온이 있어서 편리한 것이 특징입니다.
4. 미니보드 (www.mini-i.com)  PHP+MySQL, 저작권 외부 표기 자유 (소스내 표기 의무)  세련된 기본스킨과, 자체 내장되어 있는 아바타 애드온이 큰 장점으로 꼽힙니다. tinyMCE 웹에디터를 기본으로 탑재하고 있으며, 그 외 계층형 코멘트 지원과 AJAX 쪽지 시스템, 게시판 설정이 상당히 세분화 되어 있다는 것이 특징입니다.
5. 디자인보드 (www.designboard.net)  PHP+MySQL, 비영리 사용자에 한해 저작권 외부 표기 자유 (소스내 표기 의무)  타 게시판에서 주로 사용하는 GET 방식이 아닌 POST 방식을 택하여 좀 더 보안을 강화하였고, 음악플레이어인 디플레이어를 제공하여 앨범으로 사용하실 수 있습니다.
6. 정보드 (www.jungboard.com)  PHP+MySQL, 'GPL 라이센스
 빌더 개념이 적용된 게시판으로, 다양한 추가 기능이 있습니다. 최근 정식버전이 출시되어 관심을 받고 있는 게시판입니다.
7. 케이보드 (www.kport.co.kr)  PHP+MySQL, 저작권 외부 표기 자유 (소스내 표기 의무)  2004년 10월에 배포가 시작이 된 게시판으로, 가볍게 사용하실 수 있습니다. 심플한 관리자모드, 다양한 용도로 확장하기가 용이하다는 장점을 가지고 있습니다.
http://lch2090.tistory.com/5
by Anna 안나 2008. 10. 25. 11:16
※ 제가 사용하는 방법은 기본적으로 SMTP서버 가 지원되는 메일 계정과 PHP Gmail Drive를 사용할 시에는 CURL Extension이 설치된 호스팅 계정이 있어야 됩니다. 저 같은 경우 메일은 네이버에서 포인트를 모아 으뜸사용자가 되서 사용가능하고, PGD는 247ihost.com이라는 해외 무료 호스팅을 받고 있습니다. CURL Extension이 설치된 무료 호스팅은 해외에 상당수 있기 때문에 쉽게 찾으실 수 있으리라 생각됩니다.

기존에 Gmail을 웹하드 즉, 파일 저장 공간으로 사용하신 분들은 아마 대부분 Gmail Drive Extension 이나 Gspace, RoamDrive 등을 이용하셨을 겁니다. 하지만 이런 툴은 업로드 속도가 느리고, 장시간 트래픽 유발시 24시간 동안 계정이 정지당할 수 있다는 문제점이 있습니다.

그래서 이곳저곳 검색엔진을 뒤져 봤는데, 조금은 다른 방법을 알게 됐습니다. Gmail에 저장하고자 하는 파일을 자동 분할해서 SMTP를 통해 전송하고, Gmail로 받은 분할 파일을 자동으로 검색, 합치는 것입니다. 각각의 파일을 웹링크로 만들어서 Flashget 등의 다운로드 프로그램으로 받은 후에 합칠 수도 있구요. 자세한 내용은 글을 읽어보시면 이해가 좀 더 빠르지 않을까 싶습니다. 글이 좀 길어질 것 같아 3 부분으로 나누었습니다. *^^*

앞서 말한 방법을 실행에 옮기기 위해서는 Backup To Email(바로 다운로드), Peer2Mail(바로 다운로드) 이라는 프로그램과 이전에도 포스팅 한 적 있는 PHP Gmail Drive 스크립트가 필요합니다.

우선 Backup To Email(이하 'B2E')에 대해 소개하도록 하겠습니다. B2E는 Java로 짜여진 프로그램으로 설치를 하시면 아래와 같이 파일의 확장 메뉴에서 'Backup To Email' 이라는 메뉴가 생깁니다.


Gmail에 저장하고자 하는 파일을 선택한 후에 'Backup To Email'을 클릭합니다. 이 때, 자체적으로 파일을 분할 압축한 후에 전송하기 때문에 Gmail 최대용량 한도 내에서는 파일의 용량은 상관없습니다. 클릭하면 아래와 같은 화면이 나타납니다. Email Address 에는 파일을 저장할 Gmail 주소를 입력해줍니다.


입력한 후 Save를 클릭하면 아래와 같은 화면이 나타납니다.


이제 SMTP 서버를 설정해 줘야 합니다. Configuration -> Accounts를 클릭합니다. 이 설정 창에서 Email Address는 메일을 보낸 사람의 주소를 입력하시고, Outgoing Server에는 자신이 사용하는 이메일의 SMTP 서버 주소를 입력합니다. 저 같은 경우는 네이버 으뜸 사용자여서 네이버 SMTP 주소를 입력했습니다. 그리고 자신이 사용하는 메일환경에 따라 Requires Authentication (사용자 인증)을 체크한 후에 아이디와 패스워드를 차례대로 입력합니다. 마지막으로 Max attachment에 분할될 파일 하나당 용량을 설정합니다. 국내 이메일 서비스의 파일 첨부 용량을 고려했을 때 10000000 bytes (약 10MB)가 적당합니다. 테라메일 같은 경우 20MB도 가능하지만 TLS 방식을 사용해서 B2E에서는 설정이 불가능하더군요. 이 점은 상당히 아쉽기도 합니다. 물론, 조금 있다 설명할 Peer2Mail에서는 MAPI를 이용해서 가능할 것도 같습니다. Gmail은 첨부파일이 20MB까지 지원이 되는데 정작 그에 걸맞는 SMTP 서버를 국내에선 찾기가 힘드니까 말이죠. 개인이 서버를 돌리지 않는 한 말입니다.


이 제 모든 설정이 끝났습니다. Gmail에 저장하고자 하는 파일을 선택하고 업로드를 해봅니다. 앞서 설정했듯이 10MB 이상이 되는 파일은 아래와 같이 자동으로 파일명 뒤에 숫자를 붙여서 분할한 후에 전송합니다. 전송이 완료되고 나면 자동으로 삭제가 되구요. 분할 속도는 하드에 특별히 이상이 없는 한 꽤나 빠른편입니다. (^^;)


분할을 마치고 나면 아래와 같이 업로드가 이루어집니다. 네이버 SMTP의 경우 초당 1MB~2MB 정도는 나와주는 것 같더군요. 더욱이 분할 파일이 많아 순차적으로 많은 메일을 전송함에도 스팸으로 인식하지 않고 몇 백개씩 잘 보내줍니다. 심지어 여러개 파일을 동시전송도 가능합니다. 단, 이 경우에는 리소스를 많이 차지해서 자칫 컴퓨터가 뻗을 수도 있으니 1~2개 큰 파일을 전송할 때 사용하는 편이 좋을 것 같습니다.


※ B2E는 확장자가 exe인 파일은 자동으로 exe.mp3로 변경하여 업로드 합니다. 이유는 Gmail 측에서 exe 확장자 파일은 보안상 문제로 거부하고 있기 때문입니다.

이렇게 분할된 파일은 Peer2Mail과도 호환 이 되어서 Gmail 계정을 자동검색 후 다운로드와 동시에 합칠 수 있고, PGD를 통해 하이퍼 링크를 생성한 하고 다운로드 후 Total Commander나 WinRAR 등으로 직접 합칠 수도 있습니다. 또, B2E 메뉴에 있는 Merge Split Files를 통해서 합칠 수도 있습니다. 파일을 나누는 방식이 매우 단순하기 때문에 다른 프로그램과도 별 문제없이 호환이 됩니다. (^^!)


다음에 소개할 프로그램을 Peer2Mail(이하 'P2M')입니다. 이 프로그램은 그래도 Download.com에도 올라와 있더군요. P2M은 Gmail 뿐만 아니라 Walla, Yahoo에서도 사용이 가능합니다. 프로그램을 실행하면 아래와 같은 화면이 나타납니다.


우선 파일을 전송하기 위해서 설정을 해줘야 합니다. P2M에는 파일 전송 방법이 3가지가 있습니다. SMTP 서버를 이용하는 방법, 아웃룩(아웃룩 익스프레스 X) MAPI를 이용하는 방법, Direct Send라 하여 서버의 MX 레코드를 이용하는 방법입니다. SMTP 서버의 경우 B2M을 설정했던 것처럼 SMTP 서버정보와 계정 정보를 입력하고 Test Server...를 클릭해서 테스트를 한번 해주시고 OK 하시면 됩니다.


정확한 서버 주소와 아이디, 패스워드를 입력하시면 Success 표시가 뜨게 됩니다.


그 외에 방법에 대해서는 테스트를 하지 못했습니다. MAPI를 이용할 경우 아웃룩에 기본값으로 설정된 SMTP 서버를 통해서 파일을 전송할 수 있습니다. 전 PC에 아웃룩이 설치가 되어있질 않아서 테스를 못해봤습니다만, 이 경우 테라메일을 이용하면 20MB까지 첨부파일 전송이 가능할 것 같습니다.


설정이 끝나면 메인 창에서 Split/Send File 탭을 클릭하고 툴바에 있는 아이콘을 클릭하여 Plain Transfer를 선택합니다.

그럼 아래와 같은 창이 뜨게 됩니다. P2M은 B2M과 다르게 여러개의 파일을 대기열 목록에 두었다가 순차적으로 전송합니다. 즉, 여러개의 파일 선택이 가능합니다. 단, 최대 파일 용량 제한을 프로그램 자체적으로 10MB로 해놨기 때문에 10MB가 넘는 리스트에 있어도 전송이 되질 않습니다. 그래서 미리 파일을 분할한 후에 목록에 추가해서 전송을 해야 합니다. 이런 면에서 10MB가 넘는 큰 파일은 B2M으로 전송하는 것이 훨씬 편리합니다. 반면에 P2M은 10MB 이하의 사진이나 MP3 파일 등을 전송하는 데 편리합니다.


전송하고자 하는 파일을 여러개 선택합니다.


여러개의 파일이 선택되었습니다.


전송하고자 하는 파일을 선택하고 나면 아래와 같이 대기열 목록이 생깁니다.


이 상태에서 툴바에 있는 Send the segments...를 클릭하면 파일을 순차적으로 전송합니다.

P2M 역시 B2M 처럼 파일을 분할하고 합치는 데 있어서 도구를 제공하고 있습니다.


B2M 보다 조금 나은 기능이 있다면 분할하고 합치는 데 있어서 암호 설정이 가능하다는 겁니다.


자! 그럼 지금부터는 P2M으로 파일을 다운로드 받아보겠습니다. 앞서 언급했습니다만, P2M을 이용하면 분할된 파일을 자동으로 검색할 수 있고 다운로드가 완료되면 파일을 자동으로 합쳐줍니다. Browse 탭을 클릭한 후 Gmail 계정에 로그인 합니다.


로그인 하면 B2M이나 P2M 혹은 직접 다른 프로그램으로 분할해서 전송한 파일들이 보이실 겁니다.


툴바에 있는 Auto Download Segments...를 클릭합니다.


클릭을 하고 나면 Segment Manager가 뜨면서 현재 로그인 되어 있는 Gmail 계정 내에 있는 첨부 파일들의 리스트를 모조리 불러들입니다. 그런데, 이게 속도가 좀 많이 느립니다. 인내심이 많이 요구될 거라 생각됩니다. 더욱이 분할 파일이 많으면 많을수록 말이죠. 포럼에도 보면 이 문제에 대해서 개선을 요청하고 있는데, 다음 버전에 반영이 될지는 미지수입니다.


일부 파일을 다운로드 해보니 250~300KB/s 정도의 속도가 나오는군요. 그럭저럭 쓸만합니다. (^^;) 여담이지만 야후의 경우 메일이 무제한 용량인데, 첨부파일 다운로드 속도가 1MB/s도 넘었던 기억이 납니다. 다시금 테스트 해보고 싶은 의욕이 생기네요. 다만, 야후 메일은 메일이 잘 안간다는 게 문제이긴 합니다. (ㅡ.ㅡ^)


2. Peer2Mail 소개 및 사용법 닫기
이렇게 두 프로그램에 대해서 알아봤습니다. 저 같은 경우엔 CD 이미지 같은 파일을 B2M으로 전송한 후에 필요시에 P2M으로 다운로드 받고 있습니다. 마땅히 영구(?) 보관이 가능한 백업 장소를 찾지 못했기 때문에 Gmail을 택한건지도 모르겠군요.

지금까지는 B2M과 P2M의 소개와 사용법에 대해 말씀드렸는데요. 이번엔 B2M과 P2M 또는 웹메일, 메일 클라이언트로 전송한 첨부파일을 하이퍼링크 즉, URL을 통해서 바로 다운로드 받는 방법을 살펴보도록 하겠습니다. 이미 이에 대해서는 PHP Gmail Drive를 이용한 Gmail 첨부파일 웹 링크로 공유하기라는 글에서 설명을 하였습니다만 좀 더 보충을 하도록 하겠습니다. 고로 이전 글을 필히 읽어주시기 바랍니다.

3. PHP Gmail Drive로 하이퍼링크 만들기 닫기 아래 그림을 보시면 아시겠지만 이전 글에서 GSpace로 업로드 한 파일보다 B2M으로 업로드 한 파일의 디스플레이가 훨씬 나았습니다. 파일명이 일단 깨지지 않구요. 확인해보니 정상적인 메일의 첨부파일은 저렇게 나타나더군요. 물론, 한글 파일명의 경우에는 깨집니다. ('ㅇ')

테스트 : Gmail 계정에서 받는 P2MSetup.exe.mp3 (다른이름으로 저장)
이전 글에서 말씀 드렸듯이 여기서 직접 다운로드가 가능한데요. 링크에다 대고 다른 이름으로 대상 저장을 하셔도 되고 Flashget과 같은 다운로드 매니저로 받으셔도 됩니다. 그럼 여기서 생각해볼 수 있는 것이 파일 링크만 URL 목록으로 쭈~욱 만들 수 있다면 본인 뿐만이 아니라 다른 사람들 역시 편하게 파일을 다운로드 할 수 있다는 것입니다. 특히 Flashget의 경우에는 '드롭존' 기능이 있어서 URL을 그냥 드래그만 해도 다운로드가 가능하죠.


그런데 문제는 PGD가 첨부파일이 수십개 이상으로 넘어가면 계정 내에 있는 파일 전부를 리스트로 출력해주지 못한다는 겁니다. 안 그래도 느린데 말이죠. (ㅡ_ㅡ+)

하지만, 이는 리스트가 출력이 다 되지 않았다 뿐이지 계정에는 로그인이 되어있는 상태기 때문에 다른 파일 역시 다운로드 할 수 있습니다. 이럴 경우 주소 형식에 맞게 URL 생성해 주면 됩니다.

기본적으로 PGD가 생성하는 링크는
http://minilogue.247ihost.com/pgd/dl.php?a=0.1&m=11498978729f67cc&f=P2MSetup.exe.mp3&n=0

그러니까 http://yourdomain.com(도메인)/pgd(PGD가 설치된 폴더)/dl.php?a=0.1&m=th값&f=파일명&n=계정순서 로 이루어져 있습니다.

여기서 a=0.1이라는 값과 m=11498978729f67cc이라는 th값은 Gmail에 로그인해서 파일 첨부 정보를 보시면 나옵니다. 다운로드 링크의 속성을 봅니다.


아래와 같이 주소에 th값과 attid값이 있습니다.


그리고 n=0 이라고 하는 계정순서 값은 pgd 폴더 안에 있는 config.php에서 가져옵니다.

$gmail_user[0] = "google0@gmail.com(자신의 Gmail 주소)";
$gmail_password[0] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[1] = "google1@gmail.com(자신의 Gmail 주소)";
$gmail_password[1] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[2] = "google2@gmail.com(자신의 Gmail 주소)";
$gmail_password[2] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
즉, 위와 같이 계정을 설정했을 때, 자신이 링크하고자 하는 파일이 google0@gmail.com에 있다면 [값]을 n=값으로 해주는 것입니다. 여기서는 [0]이니 n=0이겠군요. 말 그대로 계정 순서 번호를 써준다고 생각하시면 됩니다.

자! 이제 다 끝났습니다. 첨부파일 하나하나의 th값을 확인해 야 된다는 게 좀 귀찮을 수도 있습니다만, 충분히 활용가능한 방법입니다. (^^!) Firefox에서 그리스몽키 같은 걸로 첨부파일만 따로 볼 수도 있을 것 같은데 아직 못 찾아봤습니다. Webma와 Maxthon에서 첨부파일 주소 추출을 시도해봤지만 한꺼번에는 안되더군요.

제 개인적으로는 빨리 Gmail이 무제한 용량이 되든지 아니면 GDrive와 같은 서비스가 나왔으면 좋겠네요. 하지만 얼마전에 보니 구글에서 구글내 서비스에 사용되는 HDD 용량을 팔고 있더군요. (>.<)/ 역시 무제한은 힘든건가 봅니다.
3. PHP Gmail Drive로 하이퍼링크 만들기 닫기
# 주의사항

1. Gmail 계정이 2.8GB가 되지만 실제로 파일을 올려보면 아시겠지만, HDD에서 사용하는 용량과는 차이가 있습니다. 그래서 2GB가 넘는 파일을 보낼 경우 계정 용량이 꽉 차서 메일이 돌아오는 경우도 있습니다. 고로 파일의 최대용량은 2GB 정도가 적당할 듯 싶습니다. DVD 이미지와 같은 큰 이미지들은 2GB로 잘라서 업로드 하시면 됩니다.

2. PGD에 너무 많은 계정을 설정할 경우 오류가 나서 페이지가 뜨지 않을 수도 있습니다. 더욱이 계정 내에 첨부파일이 꽉 차있는 경우는 더할 나위 없구요. 그렇기 때문에 계정은 2~3개 정도로 설정하시는 편이 좋습니다. 물론, 페이지가 뜨지 않는다 해도 URL로 바로 다운로드는 가능합니다. (^^!)

backup_to_email.exe P2MSetup.exe


http://futures.tistory.com/247
by Anna 안나 2008. 10. 25. 11:16
Use Google Storage Space as Google Drive Here I have some great little utilities (3 softwares and 2 web scripts) that you can try to use your Gmail account space as your external hard drive. You will be able to download (or should I say copy) attachments from your Gmail account to your computer just as you would do from a drive on your computer. You can also use this space to upload content direct from your computer and save it online in your Gmail account. 1. GMail Drive GMail Drive is third party addon for Windows that lets you use your Gmail account space as an extra drive on your computer. It allows a user to access a virtual drive stored in a Gmail e-mail account by causing the contents of the Gmail account to appear as a new network share on the user’s workstation. In order to use this add-on, the user needs a Gmail e-mail account. The add-on enables the user to use the standard Windows desktop file copy and paste commands to transfer files to and from the Gmail account as if it was a drive on the user’s computer. Download GMail Drive
사 용소감 : 1. Gspace보다 다소 느리고 시스템 stuck현상 발생, 2. 결정적으로 폴더를 생성할 수 없음(폴더 만들수 있는데 오른쪽 창에서 마우스 오클릭하여 "New"를 클릭하면 가능 3. GmailDrive나 Gspce 모두 Gmail 인박스에 수신 파일형태로 나타남 4. PHP Gmail Driver와 호환

2. GSpace (가장 추천하고 싶은 것)
GSpace is a firefox extension that turns your 3GB of your Gmail account into free <input name="IL_MARKER" type="hidden">online storage. With Gspace you can manage unlimited Gmail accounts to store all type of files within its simple, user friendly interface. You can also listen your favourite stored music directly from your Gspace, view your collections of pictures and manage your Gdrive files as well. Download GSpace
사용소감 : 1. 폴더 생성가능 2. 속도가 1번 보다 빠름 3. Firfox에서 돌기 때문에 보안성이 더 좋을 것으로 사료
3. GmailFS GmailFS or Gmail File System is a virtual file system developed by Richard Jones which allows users to mount and use their Gmail email account’s storage as a local disk drive. GmailFS is written for Linux, but Windows and Mac OS X ports do exist. Using GmailFS will provide the user with roughly three gigabytes of <input name="IL_MARKER" type="hidden">online storage. The speed of this filesystem is limited by the speed of the user’s Internet connection, and the upload/download speed of the Gmail server. Files can be any size, and are stored as (segmented) attachments. Download GmailFS
* 이것은 리눅스용(윈도용이 아님)이라서 실행 불가
4. G-Share G-Share is a PHP script that allows you to share your gmail attachments in a webpage, it is a download center with files stored in your Gmail account. You need a MySQL database to store data such as download counters, visitors, etc Download G-Share
테스트 안해봤음

5. PHP Gmail Drive PhpGmailDrive, also known as PGD, is an open source software program written in PHP to share Gmail file attachments on the web. PGD is based on GmailFS, a Gmail attachment file system that uses email subjects for organization. Download PGD
이것 역시 노 테스트
by Anna 안나 2008. 10. 25. 11:15
아마도 Gmail을 웹하드 용도로 그러니까 Gmail Drive나 GSpace, GmailFS와 같은 툴을 이용해 사용해보신 분들은 한번쯤 올려놓은 파일을 링크를 통해서 다른 사람과 공유할 수는 없을까 하는 생각을 해보셨을 겁니다. 그래서 지금부터 앞서 제목에서 언급한 PHP Gmail Drive(이하 PGD)를 이용한 첨부파일을 공유하는 방법을 알려드리고자 합니다. (^^;)

우선 PHP Gmail Drive를 이용하기 위해서는 첫번째, PHP 4.0 이상이 설치되어 있고 더불어 CURL Extension이 깔려있는 호스팅 계정이 있어야 합니다. 제가 사용하는 호스팅 계정의 경우에는 설치되어 있더군요. (^^!) 잘 모르시는 분들은 아래 PGD 설치파일을 다운로드하신 후에 계정에 올려놓고 pgd 폴더 안에 있는 diagnose.php 파일을 실행해 보시면 됩니다. PGD가 사용가능한 경우 6가지 항목에 passed가 뜨고 사용불가능한 경우에는 오류가 나게 됩니다.

두번째, Gmail 계정이 있어야 하고 위에 언급한 Gmail Drive나 GSpace, GmailFS 이 3가지 프로그램 중에 하나를 사용할 줄 알아야 합니다. 3가지 프로그램은 사용하시는 분이 상당히 많은 것으로 알고 있으니 간단히 검색만 하셔도 충분히 사용하실 수 있으리라 생각됩니다. 저의 경우에는 GSpace를 사용하고 있습니다.

그럼 PHP Gmail Drive를 먼저 설치해 보겠습니다.

1. PHP Gmail Drive 소스를 다운로드 합니다.

pgd-0.3.4.zip2. 압축을 푼 후 pgd 폴더를 통째로 계정에 업로드 한 후에 폴더 안에 있는 diagnose.php 파일을 실행시켜 봅니다. 사용이 불가능한 경우에는 호스팅 업체에 CURL extension 사용과 관련하여 문의를 하면 조치가 가능할 겁니다. (^^;)

사용불가시


Warning: dl(): Unable to load dynamic library './php_curl.dll' - ./php_curl.dll: cannot open shared object file: No such file or directory in /home/hosting_users/minilogue/www/pgd/diagnose.php on line 71

Warning: dl(): Unable to load dynamic library './curl.so' - ./curl.so: cannot open shared object file: No such file or directory in /home/hosting_users/minilogue/www/pgd/diagnose.php on line 71
Test 1 (curl extension): failed. It seems that you do not have CURL installed. You may read this for more infos on CURL in PHP.
사용가능시


Test 1 (curl extension): passed. Test 2 (curl http): passed. Test 3 (SSL via curl): passed. Test 4 (cookie set): cookie sent. Note: you have to tell your browser to accept this cookie in order to continue the test. Press here to continue.

Test 5 (cookie get): passed. Test 6 (PHP session extension): passed. If you have all 6 tests passed. You should have no problem installing and using gmail-lite and libgmailer.


3. pgd 폴더 안에 있는 config.php 파일을 자신의 Gmail 계정에 맞게 수정한 후 업로드 합니다.

단일 계정일 경우
$gmail_user[0] = "google@gmail.com(자신의 Gmail 주소)";
$gmail_password[0] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password

복수 계정일 경우

$gmail_user[0] = "google0@gmail.com(자신의 Gmail 주소)";
$gmail_password[0] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[1] = "google1@gmail.com(자신의 Gmail 주소)";
$gmail_password[1] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[2] = "google2@gmail.com(자신의 Gmail 주소)";
$gmail_password[2] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password

$maxAccounts = 3; //Number of accounts to be used
//To add an account, copy & paste
//$gmail_user[x] = "@gmail.com";
//$gmail_password[x] = ""; //Use your Own password
//replace them with the correct values and x is the number for the account..
//the number should be incrementing..0..1..2 etc. and should start with 0..

# $maxAccount 를 설정하신 후에 갯수에 맞춰서 계정을 입력하시면 됩니다. 복수 계정으로 PGD를 사용하는 경우 각 계정에 있는 파일들이 계정 구분없이 한꺼번에 나타납니다.

4. Gmail Drive, GmailFS, GSpace 등을 이용해 계정이 파일을 업로드 합니다. 공식적으로 PGD 홈페이지에서 밝히고 있는 것은 Gmail Drive와 GmailFS 입니다만, GSpace로 업로드한 파일도 잘 보이네요. (^^;)

5. 이제 다 끝났습니다. http://자신의 계정/pgd/index.php 를 불러오면 됩니다. 파일 다운로드시에는 '다른 이름으로 저장'을 하도록 합니다.


제가 설치한 PGD의 모습니다. GSpace로 업로드 하다보니 글자 일분이 잘려보이기도 합니다만 전혀 문제없습니다. (^ㅇ^;) 구경해보기

위 그림에서 gs1, gs2로 분할된 파일을 20MB가 넘기 때문에 자동을 분할 된 것이고 GSpace의 Preferences 항목에서 Join이 가능합니다.


현재 다운로드 속도를 테스트해보니 500~600kb/s 정도가 나오네요.

# PGD 사용시 유의사항

1. Gmail을 파일 서버로 사용하는 것은 약관에 위배되기 때문에 과도한 트래픽이 발생할 경우 계정이 24시간 동안 정지당할 수 있습니다. (저도 GSpace 사용하다 600MB 정도 사진을 업로드 했다가 하루 정지당한 적이 있습니다) 또, 사용에 따른 불이익은 본인에게 있습니다. (>.<)/

2. config.php 파일에 Gmail 계정 정보를 저장하기 때문에 보안상 위험할 수 있습니다. PGD 사용시에는 추가 이메일 계정을 만들어서 사용하시는 걸 추천합니다.

3. Gmail 서비스가 업데이트 되면 PGD 사용이 불가능해질 수 있습니다. PGD 홈페이지에서는 libgmailer.php 를 업데이트 하면 왠만큼 해결이 가능하다고는 합니다만, 제 경험상 몇 개월동안 사용이 불가능했던 적도 있었습니다. 즉, 지속적으로 사용이 가능할지는 미지수입니다. (ㅡ.ㅡ^)
by Anna 안나 2008. 10. 25. 11:15