開発の最近のブログ記事

CEDEC2010、2日目終了。

| トラックバック(0)
  はい。また久しぶりです。twitterのログまとめて張りつけるようにでもするかなぁ。

 この8/31〜9/2と CEDEC2010です。前回はその時在籍していた会社がとても素晴らしく CEDEC出席を積極的に支援してくださったので無料だったのですが、今回は自腹参加です。

 今回もまた行く前は「面倒くせぇしサボろっかな」なんて思っていましたが、やはり来てしまうと非常に盛りあがります。セッション自体がとても勉強になると同時に、聞きながら「自分ならこうするな」「こうやってみたらどうだろう」と発想がジャンジャカ湧いてくるのがまたすばらしい。
 本日の CEDEC2010 Developers Nightでまた色々な人と知りあえたことも幸せなことです。特に今回はポスターセッションがあったこともあり、若い人がかなりたくさん参加しておられ、かなーりうれしかったですね。まだまだ未来は明るいって感じです。

 さてあと1日ありますが、また楽しみであります。会場でお会いできましたら、気軽にチョップなり膝カックンなり声かけなどしてくださいね。(っていま blogにかいても事後になるはずですがww)

 以前、「Twitterクライアントで名前だすしくみ、どうやってんだろう」と思って、軽く Pythonで書いて放置してたけど、OAuthで困ってる人が私以外にもおられるよーなので、さらしてみます。
 ただし、テキトーにやったので妙なことあるかもしれません。そこは気にせずどーぞ!(まぁ軽く軽く)

■ はうつー作成 twitter desktop client(全自動版) ■ 

 必要なものは twitter.comに client登録したときのメールにだいたい書いてあります。

  • Consumer key
  • Consumer secret
  • ログインするための自分のアカウント(当然ですね)

 これだけを元に、一気に自作クライアントで TL取得&発言できるところまでもっていきます。
で、その sample code(Python)はこちら。twitapi_test.py 

 ちなみに、oauth, simplejson, BeautifulSoupを easy_installしておいてください。本当に必須なのは oauthぐらいなもんですが。

● この sample codeの 動作手順 ●
  1. Request Token URLに対して、Consumer Key,Consumer Secretに HMAC_SHA1でサインしたリクエストを投げます。
    URL(get_unauthorized_request_token): https://twitter.com/oauth/request_token?oauth_nonce=XXXXXXX&oauth_timesta mp=XXXXXXXXX&oauth_consumer_key=(もらったConsumerKey)&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oaut h_signature=XXXXXXXXXXXXXX

  2. その返事として、oauth_token_secret, oauth_token等がかえってきます。
    Token(authorize): oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXX&oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXX&oauth_callback_confirmed=true

  3. もらった tokenをつかって認証用URLを作成します。
    URL(get_authorization_url): http://twitter.com/oauth/authorize?oauth_nonce=XXXXXXXXXX&oauth_timestamp=XXXXXXXXXXXXXXXXXXX&oauth_consumer_key=(もらったConsumerKey)&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=(さっきもらったoauth_token)&oauth_signature=XXXXXXXXXXXXXXXXXXXXXXXXXX

  4. その URLでアクセスすると、たぶんログインページに飛ばされるので、とりあえず自分の ID/passをつっこんで submitします。(twitter.comに client申請したときに loginいらないよモードだったら、このへんいらないかも?)

  5. ログインすると、画面に PINコードを表示する HTMLがかえってきます。このへん、desktopではなくサーバー上クライアントで申請するとリダイレクトURLになって返ってくるようですが、今回は無視。

  6. その HTMLから PINコードをバラします。(表示させて入力してもらうのも良いのですが、面倒なので直接ひっこぬきます)
    pin: (7桁くらいの数字)

  7. 最初にもらった認証用tokenとさっきもらった PINコード(OAuth的には verifierです)をつかって、TL見たり書きこんだりするためのアクセス用tokenを発行してもらいます。
    URL(access_token): https://twitter.com/oauth/access_token?oauth_nonce=XXXXXXXX&oauth_timestamp=XXXXXXXXXXX&oauth _signature_method=HMAC-SHA1&oauth_consumer_key=(もらったConsumerKey)&oauth_verifier=(ひろったPINコード)&oauth_version=1.0& oauth_token=(さっきもらったoauth_token)&oauth_signature=XXXXXXXXXXXXXXXXXXXX

  8. アクセス用tokenを取得。最初にもらった認証用tokenのことは忘れます。
    Token(access): oauth_token_secret=XXXXXXXXXXXXXXXXXXXX&oauth_token=XXXXXXXXXXXXXXXXXXXXXXXX

  9. あとは、適当にTwitter API referenceにのってる URLにアクセスしてやれば ok。読み書き自由な感じです。
    URL(home_timeline): http://twitter.com/statuses/home_timeline.json?oauth_nonce=XXXXXXXX&oauth_timestamp=XXXXXXX&oauth_signature_method=HMAC-SHA1&oauth_consumer_key=(もらったConsumerKey)&oauth_verifier=(ひろったPINコード)&oauth_version=1.0&oauth_token=(アクセス用token)&oauth_signature=XXXXXXXXXXXXXXXXXX

● 大切なこと ● 
 だいたい2つ。

  • 認証用トークンと、アクセス用トークンは別もの。
  • 何かするたびに、HMAC-SHA1でサインかけたリクエストで、GET/POSTする。

これさえ守れば、あとは適当にいけるかなと思います。
いじょ。

libsndfileで wav出力をしようとして、1つハマったのでサラしておく。

SFINFO設定( &sfinfo );
sf = sf_open( "foo.wav", SF_WRITE, &sfinfo );
sf_writef_float( sf, buffer, size );
sf_close( sf );

で出力したら、バイト数はそれっぽいけど QuickTime Playerなんかだと長さ 0といわれるファイルができてしまう。
 これはヘッダが正しく書かれていないため。で、対処は sf_open()のあとに?
sf_command( sf, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE );
をいれてやれば ok。 writeした内容にあわせて自動的に headerを更新してくれる。



ブラウザで迷子

| トラックバック(0)
 なんか、mozilla fnd.が未来のブラウザイメージってのを公開してた
それで、見てみたんだけど正直失敗しそげな様子。ってか別にインパクトもないし、実用性もなさそげ。
 良いかなとおもったのは他人カーソルがでるところぐらいかな。

 で、そこで思ったこと。よくある「画面に3D空間が表示されてそこに Windowが多数ういている」系イメージだけど、これって3D空間の把握能力がある人じゃないと使えないよね(笑)
 空間認識が得意な人は「いまここにいる」「ここにコレがある」ってわかるけど、そうじゃない人には単に細かいwindowsが雑多になってわかりにくいだけ。仮に空間認識が得意な人がいても、ぷかぷか浮いてるのを整理したり移動したりは脳の処理コストがかかるだけでメリットはないと思う。

 やはり、そこはもっと記号的に覚えやすい&わかりやすい空間表現が必要なんじゃないだろか。空間認識が苦手(女性は特にそうだといわれてるけど)な人でも、自分の部屋の配置はほとんど立体でそれを苦労なく認識してるわけで。 もうすこしリアル側体験にあわせた3Dメタファを用意したほうがいいんじゃないかなー。そのへんが多数の 3D desktopが生まれつつメジャーにならない理由かと。

 ...となると、compizつかって新しいの作ってみたくなるねー。AdobeAIRでもいいけどさー(笑)


 最近、趣味と実益で Squirrelをいじりたおし中。
この土日でいろいろ掴めてきた。thread(co-routine)とか変数操作とかね。
複数contextを同時にうじゃうじゃ動かす Stackless pythonやらもちょい前にやってたのでその延長でもあったり。
 デフォルトでは配列とハッシュテーブルぐらいしかないので、構造化データの保持はどうするかまだ考えがいりそうだけどねん。
 とりあえず、細かいけど変更の多い rule/actionを外部に出すには悪くない。XML/YAMLでルール記述もありなんだけど、制御が微妙に増えてくると逆に可読性さがるしね。

 C/C++/ObjCなどのコンパイラで、ある程度scriptingさせようと思うと pythonかなと思っていたんだけど、あまり外部に出ないのであれば Squirrelぐらいのほうが楽かもしれない。
 何でもできるけどちょい重いpythonと、できる幅は狭いけど軽いsquirrel。上手に場合わけしていきたいですな。

Scons, Scons, おいしいScons

| トラックバック(0)
 カリッとサクッと。
最近、自前project用に Sconsをおためし中。Makefileを書くよりは楽かなー。なんせ、単純に hello.cを compileするだけだと、設定ファイルSconstruct(Makefileのかわりね)に
Program('hello.c')
とか書くだけ。めっちゃsimple。antもいいんだけどね。でも手書きは面倒なので Sconsを try。

例えば、ちょいと Squirrelの codeを書くときなら
% cat SConstruct
env = Environment( CC='gcc-4.2', CCFLAGS='-O2', CXX='g++-4.2' )
env['BUILDERS']['Squirrel'] = Builder( action='sq -o $TARGET -c $SOURCE', suffix='.cnut', src_suffix='.nut' )

cpp_files = [ 'test.cpp' ]
lib_files = [ 'sqstdlib', 'squirrel' ]

env.Squirrel('test.nut')
env.Program('mytest', cpp_files, LIBS=lib_files )
という感じで書ける。これを実行すると、
% scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++-4.2 -o test.o -c -O2 test.cpp
g++-4.2 -o mytest test.o -lsqstdlib -lsquirrel
sq -o test.cnut -c test.nut
scons: done building targets.

 判りやすい設定ファイルになるのと、ややこしい ruleを書くときに普通に Pythonで書けてしまうのが魅力かな。普通に単一環境とか on unixで書くにはあまり魅力はないんだけど、特殊なターゲットやらツールやら外部アクセスやらを全部一発でさせようと思うと悪くないかなと。
 なんでかってーと、継続的インテグレーションを公私共に導入していきたいなーという表れなのでした。

 そろそろ iPhone2.0の$99版も公開されるしね〜。備えておきたいのさ(笑)

TeXLiveインストール

| トラックバック(0)
??ちょいと数式を気楽に書きたくなって、TeXを localに install.
今は TeXLiveなんですな。
??最初は、パッケージの MacTeXを入れてみたんだけど、どうも bus errorがおちる。
おかしいなと思って、 source buildから。

まずは source buildのおかしい所を修正。
stubdata.d:1: *** missing separator. Stop
とかいって落ちることがあるので、libs/icu-xetex/config/mh-darwin に 2ヶ所ほどある?
@echo -n "$@ " > $@ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
をコメントアウト。
??それと、texk/web2c/Makefile と?texk/xdv2pdf/Makefileが configureの指定を無視する compilerを呼んでいたので修正。で、make自体はok.

 でも bus errorなおらず。debugしてみたら負の配列アクセスをしている部分を発見。
texk/dvipsk/dvips.c のうち、iname[lastext] をアクセスしてる所に前置で?lastext >= 0 && を追加。
 これで無事問題なく動くようになりました。

 ちょいと scriptいじりあそびの発展で、Luaはちょい前にやったので今度は Squirrelに。
どうも普通に source buildするよりは Eclipseつかえやオラ的雰囲気を感じるも、まずは普通に。threadとgeneratorがびみょーーにまざってはいますが、まぁ scriptとしては使いやすいかな。元々、ゲーム用にLuaで足りなくなった人がついカッとなって作ったもののようで、ジャンルは偏ってるような気もしないでもないけど、細かいオートマタをうじゃうじゃ作って動かして遊ぶための platformには悪くないかなーとも思ったり。

 Luaにしても Squirrelにしても、単体ではなく何かとくっつけて勝負するよーなものなので、何をどうくっつけるか考えるのも楽し楽しですやね。


Qt4.4 for mac ( gcc 4.2 ) patch

| トラックバック(0)
 ちょいと英語つきで...
using gcc-4.2 on MacOSX(OSX10.5), it causes some errors says
Error: extra qualification 'Phonon::QT7::VideoRenderWidgetOpenGL::' ....
, to fix use this patch.


tar xvzf?~/Downloads/qt-mac-opensource-src-4.4.0.tar.gz
cd?qt-mac-opensource-src-4.4.0
patch -p1 < ~/Downloads/qt4.4-mac-gcc4.2.patch

というわけで、Qt4.4の Mac版を buildしようとして、gcc-4.2だとどうもコケるので patchを作ってみました。patchのあてかたは上のとおり。ディレクトリ名とかは適当にかえてくだちい。
 ちなみに、うちの configureは 以下のよーな感じ。
CC=gcc-4.2 CXX=g++-4.2 ./configure -sdk /Developer/SDKs/MacOSX10.5.sdk/ -iconv -openssl -debug-and-release -qt-libpng -qt-libjpeg -qt-libtiff
 最近は適当な GUI app書くのは wxWidgets使うことが多かったんだけど、昨日Qt4.4が正式おひろめ && JavaOne2008にあわせて JavaFXが最近すこし気になる...ってわけで、これからはどうしようかな〜と思ったり。

??Qt4.4の魅力はやはり WebKit対応と Phononですかね。richな viewを簡単に構築するという意味ではやはり HTMLは便利だし、movie/audio関連を考えると Phononで楽に書けるってのも魅力。そのへんは wxWidgetsはちょいと個別実装にわかれているのが難点だったので、ちょいとうれしかったり。

??他方、JavaFXはやはり適当にかいてからきっちり仕上げたりとかしやすい、最近の LL系にも通じるお気楽さが魅力。ずっと起動しっぱなしなら JITも十分効果的に作動するから速度問題も気にならないしねー。まぁ、今は単体の functionの処理時間よりは各thread/process/machineの調停のほうが UI的には重要だったりするので、そのへんでも Javaは悪くないやね。

 とりあえず、今は RSS aggregatorが欲しい。Apple Mail.appを使ってはいるんだけど購読する feedが 50site越えて、毎日4桁feedひっぱってると UIがちょいとトロい。なのでそのへんの粒度を調整したいなーとか思いつつ。あとは分類ルールとかを上手にかきたいなぁとかも思ったり。



このアーカイブについて

このページには、過去に書かれたブログ記事のうち開発カテゴリに属しているものが含まれています。

前のカテゴリは科学です。

次のカテゴリは技術です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。