Pythonの高速化するならCythonで…

 という話もあるので、めも。

結論から言うと

 既にPythonで書いたコードがあるなら、Cython向けに既存のコードを整えて.pydを生成する方が楽かも。
 まだPythonで書いたコードがなくても、Pythonに親しんでいる人はCythonがいいかも。

 ならC言語使って.pyd作る理由なんてないじゃん。という意見も出るかもしれないけど、Pythonで閉じた環境で完結できるならそうだと思う。

C言語を使うメリットを考えてみると

 以下のようなことが思いつく。
 ・既にC言語で何らかの処理を書いている
 ・他のC言語ベースのライブラリを併用する
 ・Cで書く方が最適化の効果も得やすい可能性(Cythonとの比較で)
 ・並列化処理(マルチスレッド)の導入
 ・ゴリゴリにクロックやメモリサイズを削る最適化をしたい

 ただ、ゴリゴリに最適化する人はかなり限定されるハズなので、実際には既存のCライブラリの利用やマルチスレッドの導入がメインになりそう。

 DCCツール向けに開発している人だと、開発用のAPIはDLL提供されてるし、大量データの計算にスレッド処理も導入したくなるハズなので、頑張ってC言語を覚えるのも面白いのではないかな、と思います。

 Windowsだと環境整備が面倒、とかはあるかもしれませんが。。

実行ファイルにPython埋め込みでスクリプト処理させる

 とりあえず、サンプルになっている処理を書き換える形で試してみた。

 動作的には、以下の通り。
 ・自作のEXEを起動
 ・EXE内でPythonモジュールのメソッドをコール
 ・呼ばれたメソッドは、渡された値を処理して値を返す

 ポイントは、呼ばれたメソッド内でimportするモジュールが、自作のEXE内で登録したモジュールであるという所。
 Pythonスクリプトから自作のEXEを経由して別のプログラムを呼び出し、その結果を実行中のPythonスクリプトで処理できるので、自由度の高いPythonスクリプトを記述できるようになる。

 いろいろデータハンドリングが面倒なので、すんなりは出来ないかもしれないが、より自由度の高いPythonスクリプトの実装が可能になる。
続きを読む 実行ファイルにPython埋め込みでスクリプト処理させる

Pythonの仮想マシンの処理

Pythonの仮想マシンの処理について解説しているページを見つけたので、めも。

dis/inspect モジュールと ceval.c を使った Python のハッキング

Python Virtual Machine 関連のソース・コード

python のデコレーター構文@decorate

このくらいコード読めないと、埋め込みの実装とか難しいかなぁ…

PythonでMayaのPlugin作るのは

API2.0を使った方がいい。速度が違うので…
前回の記事は旧APIを参考にしていたのだけど、検索で引っ掛かったのが旧APIだったので…

これからPluginをPythonで書くなら、API2.0を使おう。

ヘキサドライブさんの記事が参考になると思う。
API2.0も旧APIも基本C++のラッパーなんで、基本的な所は同じ。
ただAPI2.0の方が、よりPythonっぽい書き方で実行速度も改善されてる。(ものによって数倍速いみたい)

MayaPluginをPythonで記述

めも。

記述の参考。

https://download.autodesk.com/us/maya/2009help/API/zoom_camera_cmd_8py-example.html
https://download.autodesk.com/us/maya/2009help/API/motion_trace_cmd_8py-example.html

たぶんplugin1つに複数コマンドを内包させるのは、registerCommandを複数呼ぶだけだと思う。

その後

試しに2つ定義してみたら、別々の実装を処理しに行った。
なので、複数コマンド用にクラス定義で実装を増やせばOK.

Boost.Pythonをビルドするには…

ライブラリのビルドがデフォルト設定に入ってないっぽいので、めも。

基本的な手順は、以下。
C++のクラスをPythonから使うためにBoost::Pythonを使うまで

自分の場合は、”user-config.jam”を書かないと駄目だった。

boost_1_71_0の場合には…
“boost_1_71_0\tools\build\example\user-config.jam”を、解凍した“boost_1_71_0”フォルダ直下にコピーして編集。
※Python3.7の場合は、以下のように記述した定義を一番最後の行にでも書いておく。

b2の実行時の指定を、以下のような感じに。
※ なかなかビルドがうまくいかなくて最終的に “–with-python” 指定をしているので、もしかするとPythonライブラリだけしかビルドしないかも…

Boost.Pythonを使うと

 .pyd モジュールを作る時の記述が、C言語で書くよりかなり簡略化できてちょっと試す時に便利。
 .pydファイルはDLLなので、関連へのパスを通しておく必要がある。(例えば、boostのlibフォルダ)
 もしimportで.pydモジュールがロードできない時は、関連のdllを読み込めてないので注意。

 Cで書くと、こちらの参考サイトみたいに、いろいろ定義が必要になる。

 ビルドについては、以下のような感じで。

記述時の参考に

【Python C API入門】C/C++で拡張モジュール作ってPythonから呼ぶ -前編-
c/c++をラップしてpythonで使えるように

続きを読む Boost.Pythonをビルドするには…

キャンプをしてみて思ったこと

一緒に仕事している人たちとキャンプをしてきた。
キャンプしてみて、いくつか思ったのでメモしておく。

・集合時間には余裕をもって。
 めっちゃ遅刻してしまった。
 バイクに荷物を積む時間を計算に入れてなくて、結構時間が掛かっていたり。
 高速道路を使ったら事故渋滞に合い、遅刻の連絡する為にSAに入ったら駐車場出口渋滞にもハマり…
 そもそもナビの時間表示も信号待ちは計算に入ってないし、理想値過ぎて全然余裕なし。
 知らない道には、充分な余裕が必要だった。

・バイクに荷物を積む時は、事前に振動対策が必要。
 自分のバイクはサドルが結構ふかふかなので、しっかり締めたつもりでも振動で荷物が動く。
 特にボックス類を締め付け固定する場合は、前後にズレないような対策が必要。
 これは、ツーリング用の大容量のバイクバッグを使った方が良さそう。

・撤収作業も結構時間が掛かる。
 洗い物は2時間前には終わらせて、撤収作業に集中できるようにした方が良い。
 撤収時もテントの収納は最後になってしまうので、収まる場所はなるべく最初から確保しておいて、
最後に入れればOK。という状態にしないと、荷物が揃わないと収納パズルが始められない。という状況だと撤収時間に間に合わない可能性大。
 あと、バイクへの積み込み時間も慣れないうちはやり直し…なんてことになりかねない。
 ※積載に必要なフックやロープを荷物の奥に仕舞い込んでいて再開梱なんてことになったら目も当てられない…

・材料をあまり買い過ぎないように。
 あれを食べよう。これも食べたい。とか思ってると、ついつい買い過ぎて撤収時に困る。
 特に生鮮食品。帰りにはただのゴミ扱いに成りかねないので、気を付けたい。

・仕込みは大事。
 キャンプ場で炊事をするにも、場所が必ず使えるとも限らない。
 まな板もない環境で料理。みたいなパターンもあり得ると考えたら、基本的に材料を放り込めばOKな料理がベスト。手間のかかる料理を食べたい場合は、事前に仕込んで持っていくのが理想的。
 ジャガイモやニンジンなら、まな板なくてもいいけど。たまねぎやキャベツを切るのはちょっと無理だろう。事前に、家でシミュレーションついでに試してみればわかる。

・一人用テントは暑い。4人用テントに1~2人では寒い。
 容量に対しての発熱量の問題。
 大きいテントを使う時も寝る人数を計算しないと、時期によっては寒い。
 逆に、一人用テント基本的にちょっと暑い。そのせいで結露もしやすい。撤収時にも困るので、撤収時に使うふき取り用の乾燥した雑巾は必ず2枚くらい持っていきたい。あと換気用の穴もちゃんと開けておかないと熱がこもる。「閉じておかないと寒いだろう」と思うかもしれないけどまずは開けておき、どうしても寒い時に閉じる方が良さそう。
 あと、寝る時にミズノのブレスサーモ系の下着を一揃え用意しておくと快適に眠れる。あと、首元がジットリ濡れないように頭の下に敷くバスタオルを用意しておくといい。ブレスサーモの布団というのもあるので、汗かきの人とか気になる人は検索してみればいいかもしれない。

・耳栓の用意を。
 神経質な人は、寝る時用に耳栓の用意を。
 消灯を過ぎても騒ぐ輩は、どこにでもいる。キャンプなら尚更だった。
 人によっては、川のせせらぎや虫の声が気になる場合もあるだろう。キャンプの醍醐味なのだけど、気になる音はシャットアウトできるように用意くらいはしておいた方が楽しく過ごせる。
 あと、これは大丈夫だと思うけど、あまりに静寂が心地よくて目覚ましが聞こえなくても起きられるようにさっさと寝よう。

・睡眠時間は大事。
 慣れないことをやって気が張ってるし体も疲れていると思うので、それなりにしっかり寝ないと翌日持たない可能性大。
 特に、バイクツーリングみたいな場合だと運転中に意識が散漫になったり、体に不調が起こるかもしれないので、気を付けたい。

・お風呂の問題。
 シャワー設備がある場合は良いが、そうでない場合は温泉など近くにそういう施設がある場所を選びたい。
 汗臭いまんまでは買い出しに行くのもはばかられるし、連日キャンプの場合には1日の汗を流せるように、ちゃんとその辺の対策を取っておきたい。
 最悪湯を沸かして体を拭くだけでも違うので、折り畳みバケツ(手提げ袋状のものもある)を持っておくと便利。

・荷物リストを作ろう。
 チェック形式のリストを作って、忘れ物をしないようにしよう。
 現地についた後で、「あれ持ってくるの忘れた~…」となっても後の祭り…
 また確実に現地調達が可能な場合は荷物に入れなくても良いが、現地調達忘れが起こらないように、現地調達リストも併せて作っておいた方がいい。(現地調達リスト忘れた~!って事にならない様に留意。)

{}は波括弧?

僕より10歳は若い人と話してて、気づいたことメモ。

括弧の呼び名が、昔と今では違ってる。
昔は、括弧は「大・中・小」と呼んで区別していた。同じ順番で「[], {}, ()」。
今は、括弧は「角・波・丸」と呼ぶそうな。

話の中では、「え…中括弧ってどれですか?」と言われ、手で宙に描きながら「え?ふにゃふにゃっとした奴…?」などと表現したら伝わったけども、、、

検索したら、括弧についてという記事を書いている人もいた。

なるほど。

テクスチャやマテリアルのリストを取得する

fileノードとかそういうのを取得するのに、pluginによるノードとかどうやって集めれば??というのが、前から疑問だったので調べてみた。
要点としては、「HypershadeのTextureタブに列挙される要素の取得がしたい。」という話です。

結果としては、以下のコマンドで取得できた。

こっちは、マテリアル。

そのほかのタブ

ユーティリティ:DefaultRenderUtilitiesFilter
レンダリング:DefaultRenderingFilter
ライト:DefaultLightsAndOpticalFXFilter
カメラ:DefaultCameraShapesImagePlanesFilter
シェーディンググループ:DefaultShadingGroupsFilter
ベイクセット:DefaultBakeSetsFilter
アセットノード:DefaultContainerNodeFilter

会社における無駄とは…

検索した際のTop3件をメモっておく。

業務の7大ロス
      1. 情報ロス
      2. 作業ロス
      3. 停滞ロス
      4. 物流ロス
      5. 能力ロス
      6. 時間ロス
      7. 品質ロス
仕事のムダを減らすためには、ムダを見える化すること

ムダをなくして効率化をするためには、ムダを相手に気づいてもらう必要があります。しかし、「これはムダです」と思いつきのように伝えるだけでは、相手が気づくことはありません。むしろ反発されるだけです。

そこで必要になってくるのが、ムダの度合いを数値化したり、仕事の流れの悪さを図解したりすることです。

人は、数字による比較や、絵で滞っている様子が見えると、理解が深まります。

業務効率化のメリットとは
      • ムダな作業がなくなる
      • コストをカット
      • 業務の見える化
出来そうなこと

担当者に、無駄を感じた作業について登録して貰う。
担当者には、以下の情報を入れて貰う。

      • プロジェクト
      • 作業項目
      • 作業時間
      • 無駄に感じた要因

⇒プロジェクトの締め処理をした際に、自動計算して無駄に感じられた時間を算出。
(プロジェクト進行中に見えると、返って問題が見えなくなる場合もあるので、最終的な振り返りを促す)

⇒可能ならば、各員のコスト計算も同時に行って、具体的な金額を見える化する。
(経営陣が作業現場の状況に目を向ける必要がある)

⇒業務の一環として、定期的な振り返りを行って、無駄についての評価を行う。
(会社全体として、なにが無駄になっているのかを評価しなくては意味がない。プロジェクト毎に行うのは効率が悪い可能性もあるので、四半期単位か半年単位で、目に付いたプロジェクトを題材に振り返るのが効率が良さそう。同時に、問題がなかったプロジェクトについても振り返り、なにが良かったのか評価して欲しい。)

続きを読む 会社における無駄とは…

Maya起動用ランチャー

少し前にMayaをコマンドラインから起動する件を投稿したけれど、なかなかコマンドラインやら環境設定やら難しい…という場合も多そうだよな。と思ったのでググってみたら公開している人がいらっしゃった。

arubertoson/maya-launcher

Pythonで単純に設定を管理するタイプのコマンドライン・スクリプトだけど、要はこういう話なので参考になるかも。

過去の投稿

VSCodeの環境を入れる

この辺かな~って感じのメモ。

会社ではVSCode利用者増えたし、そろそろ重い腰を上げてみようかと思ったり。。
※今回は、基本インストール不要のポータブル環境を検討。