월별 글 목록: 2004년 11월월

Gmail 로 moblog 시작!

이글루스에서도 모블로깅을 지원한다고 하고, inel 님의 모블로그를 보고 자극도 받아서..
저도 간단하게 나마 Gmail을 이용한 모블로그를 만들어 보았습니다.(상단버튼,사이드바에도 있음)

gmail 에 모블로그용 계정을 하나 만든후 (꼭 gmail 일 필요는 없겠지만.. 용량이 많아서.. ^^)
메일을 읽어오는 Reader 스크립트를 하나 만들었습니다. pop3 는 보안접속처리 때문인지 잘 되지가 않더군요.
그래서 GMailer for PHP 라이브러리를 이용해서 구현했습니다.

서버가 Window 인지라.. 그냥 윈도우 스케줄러를 이용 유휴시간에 한번씩 Reader 스크립트를 돌리게 했는데..
이 스케쥴러가 유휴시간은 도대체 어찌 체크를 하는지 지맘대로인 경우가 많군요 -_-; cron 으로 바꾸던지 해야할듯

하여튼 읽어다가 기존처럼 제로보드에 레코드 하나 추가하고, GD 를 이용해서 썸네일 만들어 줍니다.
PHP + GMail + 제로보드 + GD라이브러리 로 구현된 모블로그라고 해야겠군요.
제 핸드폰 애니콜 SCH-E200 과 Clie TH55 에서 보내보니 잘 받아 지네요. 단 클리에일경우 한글이 깨집니다. 쩝..

송신자 필드 분석해서 스팸도 막고 해야겠지만, 일단 아무데도 안 알린 계정이니 문제는 없을듯 합니다 🙂

흠.. 문제는 포토메일을 보내는데 드는 패킷요금이군요 -_-;
핸폰사진한장 보통 25000바이트, 512바이트당 6원이니까 25000/512=48*6=288, 포스팅 하나에 약 300원 드는거군요.
여러분께선 모블로그에서 글당 최소 300원의 가치를 지니는 글을 보고 계신겁니다. 🙂

혹시 필요하신분들을 위해 소스를 공개합니다. 막코딩인거는 아시죠 🙂
제로보드가 아닌 다른 게시판및 툴을 사용하신다면 수정이 좀 필요합니다..

[#!_이메일 읽어오기용 gmail_reader.php 소스보기.. ▽|그만 볼래요.. △_!#]


<?

 
require("libgmailer.php");

 

 
$gm = new GMailer();

 
$gm->setLoginInfo("gmail 아이디", "gmail 암호", "GMT+9"); // GMail 계정정보

 

 
if ($gm->connect()) {

  
$gm->fetchBox(GM_STANDARD, "Inbox", 0); // 수신함

  
$snapshot = $gm->getSnapshot(GM_STANDARD);

  if (
$snapshot) {

   for (
$i = 0;$i < $snapshot->box_total ; $i++ )

   {

    if (
$snapshot->box[$i]["is_read"] == 1) // 안읽은 메일만

    
{

     
$gm->fetchBox(GM_CONVERSATION, $snapshot->box[$i]["id"], 0);

    
$conv = $gm->getSnapshot(GM_CONVERSATION);

     

     
// 제목,내용,첨부파일,받은날짜 빼오기

     
$subject = $conv->conv[0]["subj"];

     
$body = $conv->conv[0]["body"];

     
$filename = $conv->conv[0]["attachment"][0]["filename"];

     
$recvdate = strtotime($conv->conv[0]["dt"]);

     

     
// 인코딩변환

     
$subject = mb_convert_encoding($subject, "EUC-KR", "UTF-8");

     
$body = mb_convert_encoding($body, "EUC-KR", "UTF-8");

     
// 파일이름은 현재시간

     
$filename = urlencode(time().".jpg");

         

      
// 첨부파일 받기 - 자신의 서버에 attachment_down.php 위치지정

      
$dlfile = "http://myserver.com/attachment_down.php";

          

     
$addr = $dlfile."?a=".$conv->conv[0]["attachment"][0]["id"]."&m=".$conv->conv[0]["id"]."&f=$filename";

     

     
$fp = fopen($addr,'r');

     while(!
feof($fp)) {

       
fread($fp, 100*1024);

       
flush();

      }

      
fclose ($fp);       

     

     
// SKT 메일 앞부분 잘라내기 - 혹시.. KTF 이신분들은 수정필요 :)

     
$body =str_replace("<b><font color=\"red\">회신시 NATE.com의 폰넘버메일로 전달됩니다.</font></b>","",$body);

     
$body =str_replace("<br /><br>","",$body);

     

     
// 이미지 크기 조정

     // Thumbail : 150 X 113 , 파일명앞에 s_

     // 원본이미지 : 448 X 336

      

      
make_thumbnail_image(150,113,$filename,"./img/s_".$filename);

      
make_thumbnail_image(448,336,$filename,"./img/".$filename);

      

      
// 원본삭제

      
unlink($filename);

      

      
// 제로보드에 기록하는 함수

      // 제로보드를 안쓰시는분들은 아래 제목,내용,날짜,파일이름을 가져다 쓰세요.

     
write_to_zb($subject,$body,$recvdate,$filename);

    }    

   }    

  }    

  
$gm->disconnect(); // 연결끊기 

 


  

// 썸네일 만들기

function make_thumbnail_image($x,$y,$src_filename,$dst_filename) {

 
$img_info = getimagesize ($src_filename);

 if (
$img_info[2] =="2") {    

  
$src_image=ImageCreateFromjpeg($src_filename);

    

  
$dst_image = ImageCreateTrueColor($x, $y);

  

  
ImageCopyResized($dst_image,$src_image,0,0,0,0,$x+1,$y+1,$img_info[0],$img_info[1]);

  
Imagejpeg($dst_image,$dst_filename,90);

  
ImageDestroy($dst_image);

  
ImageDestroy($src_image);

  

  return
$dst_filename;

 }

}

// 제로보드에 기록하기

// 중요!! : 바로 이전글의 내용을 참조해서 기록하는 방식이므로, 게시판에 글 한개는 무조건 있어야 합니다!

function write_to_zb ($subject,$memo,$recvdate,$sitelink1)

{

 
$dbconn = mysql_connect("DB서버","mysql계정","mysql암호"); // 자신의 mysql dbsetting

 
$status = mysql_select_db("DB명",$dbconn);  // 자신의 mysql db명

 

 
$id = "moblog"// ZeroBoard 게시판 이름

 

 // 마지막 글 정보 읽어오기

 
$sel_query = "select division,headnum,no,ip,password,name,homepage,email,category,is_secret,use_html,ismember,islevel from zetyx_board_".$id." order by no desc";

 
$result = mysql_query($sel_query,$dbconn);

 
$res = mysql_fetch_row($result);

 

 
$sel_query3 = $sel_query;

 

 
//$reg_date = time();

 
$reg_date = $recvdate;

 
$sel_query = "insert into zetyx_board_".$id."(";

 
$sel_query = $sel_query." division,headnum,prev_no,next_no,ip,password,name,homepage,email,category,";

 
$sel_query = $sel_query." is_secret,use_html,ismember,islevel,";

 
$sel_query = $sel_query." subject,reg_date,sitelink1,sitelink2,memo) values(";

 
$sel_query = $sel_query." $res[0],$res[1]-1,0,$res[2],'$res[3]','$res[4]','$res[5]','$res[6]','$res[7]',1,";

 
$sel_query = $sel_query." '','2',$res[11],$res[12],";

 
$sel_query = $sel_query."'$subject',$reg_date,'$sitelink1','','$memo')";

 

 
$sel_query2 = $sel_query;

 
$result = mysql_query($sel_query,$dbconn);

 
$res_val = mysql_affected_rows();

  

 
$sel_query = "update zetyx_admin_table set total_article=total_article+1 where name='".$id."'";

 
$result = mysql_query($sel_query,$dbconn);

 

 
$sel_query = "select no from zetyx_board_".$id." order by no desc";

 
$result = mysql_query($sel_query,$dbconn);

 
$res_l = mysql_fetch_row($result);

 

 
$inserted_no = $res_l[0];

 

 
$sel_query = "update zetyx_board_".$id." set prev_no=".$res_l[0]." where no=".$res[2];

 
$result = mysql_query($sel_query,$dbconn);

 

 
$sel_query = "update zetyx_board_category_".$id." set num=num+1 where no = 1";

 
$result = mysql_query($sel_query,$dbconn);

 

 
$sel_query = "update zetyx_division_".$id." set num=num+1 where no = 1";

 
$result = mysql_query($sel_query,$dbconn);

 

 

}

?>



[#!_END_!#]
[#!_첨부파일 다운로드용 attachment_down.php 소스보기.. ▽|그만 볼래요.. △_!#]


<?php

 
require_once("libgmailer.php"); 

 

 
$attid = (isset($_REQUEST["a"]))? $_REQUEST["a"] : 0;

 
$mid = (isset($_REQUEST["m"]))? $_REQUEST["m"] : 0;

 
$fname = (isset($_REQUEST["f"]))? $_REQUEST["f"] : 0;

 

 if (
$attid && $mid && $fname) {

  
$gm = new GMailer();

   
$gm->setLoginInfo("gmail 아이디", "gmail 암호", "GMT+9"); // GMail 계정정보

  

  
if ($gm->connect()) {  

   

   
header("Content-Type: application/octet-stream");

   
header('Content-Disposition: attachment; filename="'.$fname.'"');

   
$gm->getAttachment($attid, $mid, $fname);   

   exit();

  }

 }

 echo
"Download error.";

?>

[#!_END_!#]

아우.. 챙피해라

7년만에 토익시험을 보러갔습니다.
대학 졸업할때 취득제한때문에 몇번 보고선 거의 신경써본 적이 없었거든요.

근데.. 시험장에서 답안지 받고나서 이름이랑 주욱 마킹하고 나서 주위를 살펴보니..
컴퓨터용 싸인펜으로 하면 안된다네요 ? 무조건 컴퓨터용 4B 연필로 해야한답니다. -_-;;;
싸인펜만 달랑 들고 시험보러 왔는데.. 이걸 어쩌나.. 수험표좀 자세히 보고 올껄.. T_T
연필 2자루 가져오신분께 하나 겨우 빌려서.. 답안지에 새로 수험번호 마킹하다가 또 틀렸어요. 흑..
지우개가 없으니 새로 한장 주세요 했더니.. 시험감독관 눈빛이..

머 이런인간이 다 있누.. 시험 첨 보나..

더군요. 집근처가 시험장이어서 줄무니 츄리닝 차림에 떡진머리로 나간지라 더욱 가관이였을듯.
지우개는 뒷분께 조금 잘라 달라해서 대충 보긴 봤습니다.

요즘 토익점수대가 엄청높아졌다는데, 얼마나 나올까 모르겠군요.

생과자 (센베) 이름붙이기

생과자~

어릴때 집에 손님들이 오실때 간혹 사오던 것중 반가운것이 바로 생과자(센베,センベイ) 였습니다.
일반 과자랑은 분명 다른맛 이였거든요. 금방 구운듯한 과자의 맛때문에 늦게라도 손님이 오시면..
자다가도 벌떡 일어나서 하나쯤은 먹어야 잠을 청할수 있었죠. ( 저.. 예전에 한 덩치 했답니다. )

그동안엔 가끔 트럭에서 파는 걸 볼때마다 조금씩 사오곤 했는데, 언제부턴가 지하철역에 있는 가게에서
팔기 시작했네요. 그래서 왕창 사온김에 사진찍어 놓고 이름을 붙여봤습니다. 원래 이름이 뭔지는 알수가 없네요.

근데 이름까지 붙인이유는 ? 저희집에 오는 친구들한테 이 글 보여준후, 찍어서 뭐뭐 사오라 시키기 위함입니다. -_-+

장기알

달달한 테두리가 쩍쩍 붙지만, 씹히는 맛이 좋죠.
크기가 장기의 王이랑 비슷해서 장기알 이라고 부릅니다. 물론 저만.. -_-;

생강맛 전병, 계피맛 전병

이렇게 길쭉한 것들을 전병이라 부르나 보군요. 옥션에서도 그렇게 파는분이 계시네요.
하얀것은 생강맛 , 갈색을 띄는것은 계피맛 전병입니다. 전 시나몬 향 자체를 좋아해서 갈색이 맛있습니다만, 생강맛도 의외로 괜찮습니다.

밤형과자

밤처럼 생겨서 안에는 하얀 팥앙금이 들어있는 과자입니다.
금방 나온 뜨끈한걸 먹으면 정말 맛있죠. 어릴때 가장 좋아하던 과자입니다.

삼색웨하스

생긴것이 딱 웨하스입니다. 안에 하얀부분이 마쉬멜로우처럼 조금 부드럽다는것만 빼면요.

눈사람

아령비슷하게 생겼는데 하얀색이니까 눈사람. 안에는 양갱과 비슷한 팥앙금이 들어있습니다. 맛있음.

바나나맛 과자

웨하스크기로 잘려있지만, 안에 바나나맛 크림이 들어있습니다.
이건 확실히 예전보다 맛이 떨어지네요. 크림이 달라진듯.

부채형 전병

부채모양으로 생긴 전병입니다. 보통 김붙은것,땅콩붙은것,아무것도 안붙은것 3가지가 있는데,
제가 가는곳엔 김붙은것만 팔더군요. 어차피 김붙은것이 가장 맛있습니다

과일젤리

귤 모양, 수박모양 젤리입니다. 이건 너무 달아서 쓴맛이 느껴지더군요 -_-; 전 별로 안추천

미니전병

색깔이 여러가지 입니다만, 각 색깔의 특별한 맛차이는 모르겠네요. 하얀색은 생강이라 튀지만, 나머지는 그럭저럭입니다.
근데 어째 사진이 꼭 건담에 나오는 비행체(덴드로비움?) 같네요 -_-;


오란다

제가 찍은건 아니지만.. 제가 요즘 가장 좋아하는 과자입니다.
이건 아예 따로 봉지째 사다먹기때문에 같이 사오진 않았습니다.
맥주안주로도 좋고,그냥 슬슬 먹어도 좋답니다. 단! 이빨에 많이 끼거나 붙습니다. -_-;

주관적인 판단으로 맛평가를 내리면..

오란다 > 장기알 > 밤과자 > 전병류 > 눈사람 > 바나나 > 삼색웨하스 > 과일젤리

입니다. 자, 우리집에 혹시 올 친구들 참조하시게나~

뱀다리.. 작은사진에도 주소를 넣었더니, 꼭 제 홈이 과자파는 사이트 같군요. 저.. 과자 안팝니다. -_-;

이상하게 바쁜 연말, 그리고 잡담

갑자기 무지 바빠져 버렸네요. 진행중인 프로젝트도 연말까진 끝을 내야하고..
만들어 보고 싶은 보드게임 몇개가 있는데, 도무지 시간이 나질 않고..
연말이 가기전에 해보고 싶은게 몇가지 있지만, 주말약속들이 꼬리를 물고 있어서 쉽지않네요.
RSS 리더에 못읽은 글들이 쌓여가는데.. 읽기도 쉽지 않군요.

어느새 제 블로그의 Bloglines 구독자가 58분으로 늘었군요. 태터나 기타 리더기로 보시는분까지
합치면 더욱 많을듯 하네요.. 후아.. 볼것도 별루 없는데 -_-;
그냥 저 좋아서 하는 블로깅이지만.. 이것도 약간씩 부담을 느끼게 되는군요. 워낙 글을 못써서..

하루 방문자가 거의 300-500 이라고 나오는데, 주로 검색엔진(구글,네이버,다음)을 통해서 오는분들이 많네요
여담인데 엠파스,알타비스타는 80포트 안쓰는 홈피는 봇이 안들어가나 봅니다. 가서 아무리 검색을 해봐도 안나오는군요. 🙂
하여튼 들어오시는분들 주 검색어는.. 콩나물밥, 캘리포니아 롤, 불닭, 다빈치코드, Gmail, 초밥 등등 이군요.
콩나물밥은 도대체 어디서 말이 나온건지.. 검색어 1순위를 달리고 있습니다. 신기합니다.
최근에 올렸던 삼성 Miniket 이 로그에 많이 등장하는것으로 봐선.. 이것도 여기저기서 관심을 끌고 있는거 같네요.
그리고 외국쪽에선 RG Animation Studios 와 Firefox Extension 으로 검색해서 들어오시는 분들이 아주 많군요.
들어오셨다가 실망만 하고 가시는건 아닐런지.. -_-;

괜시리 손대버린 드래곤 라자 때문에 하루하루 재미는 납니다만, 하루가 너무 빨리 지나가 버리네요 🙂

아.. 이제 다시 코딩해야겠네요. 커피먹으면서 끄적여 보는 잡담이었습니다.

Game과 RSS의 만남 : Xbox용 Halo 2 RSS 지원

XBOX 사용자들에게 필수 게임으로 알려진 Halo 2. 이 게임의 제작사인 Bungie가 XBox 온라인 상에서
Halo 2 게이머의 활동상을 RSS 로 Feeding 해주는것을 지원해주기 시작했습니다. { via DaveXtreme}

Dave 가 플레이한 Feed 를 보시면 알수 있겠지만, 언제 누구와 팀플을 했는지와
Score, Kills, Deaths, Assists 등 자신 또는 팀원들의 점수가 얼마인지까지 보여주는 RSS Feed 가 생성이 되는군요.
( 먼저 Xbox Online 의 GamerTag 와 자신의 Microsoft Passport ID를 연결해 주는 작업이 필요합니다. )

아주 이채로운 시도 인것같습니다. MMORPG가 활성화된 우리나라에서도 온라인게임에 적용이 된다면,
그 사람이 게임에서 무슨 일을 했는지를 보여주는 로그가 될수도 있겠네요.
물론 서버에 무리가 갈수도 있고, 렙업 노가다만 주욱 적혀있을지도 모르지만요 🙂