2012-01-03
2012年読書メモ
購入リスト含む、本棚はこちら http://booklog.jp/users/techman99
- [読了]松岡圭祐: 万能鑑定士Qの事件簿XII (1/2)
- [読了]鎌池和馬: 新約 とある魔術の禁書目録(1) (1/7)
- [読了]ドナルド・C・ゴース,G.M.ワインバーグ: ライト、ついてますか―問題発見の人間学(1/9)
- [読了]結城浩: 数学ガール/乱択アルゴリズム(1/10)
- [読了]杉原厚吉: どう書くか―理科系のための論文作法(1/11)
- [読了]鎌池和馬: 新約 とある魔術の禁書目録(2) (1/17)
2011-12-31
2011-10-03
iCalのデータを読み込んで、メールで送信
Python |
iCalのicsファイルから今日の予定を読み込んで、メールで送信するPythonプログラムを書いてみた。
- icsファイルの取り扱い
Pythonで、icsファイルを取り扱うのに適したモジュールはないかと調べていたら、あった。
iCalendar package for Python, http://codespeak.net/icalendar/
安定版のリリースが、2006年?と思ったが、以下のようにSVNで開発版のソースを取得したらicalendar 2.2が取得できた。
You can also check out the development version of iCalendar from subversion, using a command like:
svn co http://codespeak.net/svn/iCalendar/trunk iCalendar
よく調べたら、pypiに登録されていた。http://pypi.python.org/pypi/icalendar/
こっちだと、githubにソースコードがあった。http://github.com/collective/icalendar
Python2.7で、icalendar 3.0を使ってみたが、最終的に動作させる環境がFreeBSDなので、
portsにicalendarのパッケージがあったが、バージョンが2.1だったので
ひとまず、バージョン2.2でプログラムを組むことにした。
icsファイルに記述されたデータを表示する例。
from icalendar import Calendar from date time import datetime cal = Calendar.from_string(open('schedule.ics', rb').read()) body = "" for ev in cal.walk(): if ev.name == 'VEVENT': start_dt = ev.decoded("dtstart") end_dt = ev.decoded("dtend") summary = ev['summary'].encode('utf-8') print "{start} - {end} : {summary}".format(start=start_dt.strftime("%Y/%m/%d %H:%M"), end=end_dt.strftime("%Y/%m/%d %H:%M"), summary=summary) # body = "{start} - {end} : {summary}".format(start=start_dt.strftime("%Y/%m/%d %H:%M"), end=end_dt.strftime("%Y/%m/%d %H:%M"), summary=summary)
- メールで送信
icalendarモジュールで取り出した今日の予定をメールで送信する。
import smtplib from email.MIMEText import MIMEText from email.Utils import formatdate from email.Header import Header encoding = 'ISO-2022-JP' msg = MIMEText(body.encode(encoding), 'plain', encoding) # bodyはicsファイルから取得したスケジュールの文字列 msg['Subject'] = Header(u'本日の予定', encoding) msg['From'] = 'Hoge<hoge@example.com>' msg['To'] = 'dummy@example.com' msg['Date'] = formatdate() from_addr = 'huge@example.com' to_addr = ['dummy@example.com'] send(from_addr, to_addr, msg)
UTF-8で文字列が格納されているbodyを、MIMETextの第一引数として渡すが、
このとき、UTF-8からISO-2022-JPへencodeしてやらないと、
SubjectはISO-2022-JP、本文はUTF-8ととなり、本文だけ文字化けして読めないという悲しい状況に陥る。
(ぐぐって、参考にしたサイトで変更していないものもあった...)
スケジュールなので、一応Basic認証をかけている。
urllib2モジュールで、icsファイルを取得する処理は以下の通り。
import urllib2 passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, 'webserver_no_FQDN', 'username', 'password') auth_handler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(auth_handler) urllib2.install_opener(opener) url = "http://example.com/dav/schedule.ics" r = urllib2.urlopen(url) tmp_file = open('/tmp/schedule.ics', 'w') tmp_file.write(r.read()) tmp_file.close()
スクリプトの文字コードをUTF-8にしたり、スクリプトの最初に #-*- coding: utf-8 -*-と記述しても、
実行すると、以下のようにUTF-8の処理で引っかかる。
techman999@minako:~/dev/git/pyical$ python today_schedule.py File "today_schedule.py", line 40 SyntaxError: Non-ASCII character '\xe5' in file today_schedule.py on line 40, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
結論としては、/usr/lib/python2.6/sitecustomize.py を以下のように追記して対処した。
import sys sys.setdefaultencoding("utf-8")
こんな感じで、トータル4時間で完成。
たまには、お遊びプログラム書いていかないとね:p
2011-10-01
第44回情報科学若手の会 に参加してきました。
9/17-19に熱海で開催された第44回情報科学若手の会に参加してきたので、感想をまとめます。
(完全に時系列で、まとまってない文章になっているのでもしかしたら後で書き直すかも)
(ブログ等に感想やまとめを書くまでが若手の会ですといわれたので、この記事をpublishした段階で私の若手の会はようやく終了となります:p)
全体の流れは、@earth2001yさんがハッシュタグ#wakate2011のツイートをまとめて下さっているのでそちらをご参照下さい。
- 1日目まで http://togetter.com/li/189108
- 2日目 http://togetter.com/li/189434
- 3日目 http://togetter.com/li/189838
事前に送られてきた参加者リストを見ても、知っているのは@mamorukさんだけであとは誰なんだろう、どんな人がくるのだろうと+(0゚・∀・) + ワクテカ +していた。
当日の朝から、#wakate2011のハッシュタグや、TLを眺めていると、followしている人がちらほら熱海へ移動している模様。
また、最初の自己紹介セッションで、twitterアカウントなどを聞くと、実は相互フォローしていた人もいて、びっくり。
@haroperiくんなんかは、同じ筑波に在住しているのに、こんなところで会うなんてとはw
特別講演では、PFIの特別研究員 岡野原さん(@hillbig)が「研究・企業・生き方について」というタイトルで講演された。
(講演内容は、こちらで公開していただいています。http://research.preferred.jp/2011/09/wakate2011/)
岡野原さんの講演のなかで、私が感じた重要な点は以下の点です。
これから研究を始める学生、研究者のたまごの方にとくに意識しておいてほしいと感じました。
- 数学、統計などの基礎力が大事。手法やアルゴリズムはどんどん変わるので、ずっと追い続けるための基礎体力がなにより大事
- 必要に迫られたときに勉強した方がよい
- 他の人ができなくて、みんなに役立つ物がいい みんなが知っていて流行っているものをやっても意味がない
- 技術者自身が、「技術が生活を変えられる」ということを信じていないことが多い
他の人ができなくて、みんなに役立つ物がいい
みんなが知っていて流行っているものをやっても意味がない
本に書いてあることは多くの人が知っていると思え
勉強! 勉強! 勉強!
研究をするためには既存の研究を知らなければならない
新しいと思ったこと、いいなと思ったことはまずやられている
本や論文があるならまずは読もう
調べることができる能力は最重要
勉強は継続しなければならない。
自分ができるところは全問題の一部分だけであり
自分は研究コミュニティの一部と考える。
もっと妄想を!
妄想力は、イマジネーションの原動力
5年後、10年後に世界がどうなっているか。そのときに必要な技術を考えられるか
このぐらいのことを考えられないと、研究としても難しい。
すごい研究者とかすごいことをやってきた人は妄想力がある
夕食、休憩の後、
部屋で、@mamorukさんとNAISTの話などを話し込んでいました。
夜のセッションでは、@overlastさんの「死なないソフトウェア開発術」。
わりと、ショッキングな話もあり、いろいろ考えてしまいました。。。
9/17 夜の飛び込みセッションでは、@kumagiさんが未踏で開発した、匿名掲示板について発表していた。ネットワーク屋としては、オーバーレイネットワークでごちゃごちゃやるのはどうなの? レイヤバイオレーション(Layer Violation)じゃない? TCP/IPネットワークにおいて、下の層への影響は全く考えてないのじゃないか? などと考え、ルータに与える影響など質問した。
さらに発表後、いろいろ質問したなかで、@kumagiさんに、@did2memoさんのRouting手法を解説してもらい、いろいろ納得。というか、@did2memoさんの論文読んでいたにも関わらず、あまり内容を理解していなかったことが発覚orz
オーバーレイネットワークとか、そんなに詳しくはないですが、@kumagi さんとか、@did2memoさんとかヽ〔゚Д゚〕丿 スゴイスゴイ。
どうやったら、こんなにアイディアがでてくるのか。
その後は、29時まで語り合って、就寝するが、朝8時には、朝ご飯〜とたたき起こされたorzしかも、お酒が残っていて軽い頭痛orz
(本来なら、ここが一番重要なのですが、だいぶ記憶が飛んでいるので省略...)
18日の午前中には、ショートセッションで、以下のような多岐にわたる発表が行われた。
午後からは、特別講演として、@takesakoさんによる「学生時代に勉強しておけばよかったこと」(概要: 察してください。)が発表された。
講演の中で、個人的に重要だなと感じたのは以下の点。
応用研究か、基礎研究か? 悩む前に基礎勉強を
今後の人生で選択の幅を広げるため
早く専門を縛るメリットデメリット
半分遊びと遊び半分は、違う。
大事なのは、問題設定能力
どこまで解けばいいかを設定できて、達成できれば勝ち
研究者の端くれ、教育者の端くれとしては、いかに研究において問題設定をうまくするか、
いかに学生さんに問題設定能力をうまく身につけてもらうかを考えなければならないと
考えさせられた。
その後も、セッションは続き、以下のような発表が行われた。
夕食後は、交流イベントとして、4人1組で、情報科学に関連するクイズ大会が行われた。最終的に、私のいたグループが優勝してました... (若干、年齢が上の人に有利という話もありましたがw)
このあとは、飛び込みセッションで4名ほど発表してました。私も、福祉工学と題して、私が勤務する筑波技術大学での視覚障害者向けの情報処理教育の状況について、発表しました。
その後は、夜セッションで、皆と語り合う。夜セッションの間にも、飛び込みセッションが行われ、その中で、女帝さん(@yamashitam)による「なぜ私は女帝と呼ばれるようになったのか」という発表が行われたので正座して、聞いていました。
あと、@hoimeiさんによる人体制御ショーが始まり、みんなうわぁぁぁと言いながら制御されていました...
私は見ていただけですが(´・ω・`)
19日最終日は、朝からまとめセッションでみなさんの感想を発表して、
第44回情報科学若手の会は終わりました。
(ただし、若手の会は、帰ってからブログ/ツイートするまでが若手の会ですといわれていたので、
冒頭でも書きましたが、私の第44回情報科学若手の会はこれでようやく終わり:p)
普段、研究会(最近は参加してないけど:p)などでは、どうしても同じ研究分野の人が
集まるので、情報科学若手の会のように、多用な研究分野の人が集まって議論することは
数少ないチャンスではないかと思います。
職場ではぼっちで研究開発しているので、こうやってわいわいやるのは非常に楽しいですし、
モチベーションアップの原動力になりました。
結論: これから研究を始めるようなB3/M1の人は、ぜひ参加するといいと思います。
よーし、今日も元気に活動するぞ、ふんす(`ω´)!
# 時々、私も写真や顔文字を混ぜてがんばってリア充っぽく見せかけるww
# 内容は、全然リア充っぽい内容ではないですが(藁
