2009-07-23
平鍋さん、ナイスです!
昨日、匠塾 第4回 これからのエンジニアとIT企業のあり方
http://www.takumistyle.net/takumijuku/ps-004.html
というセミナに行ってきました。
オブラブに参加できなかったので、これを見つけた時には飛び上がってしまいました。
(萩原正義+細川努+浅海智晴+牛尾剛+平鍋)×萩本順三でパネルディスカッションします!:An Agile Way:ITmedia オルタナティブ・ブログ
平鍋さんの講演は内容はほぼいつも通りなんだけど、毎回エネルギーをもらえるんです。
だから、実際に会場に行って聞いてその場の雰囲気を感じるってのが大切なんだって思う。
あとは持ち帰って実行するだけ、なんだけど、、、
でもほんとに自分にもなんかできそうな気がして、よしやるぞって気にさせてくれたので、
その勘違いをKeepして行動したい。
最後のパネルディスカッションがまた、すごい。
その中で「レベル(技術力)が高いってなに?」って議題があって、いろいろな意見がでてました。
もちろんいろんなタイプがあっていいってことなんですが、
僕が最近思うのは様々な視点(立場)で考えて、それを言葉にできる人ってすごいなと。
特に我々はどうしても技術者の立場で考えてしまいがちですが、客(ユーザ)の立場で考え、
客のことばで話せるってことが、今現在僕が目指すべきところかなぁと。
内容はこちらが詳しいですよ。
あ、ebackyさん勝手にごめんなさい。
よくまとまってるなぁと思いまして、、、
2009-07-21
続・MailArchivePluginでHTMLメールをなんとかしたい。
MailArchivePluginでHTMLメールをなんとかしたい。 - すべてがdead beefになる -the unspecified insider- by ivampの続き、というかまとめです。
コードの改良とかはしてません。
あんまりこの辺のこと分かってないので、間違い等あればご指摘していただけるとありがたいです。
まずは、メールの形式について。
1.text/plain
2.text/html
3.multipart/alternative (text/plain + text/html)
4.multipart/mixed (1.〜3.+ 添付ファイル)
5.multipart/mixed (本文が2つ以上)
例えばこんな感じ。
1.text/plain
... Content-Type: text/plain; charset="iso-2022-jp" Content=transfer-Encoding: 7bit ... テキスト形式本文
2.text/html
これは私の環境でサンプルがなかったのですが、たぶんこんな感じ。
... Content-Type: text/html; charset="iso-2022-jp" Content=transfer-Encoding: 7bit ... HTML形式本文
3.multipart/alternative (text/plain + text/html)
... Content-Type: multipart/alternative; boundary="BOUNDARY" ... This is a multi-part message in MIME format. --BOUNDARY Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit テキスト形式本文 --BOUNDARY Content-Type: text/html; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable HTML形式本文(quoted-printableでエンコードされている) --BOUNDARY
4.multipart/mixed (3.+ 添付ファイル)
Content-Type: multipart/mixed; boundary="BOUNDARY_MIXED" ... This is a multi-part message in MIME format. --BOUNDARY_MIXED Content-Type: multipart/alternative; boundary="BOUNDARY_ALTERNATIVE" --BOUNDARY_ALTERNATIVE Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit テキスト形式の本文 --BOUNDARY_ALTERNATIVE Content-Type: text/html; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable (Quoted-printableでエンコードされた)HTML形式の本文 --BOUNDARY_ALTERNATIVE --BOUNDARY_MIXED Content-Type: image/jpeg; name="PicName.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="PicName.jpg" Base64でエンコードされたJPEGファイル --BOUNDARY_MIXED
5.multipart/mixed (本文が2つ以上)
本文が2つ以上なのか、添付ファイルにファイル名がないだけなのか、、、
規格として正しいか分かりませんが、実際に受信したものなので、一応受け取れるようにしておきたい。
ちなみにThunderbirdでは本文にも表示されて、添付ファイルとしてもファイル名Part1.2、Part1.3として表示されました。
... Content-Type: multipart/mixed; boundary="BOUNDARY_MIXED" ... This is a multi-part message in MIME format. --BOUNDARY_MIXED Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit テキスト本文1 --BOUNDARY_MIXED Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit HTML形式本文2(エンコードなし) --BOUNDARY_MIXED Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit テキスト形式本文3 --BOUNDARY_MIXED Content-Type: application/pdf; name="?ISO-2022-JP?B?xxx==?=" Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename="=?ISO-2022-JP?B?yyy?=" Base64でエンコードされたpdfファイル --BOUNDARY_MIXED
状況
今のMailArchivePluginだと、、、
1.text/plain => OK
3.multipart/alternative => 最後のパートを表示(HTMLならソースが表示される)
4.multipart/mixed => 本文がテキストならOK(添付ファイルは切り出して保存)
5.multipart/mixed => 最後のパートを表示
Hirohiroさんので2.が、僕ので3.5. がなんとかなるのでは、と思っています。
あ、もちろんHTMLがパースできれば3.とかもそっち使っちゃって問題ないと思います。
ソース
MailArchivePluginのRevision92からの比較で変更したところのみ。
ファイルはmailarchiveadmin.pyのみ。
数字は元ファイルの行数。'-'は削除'+'は追加した行です。
231 if content_type == 'multipart/mixed":
232 pass
233 elif content_type == 'text/html' and self.is_file(part) == False:
234 - body = part.get_payload(decode=1)
+ pass
235 elif content_type == 'text/plain' and self.is_file(part) == False:
236 - body = part.get_payload(decode=1)
+ body += "\n------------------------------\n\n"
+ current_body = part.get_payload(decode=1)
237 charset = part.get_content_charset()
238 self.print_debug('charset:'+str(charset))
239 # Todo:need try
240 if charset != None:
241 - body = self.to_unicode(body,charset)
+ body += self.to_unicode(current_body,charset)
+ else:
+ body += current_body
242 elif part.get_payload(decode=1) == None:
243 pass
これだけです。(-_-;
まとめ
まぁいろいろ問題もあるでしょうから、使うときは自己責任でお願いします。
あ、それと今気づいたんですが、multipart/mixed(添付ファイルあり)で、multipart/alternaiveでないtext/htmlが含まれる場合、上のソースだとダメです。ここもHTML->text変換が必要になりますね。
2009-07-17
オレオレフォントでも大丈夫!
仕事でWindows XPを使ってますが、フォントにメイリオやMeiryoKe_Gothicなんかを入れてます。
基本テキストベースで仕事してるので(?)、特に意識してないのですが、
MS Wordで文章書いてて人に渡すときに、これ大丈夫か?と。
オプションでフォントを埋め込む設定もあるっぽいけど、サイズ気になるよねぇ。
試しに共用PCに送って開いてみた。
見れるじゃん。
フォントを見てみると、
おお。知らんかった。やるなぁ。
これで、安心して好きなフォント使えます。よかった。
でもちょっとした疑問が、、、
1.最も近いフォントってどうやって判断してるの?
2.実際に選ばれたフォント名って表示されないの?
2009-07-15
MailArchivePluginでHTMLメールをなんとかしたい。
TracLightning 2.2.5でMailArchivePluginを使い始めました。
知ってはいたんだけど、使ったのは今日が初めてです。いいですね。hirobeさん、ありがとう。
でも、HTMLメールも混じってたりするので、この辺をなんとかしたい。
ソースを見てみるとコメントに書いてあるのでその内対応してくれるのかな?って期待もありつつ、
とりあえず何とかする方法を考えてみた。
1.html部をテキストメール化
3.multipart/alternativeならtext/plainを優先して取り込む(text/htmlの方は捨てる)
4.先にtext形式に変換しておく
5.メーラでテキストメール化してForward
まぁ、4.5.はないとして、2.3.を試す。
あ、それと、multipartとかだと最後のパートしか残らなかったりしたので、それも何とかしたい。
ソースを読む。
わかったこと
1.添付ファイルの判断はcontent-dispositionにfilenameまたはname属性?が指定されていること
2.multipart内を走査するforの中で'body = xxx'としているので最後のパートしか残らない。
やったこと
まず、'text/html'のelif部を削除して、htmlは全部添付ファイル化する。
'text/plain'では'body = xxx'を'body += xxx'に変更。
ただし、charsetによってbodyを変換しているので、
一旦別変数にとっておいてから'body += raw_body'
見たいな感じで。
結果
htmlの添付ファイル化はできたが、開くとリポジトリブラウザみたいにソースを開いてしまう。
それにhtmlメールって言っても、textも付いてるmultipart/alternative形式だったりするので
html部は削除することにした。
なんかいい感じで動いてるっぽい。
まぁ、完全にhtmlのみのメールはダメだろうけど、
初めてのプラグイン開発(修正だけど)にしては上出来かな。
あ、これがあのTDD(他人のふんどしデベロップメント)ってやつか。
2009/07/16 追記
MailArchivePluginをハック - Hirohiroの日記
すでにHTMLメールに対応してる方がいらっしゃいました。
すばらしい。その内使わせていただきます。