Home > Tags > Python
Python
[HOM] カレントディレクトリをExplorerで開く
ものぐさな性分で、Explorerをいちいちダブルクリックしてパスを辿って行って、、とかもうホントにごめんなさい、大嫌いです。
そもそもダブルクリックが大層苦手なもので、エクスプローラ開いてからの
最初の目的地(たとえばシーンファイルのパスとか)へはパスを直打ちして移動することにしてます。
が、それも何回もやってると面倒なので、1個Houdini用のスクリプトを書きました。
現在開いているシーンのディレクトリを開くだけの簡易スクリプトです。
今開いてるシーンのデータをバックアップするだとか新しくフォルダ作るだとか、
そういうのは結構頻繁に行うので、比較的簡単に開きたいなと思って書きました。
以下にソース↓
Continue reading
- Comments: 0
- Trackbacks: 0
[Houdini] HOMデビューしました
そのまんまなんですが。
最近Houdini使ってて、Expressionなどもある程度ちょこちょこ使いつつ作業をしていたのですが、どこまでがノードでどこまでがExpressionでなのか、というところが徐々に見えてきました。
となったところで丁度良く大量のノードを扱いたくなりまして。
ざっくり言うと、アニメーション済みのオブジェクトをMayaに持っていくために、1つのオブジェクトをグループごとに切り分けて大量のオブジェクトを作成しないといけなかったのです。
それこそ数百という数だったし、グループ名にもルールはあるものの手で直せる量ではなかったため、これはスクリプトの出番だな、と思ってえいやっとPython書きました。
それに関するメモなど。
- Comments: 3
- Trackbacks: 0
DSL?
Schemeの本を読み始めてから、マクロという考え方に感化されています。
LispやSchemeはマクロという機能を使い、自分自身を書き直してしまうことが可能な言語です。
たとえば足し算を全く別の計算に置き換えたりとか、そういう感じです。
や、これはあくまでも一例で。これ自身に意味はないですwww
超パワフルなイメージだけ伝わればOKですwww
マクロを使用する際の目的として多いのが、DSL(Domain Specific Language)の作成などだそうです。
DSLというのは、用途を特定した言語です。
AwkやMakeなどは一種のDSLと考えて良いと思われます。
こういう処理をするならこういう書き方できた方がいいよなー、でもそれって言語仕様にかかわるから無理だよなー、なんて思うことが度々あります。
それはもしかしたらアルゴリズムの改善だけで実現することかもしれないですし、DSLの利用領域としいて適切なものではないかも知れないのでアレですが、まぁそう思うことがあるのです。
たとえばレンダリング用のバッチファイルを書くときに、ここでforループを書きたいとか、これ変数に入れたい、とか、連番リネームしたいけどいちいちPython書くの面倒、、とか、そういうところです。
まぁそれぞれ簡単なユーティリティツールがあればいいのですが、やりたいことはちょくちょく違っていて、あぁこれじゃ使えねぇ!!ってなることもしばしばあるので、ある程度広い局面に対応できるようなものがいいなと思うと、やはりDSL欲しいな、なんて思ってしまうのです。
全部突っ込んだらツールが巨大になってあれこれ覚えないといけないとかだと最悪すぎるので。。
そんなところからDSLには強い興味を持っていました。
ということでちょっくら調べていたのですが、Rubyはマクロを採用しているので、Rubyネタはちょくちょくあるようですが、Pythonにはマクロがないので出来ないものなのだと思っていました。
mynzさんのご指摘で気づきました。Rubyにはマクロはありません。メタプログラミングと完全に取り違えていました。大変申し訳ありません。
ただかなり引っかかる点もあって。
何かといえばPythonがLispに影響を強く受けている点です。
Lispのマクロは強力である反面、使用には注意が必要とされているので、Pythonの開発者がそれを嫌がった可能性は十分にあります。
でもそれによって実現可能な世界を簡単に捨てるでしょうか?
否!
僕にはおそらく別の何かを用意したと考えていいんじゃないかと思えたのです。
で、調べた。
Python で Rake を真似るとしたら
Python,Rubyの言語内DSL構築力:PythonでRakeをまねる場合を例に
なるほど。デコレータを使ってあれこれ行うわけですね。←まだよくわかっていない
Rake(Ruby版Make)のコードとPython版Rake(?)のコードを見る限り、Pythonでも似たようなことは出来そうです。
構文の好みもあるので、どっちがどうとは言えませんが、構文自体をゴリゴリ変更したいというような要望があるわけでもなければ、PythonスタイルのDSLは書けそうです。
もちろんどの程度のものかにもよるでしょうけども。
Rubyはブロック構文がやはりおもしろいですねー。
ブロックをブロックとして扱う(?)感覚ってのは他の言語にはないですね。
少なくとも今まで触ってきたものには、、、
あれこれ調べていたら俄然Rubyに興味が湧いたことは内緒です。。
またしても専門外のネタを書いたので、もろもろ間違いなどあるかもしれません。
何かあったら光速で突っ込んで頂きたいです。
で、早速DSLを使用したネタを考えてみました。
簡単に思いつくのはディスパッチャとかでしょうか。
かなり荒いアイディアですので、いろいろ考察が浅い点あると思いますがご容赦ください。
まずすごくシンプルなディスパッチャを考えてみます。
ユーザーがタスクを投げる、サーバーが受け取ってスレーブに投げる、スレーブは受け取ったタスクを処理して終了をサーバーに知らせる。
大体こんな感じでしょうか。
この場合、ユーザーが投げるタスクには、直接スレーブにわたるコマンドは含まれておらず、ディスパッチャが処理して適切なコマンドに変換します。
となると、ディスパッチャではそれぞれに対応した変換規則をもっていないとダメなわけです。
Mayaなら、AEなら、独自プログラムなら、、、
面倒くせーーー
じゃあたとえばユーザーがPythonのソースを送って、ディスパッチャはそれを処理すればどうだろうか。
でもイチイチPython書くのは面倒すぎる。
じゃあGUIを用意しよう。
でも結局送るコマンドはPythonのままだから、生のPythonじゃなくて、言語内DSLにしよう。
そうすればいったんファイルにだして書き換えたり、好きに手で書いたり出来る。
さらにPythonの機能もほぼ使えるはず。
便利!
ってことにはならんかな?
ただ単にきっちり設計して、API丁寧に揃えて、GUI付けてってやればいいだけなのかもしれないんですけど、他の人がやってることと全く同じこと考えても仕方ないので、可能性の1つとして考えてみました。
プログラムをかじったものなら大小あれどあこがれるオレオレ言語。
DSLならその欲望を少し満たしてくれるかも・・・?
この辺本気でやりたかったら、コンパイラの知識必要だなーと思いました。
ASTとかなんとかかんとか、さっぱりわからん。
PythonはJavaなどと同様に、VMを使用して実行するタイプのスクリプト言語で、一旦バイトコードにコンパイルされてから実行されます。(間違ってたらスマン)
Pythonには構文木にアクセスするためのモジュールがあって、コンパイルされたファイルからバイトコードが復元できるっぽいので、この辺知ってると一気にあれこれやれるようになるのかも?となんか良くわからないながら妄想を抱いています。
夢のみ広がる・・・
夢で終わらせないために現実的なところから意識してやっていく必要がありますねー。
人の命は有限なのだと肝に銘じて。
- Comments: 6
- Trackbacks: 0
[Python]まだ触ってないけどPyQt
- 2009/03/23 21:16
- Python
先日inagakiさんにお勧めしていただいたPyQt本を会社で買ってもらったので、読み進め中。
まだほとんど読んでないし実際にほとんど触ってないけど、ちょっと感想。
・クラス名に全部Qがつくのが若干ウザい。
→その代わり本では*でインポートしてるからモジュール名がついてない。慣れですかね。
・QtDesignerいいっすね。
→.uiファイルをそのまま読んだり、pythonコードを出力したりできるっぽい。
pythonコードにする方がなんとなく楽そうな予感。
・実はwindows版てPyQtだけインストールすればいいっぽい。
→もっといろいろ必要なものがあると思ってた。
でもこれは試してないので本当かどうかは怪しい。
なんとなく業界標準的なのはQtっぽいので、今後はQtでいろいろ作る予定。
すみません長いものには巻かれさせてください。
また読み進めたらいろいろ書く予定。
某社はこれでライティングシステムのUIとか書いてるって言うし、いろいろ挑戦してみたいなー。
- Comments: 7
- Trackbacks: 0
[Python] MayaのGUIからのコールバック(書いた後に間違いと判明。正直、すまんかった。)
- 2009/03/21 20:42
- Python
タイトルの通りなので、それを踏まえたうえで読むようにしてください。
一切責任は持たん!
てそれはこの記事に限ったことではないんですが:P
—————————————————————————大馬鹿野郎のささやきはここから↓↓
意味ねぇぇぇぇぇぇぇぇぇぇと思っていたものに対して、まぁこういう使い方もあるか・・・と思ったのでメモ。
- Comments: 2
- Trackbacks: 0
[Python] -dropCallback
- 16:35
- Python
Maya2008でGUIのdropCallbackオプションが効かない・・・。
dragCallbackは効くけど・・・。
なんなんだ・・・。
そういえば別のツールで、layoutDialogかなんかがまともに動かなくて、
文字列でMEL呼び出してどう、とかやった気がする。
- Comments: 0
- Trackbacks: 0
[Python] moduleなど
- 2009/03/20 23:23
- Python
今回のはあらかじめ、まとまらないかもという前提の下で書きますのでご了承ください。
自分でもまだ最適の解というか、どう扱ったらいいか悩んでる部分あるので。
そもそもどうやって書いたらいいかもちょっとわからないので、自分の頭の中をまとめる意味で、
今までやってた方法と、今日考えたというか思いついた方法とをつらっと書いてみます。
ちょwwwwwwお前それはあほすぎwwwwwwww
って思うところあったら突っ込んでください:P
- Comments: 5
- Trackbacks: 0
[Python] import
- 2009/03/14 20:53
- Python
まだイマイチimportの動きが把握できていないことがあって、
あれ、インポートしてんのに何でこないの?みたいなことが頻発。
結局__all__だとかもよくわからないで使っている。
ということで、ちょっと熟読してまとめる必要あるかも。
- Comments: 4
- Trackbacks: 0
[Python]特殊メソッド名
- 2009/02/27 17:41
- Python
ちょっと気になることがあったのでテスト。
引数として何が渡ってるのか気になって。
結果に関してはいろいろ思うところある感じです。
これを有効に使えたらクラス使うのがもっと楽になって随分楽にプログラミング出来るかな。
特に__call__あたりうまく使えたら結構楽しくなりそうな気が。
Continue reading
- Comments: 1
- Trackbacks: 0
Home > Tags > Python