2010/02/08

pythonでunzip()関数を実現するためには

pythonには(当たり前だけど)リストをまとめるためのzip()関数が存在する。

>>> A = [1,2,3]
>>> B = [4,5,6]
>>> zip(A, B)
[(1, 4), (2, 5), (3, 6)]
これだけじゃちょっとありがたみが分かんないけど、配列っていうのは『オブジェクトjの状態』などを格納してある場合が結構あるので、jに関してループを回したいとかのような場合に便利だったりする。

for (state1, state2) in zip(A, B):
  # do something
で、これはいいんだけど、なぜかpythonにはzip関数でまとめられた配列を展開する"unzip()"関数が存在しない。なんでだろーとか思って調べたら、どーやらこれでできるらしい。

>>> C = zip(A, B)
>>> zip(*C)
[(1, 2, 3), (4, 5, 6)]
なるほどー…pythonらしい。

最初『…ですよねー!』ってなったけど、こーゆう解決案をぱっと思いつくのが賢い人間なんだろーなーとか思った。…うん、そりゃそうだ。

2010/01/19

iPhoneのアプリ『Sleep Cycle』は本当に凄い



たまには肩の入っていない話題を。巷では既にすごく有名ですが、とにかくこの『Sleep Cycle』の威力が凄すぎたので書いていきたいと思います。

動作は単純で、ベッドの上にiPhoneを置くことで、人間が寝返るときに発生する振動を感知してレム睡眠とノンレム睡眠のパターンを推測。ちょうど眠りが浅くなったときにアラームを鳴らすことで、気持ちよく起きられるという代物。アラームアプリのくせにちょうど鳴るときもあれば、15分前に鳴るときもあったりします。

最近これをここ一ヶ月くらいこのアプリをセットし続けているんですが、目覚ましが鳴ったときに度々生じる不快な目覚めが完全に無くなりました。目覚めが気持ちいい。すごい。今日も一日頑張ろうという気になります。これで115円はいいお買い物です。

問題としてはあまりに気持ちよさ過ぎるために二度寝してしまう危険があるってことです。これでスヌーズ機能が追加されれば文句ないのに…

2010/01/02

あけましておめでとうございます

改めまして、あけましておめでとうございます。本年もこのブログ『映像奮闘記』をよろしくお願いします。

2010年は自分たちの学年にとって激動の年になりそうです。文系は就活する人が殆どで、就職氷河期の今、とても戦況は厳しくなっていると話していました。理系は大学院に行く人が殆どですが、事業仕分けの影響で少なからず各研究室とも予算に余裕を持っていられる状態ではなくなってきました。そういった中、はたして自分はどのように過ごしているんでしょうか?ということで、自分が掲げる、1年間の目標を立ててみました。
  • Haskell, OCamlについてより詳しくなりたいです。コードすら書いていない状態ではとても身についているとは言えないので、きちんと書いて頭の中に叩き込んでいきます。
  • C++のboost、ジェネリック、メタプログラミングまでを理解したいです。C++の言語仕様はあんまり好きじゃないんですが、とにかく現状必要不可欠な言語ですので、遅かれ早かれ習得する必要がありそうです。
  • Qtもアニメーションなど、細かい箇所をより理解していきたいです。
  • 現在履修している物理は、とりあえずDirac e.q.までやっておきたいです(*1)。
  • 4年までに卒業製作としてなにか一つのソフトを作りあげたいです。ものつくるためにプログラミングやってるわけで、習ってなにも作らないってそりゃ本末転倒です。
    一応頭の中で考えていることはあるんですけど、もうすこし仕様をねって、現実的かどうか判断して、製作にとりかかってみたいです。
ご覧の通り、勉学や研究が主となっています。いかにも大学生的なことは1,2年で大体楽しみましたんで、もうそろそろ本気だして頑張っていこうかなぁと思います。
主な目標は一番下で、そのために1つ目と2つ目があるような感じです。一年後どれくらいの目標が達成できているんでしょうか?2010年の年末にこれを見てニヤニヤできるよう、さらに励んでいきたいです。

(*1) どうでもいいことですけど、自分は理学部の物理学科に所属しています。物理への限りない情熱があって、しかもかなりセンスがある人でないと理解ができない、厳しい世界です。自分は情熱もセンスもあまり無いので、ついていくのに精一杯です。げろげろ

2010/01/01

OMakeマニュアル日本語訳 全15章すべて完了しました

とりあえずOMakeの日本語訳が全15章すべて完了しましたので、一応報告したいと思います。これでOMakeマニュアルの日本語化は、いったん終了となりました。

変更点は以下。
  • 原文のマニュアル15章をすべて翻訳しました。
  • 前回翻訳できなかった箇所、翻訳が怪しかったところ、日本語として直したほうが良いと思われる箇所をすべて修正しました。
  • 目次に各章の簡単な解説を追加しました。
  • 原文では表現が伝わりにくい箇所に(訳注)を追加して解説するようにしました。
  • 前回の冗長な(訳注)をすべて削除しました。
  • 索引をより充実させました。各ページの『索引』から参照できます。
  • ソース部分に原文を追加しました。これで、分からない箇所は『ソースコードを表示』で原文と照らし合わせることができるようになりました。
もちろんですが、URLは以下から参照できます。

http://omake-japanese.sourceforge.jp/

実はAppendixがまだ2つ残っているんですけど、見たかんじそんなに重要なセクションではないのでとりあえずやらないことにします。それよりも文章をちょくちょく校正するほうが大事かなと。暇をみて更新します。

本当はこれ年明ける前に全部やる予定だったんですけど、自分が怠惰だったこともあって年が明けてしまいました。仕方がないので新年はこの翻訳で迎えることにします。

ということで、明けましておめでとうございます。でも自分はもうつかれたのでねます。おやすみなさい。

2009/12/16

QtとC++に対するいろいろな思い

最近はよく翻訳の傍らGUIプログラミングについて勉強していて、QtとC++の組み合わせで作業しています。これに関してもいろいろと書いていきたいのですが、とりあえずこの2つについて雑感をてきとーに。
  • Qtは便利。あんまりオブジェクトの所有権や参照カウントなどを考えなくてもきちんとメモリ管理してくれる。deleteする必要があるのは親を指定せずに明示的にnewした場合とかだけ。
  • 文字列のエンコードに関して悩まなくなったこともグッド。
  • シグナルとスロット機構は従来のイベントドリブン形式よりも使いやすい。静的な言語なのに動的な機構を混ぜるなんて不思議なかんじ。
  • 後発のライブラリだけあって、やっぱり考え方は洗練されている印象。最近LGPLも可能になってより使いやすくなった。
  • 日本語の文献が殆どない。オライリー本は必須。
  • 時々意味不明のビルドエラーが出るときはmake cleanすると直ったりする(唯一の不満)。
  • C++の行数が多い。Qtのおかげでだいぶ削減されているけど、これで削減されているってどんだけー
  • もしMFCなんかで作業することを考えたら…おそろしやおそろしや
  • コンパイル速度が遅い。すごい遅い。これは自分のパソコンがヘタレなだけじゃない。C++が遅すぎるんだ。
  • アクセッサ関数を定義するのが面倒。_valを定義したらval()とsetVal()を定義しなきゃなんない。でも面倒ってだけでそんな悩んでない。
  • MyClass obj; みたいな文法でコンストラクタが呼び出されるのは怖い。気づかないところでエラー出る可能性がある。
    いや、禁止することはできるんだけど、いちいちそのコードを書かないといけない。普通こんな形で呼び出したい人いないでしょー
  • 参照にあまりエレガントさを感じない。だってあれポインタを隠蔽しただけじゃん。引数を変更禁止にしたいんだったらconstつければいいだけのような気がする。
  • リスト内表記使いたい。無名関数使いたい…これ使えればだいぶ行数減るのに
ということで、やっぱ整理してみたらQtにはあんまり不満はなくて、C++にはけっこうあることが判明しました。でも慣れれば不満は減っていくかもしれませんので、しばらくは続けていきたいと思います。

追記
  • λ式あるね
  • テンプレート、ジェネリック、メタプログラミングはもうすこし勉強する必要がありそう。C++は奥が深い