平鍋さん、ナイスです!

昨日、匠塾 第4回 これからのエンジニアとIT企業のあり方
http://www.takumistyle.net/takumijuku/ps-004.html
というセミナに行ってきました。

オブラブに参加できなかったので、これを見つけた時には飛び上がってしまいました。
(萩原正義+細川努+浅海智晴+牛尾剛+平鍋)×萩本順三でパネルディスカッションします!:An Agile Way:オルタナティブ・ブログ


平鍋さんの講演は内容はほぼいつも通りなんだけど、毎回エネルギーをもらえるんです。
だから、実際に会場に行って聞いてその場の雰囲気を感じるってのが大切なんだって思う。
あとは持ち帰って実行するだけ、なんだけど、、、
でもほんとに自分にもなんかできそうな気がして、よしやるぞって気にさせてくれたので、
その勘違いをKeepして行動したい。


最後のパネルディスカッションがまた、すごい。
その中で「レベル(技術力)が高いってなに?」って議題があって、いろいろな意見がでてました。
もちろんいろんなタイプがあっていいってことなんですが、
僕が最近思うのは様々な視点(立場)で考えて、それを言葉にできる人ってすごいなと。
特に我々はどうしても技術者の立場で考えてしまいがちですが、客(ユーザ)の立場で考え、
客のことばで話せるってことが、今現在僕が目指すべきところかなぁと。


内容はこちらが詳しいですよ。
ebacky way
あ、ebackyさん勝手にごめんなさい。
よくまとまってるなぁと思いまして、、、

続・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
2.text/html => 'html'と表示
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変換が必要になりますね。

ちなみにHTML部がエンコードされてたりされてなかったりするのは、実際に存在するわけで、間違ったわけではありません。

オレオレフォントでも大丈夫!

仕事でWindows XPを使ってますが、フォントにメイリオやMeiryoKe_Gothicなんかを入れてます。
基本テキストベースで仕事してるので(?)、特に意識してないのですが、
MS Wordで文章書いてて人に渡すときに、これ大丈夫か?と。

オプションでフォントを埋め込む設定もあるっぽいけど、サイズ気になるよねぇ。

試しに共用PCに送って開いてみた。
見れるじゃん。

フォントを見てみると、

このフォントはインストールされていません。最も近いフォントが使われます。

おお。知らんかった。やるなぁ。

これで、安心して好きなフォント使えます。よかった。

でもちょっとした疑問が、、、
1.最も近いフォントってどうやって判断してるの?
2.実際に選ばれたフォント名って表示されないの?

この業界何年やってんだか。。。

悩んでたタイマ割り込みの件はあっけなく解決してしまった。

ドライバを使ったら動いたんだけど、そんな問題ではなくて、、、

書くのもはずかしいが、結論としては

   レジスタアクセスにはvolatileをつけましょう!

ってこと。

MailArchivePluginでHTMLメールをなんとかしたい。

TracLightning 2.2.5でMailArchivePluginを使い始めました。
知ってはいたんだけど、使ったのは今日が初めてです。いいですね。hirobeさん、ありがとう。

でも、HTMLメールも混じってたりするので、この辺をなんとかしたい。
ソースを見てみるとコメントに書いてあるのでその内対応してくれるのかな?って期待もありつつ、
とりあえず何とかする方法を考えてみた。
1.html部をテキストメール化
2.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をハック - wadahiroの日記

すでにHTMLメールに対応してる方がいらっしゃいました。
すばらしい。その内使わせていただきます。

近況報告

最近、仕事でXilinx触ってます。
前はAlteraやってたけど、勝手が違ってなかなか慣れるまで大変そうです。
ま今回はFPGAガッツリじゃなくて、microblazeでのソフト開発がメイン(のはず)だけど、、、


こないだはGPIOの設定忘れて入力の電圧が出てくれなかったりして、
今日はタイマー割り込みがうまくいかず、、、
うーん、どうも初歩的なところで引っかかるなぁ。


ライブラリ、っていうかドライバのソースがあるみたいだけど、
これ使わなきゃいけないのかな。まったく説明が見当たらないし、
レジスタ直に触ってたんだけど。


まぁ、毎回新しいことにチャレンジできるってのは幸せなことなんだけど。