WebStorm

JavascriptでCreateJSのお勉強。

いままで静的型付がいいと思ってVisual Studio CodeとTypescriptでやってましたが、時間空けては勉強する度にnpmプロジェクトの設定方法(特にwebpackの設定)を忘れては振り出しにもどるだったので。今回はJavascriptで始める!

あとVSCodeは忘れてWebStorm(デモ版)です。HTMLに埋め込んだリモートのCreateJSを指示されるがままにローカルにキャッシュするとJSDoc付(minify前)のソースがローカルに作られて、自分の.jsファイルからもメソッドのアノテーションが見れるとか、どういう仕組み?

PyCharmデモ版を少し使って、変数や関数の命名で怒られて挫折しました、そもそもPythonをMaya用に書くだけだったので使用頻度も少なかったのもあります。WebStormはElectronアプリの勉強も進めたいので、買い!かも。


PyQt5:QTableViewとかQStandardItemModelとか

Maya用の外部ツールを作成中ですが、Qtのデータモデル周りで壁にぶつかりまくり。

以下は習作として作ったものです。もちろん氏名は全部仮、疑似個人データ生成サイトサービスで作成。

データの読込や保存は実装していません。

  • QStandardItemModelを継承したデータモデル
  • ソート機能(QSortFilterProxyModel)
  • データの編集はQTableViewのセルを直接でなく、下部のエディタで編集。(QDataWidgetMapper)
  • データを修正すると赤文字にする(Qt.ForegroundRole)

などかな。GUIのレイアウト等は簡単で楽しいですが、QTableViewやQTreeView等のデータモデルが必要なビュー周りはムズイ。

今回成果は→TestTableView.zip

Python3.6.6とPyQt5で確認しています。TestTableView.pyがエントリポイントです。VSCodeの設定や.pylintrcなど環境によっては必要ないものも入っています。

ようやくこれでツールづくりに入れます。


Pythonスクリプトのデーモン化

ホッタラカシのSenseHATを動かしてみる。

LEDへ時計を上3段に表示、2進数表示なので可読性は全くなし。
4段目はメモリ使用率、残り4段をCPUコアの使用率を表示してみました。

Rasbian StreachにはSenseHAT用Pythonモジュールも既にインストールされている状態なので、難しい設定は無し。APIリファレンスを読めば特に難しいところもなく、、、

それだけでは面白くないのでsystemdによるデーモン(サービス)化もしてみました。十分な理解は出来てませんが、以下Pythonスクリプトです。

続きを読む “Pythonスクリプトのデーモン化”


Maya:ノードタイプの階層構造を取得する

記事投稿の頻度が少ないせいで、いつも記事の書き始めに困ります。一か月ぶりのくせして唐突に天気の話は無いし同じ理由で時事から始めるのもね。かといっていきなり本題から切り出すのも冷たい感じがします。

日を置かずに書くのが一番なんですけどね。

それでは本題、

containerBaseノードタイプをルートとした階層構造

Mayaのノードタイプの階層いわゆる上の図のような継承関係を知るには以下の2つがあります。(スクリプトはMaya2017で検証したものです)

一つ目、下は「mesh」ノードの継承元を調査します。

import pymel.core as pm
print pm.nodeType('mesh', inherited=True, isTypeName=True)

結果は、

[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape', u'mesh']

「containerBase」ノードをルートとして機能やアトリビュートを継承していることが分かります。(ホントのルートは「node」というノードタイプのはずなのですが、何故かここでは得られません)

二つ目は逆、「deformableShape」ノードを継承しているノードを調査します。

import pymel.core as pm
pm.nodeType( typeName, derived=True, isTypeName=True )

結果は(長いので適当に改行します)

[u'nParticle', u'nRigid', u'nCloth', u'nBase', u'particle',
u'motionTrailShape', u'snapshotShape', u'bezierCurve', u'nurbsCurve', u'curveShape',
u'gpuCache', u'aiVolume', u'aiStandIn', u'VRayMetaball', u'VRayFurPreview',
u'VRayVolumeGrid', u'VRayPlane', u'VRayMeshPreview', u'VRayClipperShape', u'xgmSplineDescription',
u'xgmSplineGuide', u'xgmSphereGuide', u'xgmCardGuide', u'xgmArchiveGuide', u'xgmSubdPatch',
u'xgmNurbsPatch', u'xgmSplineGuide', u'xgmSphereGuide', u'xgmCardGuide', u'xgmArchiveGuide',
u'xgmGuide', u'xgmSubdPatch', u'xgmNurbsPatch', u'xgmPatch', u'xgmDescription',
u'bifrostShape', u'THsurfaceShape', u'fluidTexture2D', u'fluidTexture3D', u'fluidShape',
u'subdiv', u'nurbsSurface', u'greasePlaneRenderShape', u'mesh', u'heightField',
u'surfaceShape', u'lattice', u'controlPoint', u'deformableShape']

2つ組み合わせると、例えば「deformableShape」を継承するノードタイプの継承元をすべて知る事が出来ます。

import pymel.core as pm
nodetypes = pm.nodeType( 'deformableShape', derived=True, isTypeName=True )
for nodetype in nodetypes:
    print pm.nodeType( nodetype, inherited=True, isTypeName=True )

結果は(前半略)、

[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape', u'subdiv']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape', u'nurbsSurface']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape', u'mesh', u'greasePlaneRenderShape']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape', u'mesh']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape', u'heightField']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'surfaceShape']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint', u'lattice']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape', u'controlPoint']
[u'containerBase', u'entity', u'dagNode', u'shape', u'geometryShape', u'deformableShape'] 

のようになります。ひとくちに「deformableShape」ノードと言っても上のように継承したノードタイプがたくさんあることが分かります。

さてここからが本題、上記をもってある程度継承関係を知ることはできますがこれを木構造(階層)構造で取得したい場合は残念ながらコマンド一発でとはいきません。

続きを読む “Maya:ノードタイプの階層構造を取得する”

Python奉行

初めてPyCharmを使ってみました、PEP8でのコーディング規約チェックが有効になってますが、すごいおせっかいなんですね。メンバ名は全て小文字だとか、コンマのあとは空白を入れろとか、インスタンス変数は__init__内で初期化しろとか、、、

メンバの命名がだいたいアウト

 

従いながら書いてたら全然はかどらない。かといってこの機能を全部オフってしまうとなんか他人にコードを見られた時ちょい恥ずかしい。

PEP8が他の言語にも共通した規約なら従いますけどね。

にしてもPyCharmは優秀!