<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>Jaemok</title>
    <link>http://jmjeong.com</link>
    <description>jmjeong, Jaemok Jeong</description>
    <pubDate>Wed, 09 Jun 2010 02:16:35 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Gmail 메일 정리하기</title>
      <link>http://jmjeong.com/blog/purgegmail</link>
      <pubDate>Tue, 17 Nov 2009 14:19:00 KST</pubDate>
      <category><![CDATA[python]]></category>
      <category><![CDATA[mail]]></category>
      <guid isPermaLink="true">http://jmjeong.com/blog/purgegmail</guid>
      <description><p>
회사 메일을 forward 하여 보는 용도로 사용 중인 gmail 계정이 최근 quota가 다 찼다.  2007년 9월부터
forward를 시작했으니 2년 3개월 동안 7392M를 사용했다.
</p><p>
Gmail이니 혹시 soft quota가 적용되어서 경고 메시지는 보여주되 메일을 받아주거나, 혹은 upgrade 요청
popup등이 뜨지 않을까 생각했었는데, 애초 생각했던대로 quota exceed 경고를 보내주고 메일을 반송했다.
</p><i>Read more...</i></description>
      <content:encoded><![CDATA[
<div id="outline-container-1" class="outline-2">

<div class="outline-text-2" id="text-1">
<p>
회사 메일을 forward 하여 보는 용도로 사용 중인 gmail 계정이 최근 quota가 다 찼다.  2007년 9월부터
forward를 시작했으니 2년 3개월 동안 7392M를 사용했다.
</p>
<img src="http://grab.by/C8a" />
<p>
Gmail이니 혹시 soft quota가 적용되어서 경고 메시지는 보여주되 메일을 받아주거나, 혹은 upgrade 요청
popup등이 뜨지 않을까 생각했었는데, 애초 생각했던대로 quota exceed 경고를 보내주고 메일을 반송했다.
</p>
<img src="http://grab.by/C89" />
<p>
백업 목적의 메일이니 몇 년전 메일을 지우려고 하는데 gmail 인터페이스에서 한꺼번에 지우는 방법을 찾을
수가 없었다. offlineimap이나 gnus에서 처리하는 방법도 데이타를 다 받아와야 해서 속도가 느린 문제가
있다.
</p>
<p>
간단한 python 프로그램을 만들어서 특정날짜 이전의 메일은 삭제하도록 했다. IMAP4 protocol에 
<code>(before '02-Jan-2008')</code>과 같이 해당 날짜 이전의 메일에 대해서만 읽어오는 인터페이스가 유용했다.
</p>
<ul>
<li>
첫번째 버젼 : <a href="http://gist.github.com/236756">http://gist.github.com/236756</a>
<dl>
<dt>문제점</dt><dd>
테스트할 때에는 전체 보관함에서 메일이 없어서 정상적으로 삭제되었다고 생각했는데, 실제
quota는 늘어나지 않는다. Gmail의 특성상 메일이 삭제하면 실제 mail을 삭제하는 것이
아니고, 해당 메일에서 라벨만 제거하는 식으로 동작을 한다.  메시지를 '휴지통'으로 이동한
후, 휴지통에서 삭제하는 방법을 사용해야 한다.
</dd>
<dt>개선점</dt><dd>
Verbose tag가 없으면 빠른 처리를 위해 store에 <code>message id</code> set을 넘겨서 한꺼번에
처리하는 방법이 나을 것 같다.

</dd>
</dl>
</li>
<li>
수정버젼



<script src="http://gist.github.com/236838.js"></script>
</li>
</ul>
</div>
<div id="outline-container-1.1" class="outline-3">
<h3 id="sec-1.1">읽어볼만한 글 </h3>
<div class="outline-text-3" id="text-1.1">
<ul>
<li>
<a href="http://bugs.python.org/issue1389051">python 2.5.1의 imap4_ssl library bug &amp; patch</a>
</li>
<li>
<a href="http://www.doughellmann.com/PyMOTW/imaplib/">imaplib - IMAP4 client library</a>
</li>
</ul>
</div>
</div>
<div id="outline-container-1.2" class="outline-3">
<h3 id="sec-1.2">Comments <span class="timestamp-wrapper"> <span class="timestamp">2009-12-04 Fri</span></span> </h3>
<div class="outline-text-3" id="text-1.2">
<p>
Gmail을 이용하는 장점 중에 하나가 대용량, 빠른 검색이므로 굳이 메일을 정리하지 않고, 
별도의 계정을 만들어서 pop3로 데이타를 읽어서 저장하는 것도 방법일 것 같다. 
</p>
<p>
독립된 자기 domain을 가지고 있는 경우에는 최대 100개의 account를 만들 수 있고, 
그렇지 않은 경우에도 신규 가입이 자유롭기 때문에 backup archive 계정을 만들고
<code>다른 계정에서 메일 가져오기</code> 기능을 이용하여 pop3로 backup을 하는게 더 낫다.
</p>
<p>
네트웍 속도에 가변적이겠지만, 대략 5분에 200통 가량 옮겨오고 있다.
</p>
<p>
Gmail 계정은 이론상 무한정으로 만들 수 있으므로, 메일을 archive하는 submail 계정을 만들어서,
이쪽으로 메일 내용을 옮기는게 더 좋다. <code>환경설정</code> - <code>계정</code> - <code>다른 계정에서 메일 가져오기</code>를
선택하여 POP3로 메일을 옮겨온다. 추후 예전 메일 검색은 archive된 계정에서 검색을 하면 된다. 
</p>
</div>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Python 관련</title>
      <link>http://jmjeong.com/blog/python</link>
      <pubDate>Wed, 23 Sep 2009 11:29:00 KST</pubDate>
      <category><![CDATA[python]]></category>
      <guid isPermaLink="true">http://jmjeong.com/blog/python</guid>
      <description><p>
Python 2.x의 unicode 변환을 이해했다고 생각했는데, 가끔 encoding, decoding 관련 에러를 만난다. 
아직 python에서 인코딩, 디코딩 개념을 잡지 못해서 그런 듯&hellip;
</p><p>
한번 정리를 해 보자. 
</p><i>Read more...</i></description>
      <content:encoded><![CDATA[
<div id="outline-container-1" class="outline-2">

<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-1.1" class="outline-3">
<h3 id="sec-1.1">Python에서 unicode encoding </h3>
<div class="outline-text-3" id="text-1.1">
<p>
Python 2.x의 unicode 변환을 이해했다고 생각했는데, 가끔 encoding, decoding 관련 에러를 만난다. 
아직 python에서 인코딩, 디코딩 개념을 잡지 못해서 그런 듯&hellip;
</p>
<p>
한번 정리를 해 보자. 
</p>
<p>
Pycon 2008에서 발표된 <a href="http://farmdev.com/talks/unicode/">Unicode in Python</a> 자료가 설명이 잘 되어 있다. 한글 관련해서는 <a href="http://biohackers.net/wiki/PythonAndHangul">PythonAndHangul Wiki</a>, <a href="http://kldp.org/node/81708">KDLP 한글 관련 질문</a>도 읽어볼만 하다. 간단히 요약을 하자면&hellip;
</p>
</div>
<div id="outline-container-1.1.1" class="outline-4">
<h4 id="sec-1.1.1">Unicode &lt;-&gt; String와 스트링 사이의 변환 </h4>
<div class="outline-text-4" id="text-1.1.1">
<p>
유니코드를 문자열로 변환하는 것을 <b>인코딩</b>이라하고, 문자열을 유니코드로 변환하는 것을 <b>디코딩</b>이라고
한다.  인코딩이란 어떤 규정된 형식으로 변환하는 것을 의미하며, 디코딩은 다시 원래의 정보를 보는 것을
의미한다. 어떤 유니코드를 UTF-8 문자열로 인코딩했다고 함은 UTF-8의 규정된 형식으로 정보를 변환했다는
의미이다. 유니코드 세계에서는 유니코드로 변환하는 것이 디코딩이다. 
</p>
<p>
프린트를 할 때에는 콘솔창이나 output의 인코딩에 따라서 encode()를 해 줘야 한다.
</p>
<p>
유니코드로의 디코딩 방법은 다양하다
</p>
<ul>
<li>
u"" : 문자열 따옴표 앞에 u를 붙인다. 이 경우, 현재 사용되고 있는 charset 또는 소스코드의
인코딩으로 자동 디코딩된다
</li>
<li>
unicode(str, charset)
</li>
<li>
str,decoe(charset)

</li>
</ul>
<p>인코딩 방법은 유니코드 객체에 encode 메소드를 호출하여 charset 인수와 함께 사용한다.
</p>
<ul>
<li>
euc-kr 문자열를 utf-8로 변환하려면 <i>uncode(content, 'euc-kr').encode('utf-8')</i>로 쓰면 된다. 
</li>
</ul>
<p>content의 항목의 문자열이 'euc-kr'로 encoding되어 있는데 이 것을 utf-8로 변환한다.
</p></div>
</div>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Emacs에서 Python mode setting</title>
      <link>http://jmjeong.com/blog/pythononemacs</link>
      <pubDate>Wed, 02 Sep 2009 18:22:00 KST</pubDate>
      <category><![CDATA[python]]></category>
      <category><![CDATA[emacs]]></category>
      <guid isPermaLink="true">http://jmjeong.com/blog/pythononemacs</guid>
      <description><p>
Emacs 23에 emacs에서 built-in으로 존재하는 python.el과 Python Distribution에서 배포 중인 python-mode.el 모드
두개가 존재한다. EmacsWiki와 mailing list에 한참 두개를 통합하자는 논의가 있었는데 결론이 아직 안 난듯하다. 
License issue로 한참 이야기 중이던데, 최근 받아본 python-mode.el은 GPL v3.0으로 되어 있는걸 보면 해결 기미가
보이는 것 같기도 하다. 
</p><p>
결론적으로는 python-mode.el과 ipython을 사용하기로 했다. 아직 todo로 pdb와 ropemacs 세팅이 남아
있는데 당분간은 이대로 써야겠다.
</p><i>Read more...</i></description>
      <content:encoded><![CDATA[
<div id="outline-container-1" class="outline-2">

<div class="outline-text-2" id="text-1">
<p>
Emacs 23에 emacs에서 built-in으로 존재하는 python.el과 Python Distribution에서 배포 중인 python-mode.el 모드
두개가 존재한다. EmacsWiki와 mailing list에 한참 두개를 통합하자는 논의가 있었는데 결론이 아직 안 난듯하다. 
License issue로 한참 이야기 중이던데, 최근 받아본 python-mode.el은 GPL v3.0으로 되어 있는걸 보면 해결 기미가
보이는 것 같기도 하다. 
</p>
<p>
결론적으로는 python-mode.el과 ipython을 사용하기로 했다. 아직 todo로 pdb와 ropemacs 세팅이 남아
있는데 당분간은 이대로 써야겠다.
</p>
<pre class="src src-emacs-lisp"><span style="color: #b22222;">;; </span><span style="color: #b22222;">python mode
</span>(load <span style="color: #8b2252;">"python-mode"</span> nil t)
(autoload 'python-mode <span style="color: #8b2252;">"python-mode"</span> <span style="color: #8b2252;">"Python editing mode."</span> t)

(setq auto-mode-alist (cons '(<span style="color: #8b2252;">"\\.py$"</span> . python-mode) auto-mode-alist))
(setq interpreter-mode-alist (cons '(<span style="color: #8b2252;">"python"</span> . python-mode)
                                      interpreter-mode-alist))
(autoload 'python-mode <span style="color: #8b2252;">"python"</span> <span style="color: #8b2252;">"Python editing mode."</span> t)
(setq python-mode-hook
      '(<span style="color: #7f007f;">lambda</span> () (<span style="color: #7f007f;">progn</span>
                    (set-variable 'py-indent-offset 4)
                    (set-variable 'py-smart-indentation nil)
                    <span style="color: #b22222;">; </span><span style="color: #b22222;">python mode&#50640;&#49436;&#45716; tab&#45824;&#49888; space&#47484;
</span>                    (set-variable 'indent-tabs-mode nil) 
                    (eldoc-mode 1))))

<span style="color: #b22222;">;; </span><span style="color: #b22222;">iPython settting
</span>(setq ipython-command <span style="color: #8b2252;">"/opt/local/bin/ipython2.5"</span>)
(<span style="color: #7f007f;">require</span> '<span style="color: #008b8b;">ipython</span>)
</pre>
<ul>
<li>
5.1.0 버젼의 python-mode.el에는 triple quote(""")에 대한 font-lock에 문제가 있다. 메일링리스트에서
패치를 찾아서 <a href="http://github.com/jmjeong/my-dot-emacs/blob/130e8d593cc49ca5e5d62d5b4fdb4c79c24aea90/python-mode.el">적용</a>하여 해결했다. ( <span class="timestamp-wrapper"> <span class="timestamp">2009-09-10 Thu</span></span>)
</li>
</ul>
</div>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>

