日々適当
hibitekitou

MayaでのGUI

cg |2016-01-29

前書いたスクリプトをちょっと改造して、選択したオブジェクトのUVのリストを取得するというにしてみました。

import maya.cmds as cmds

#UVのリスト
def listUVSet(*args):
    uvSets = cmds.polyUVSet(args[0], q=True, allUVSets=True) 
    return uvSets

def changeUI():
    objs = cmds.ls(selection=True)
    
    uvSets = []
    
    if len(objs) > 0:
        cmds.textField(txt, e=True, text=objs[0])
        shape = cmds.listRelatives( objs[0] , shapes=True )
        uvSets = listUVSet(shape)
    else:
        cmds.textField(txt, e=True, text='-')
    
    menuItems = cmds.optionMenu(uvSetsMenu, q=True, itemListLong=True)
    if menuItems:
        cmds.deleteUI( menuItems )
    if len(uvSets) > 0:
        for uvSet in uvSets:
            cmds.menuItem(label = uvSet, parent=uvSetsMenu)
    else:
        cmds.menuItem(label = 'None', parent=uvSetsMenu)
        
        

try:
    if cmds.window(win, exists=True):
        cmds.deleteUI(win, window=True) 
except:
    pass 



win = cmds.window('M4G_Window_Selected', title='TEST')
cmds.columnLayout(columnAttach=['left', 5], rowSpacing=10)
txt = cmds.textField(  text='---')
uvSetsMenu = cmds.optionMenu( label='UVSets' )
cmds.menuItem(label = 'None')
cmds.showWindow(win)

jobNum = cmds.scriptJob( event=["SelectionChanged",'changeUI()'], protected=True ,parent=win) 

こちらは、optionMenuって命令で一般的にはドロップダウンリストと呼ばれるものを出しています。ちなみに似たようなUIでコンボボックスってのがありますけど、こっちは値をユーザが編集可能なものという位置づけだそうですね。

というわけで、optionMenuでそれを出す仕組みを作り、メニュー内の項目はmenuItemで追加してくのだそうです。menuItemで追加した要素の親がoptionMenuで作成したものという構造ですね。だから、メニューの要素を変更する時は、まずメニュー要素を削除の上

cmds.menuItem(label = uvSet, parent=uvSetsMenu)

というように、親を指定してどのドロップダウンリストか指定して、そのなかにメニュー要素を入れていくという構造にしてみております。

なを、scriptJobですけど、前回やった時はparentフラグをつけていませんでした。これで親をウインドウにすることで、ウインドウが消えたらscriptJobも消えるという事をしています。これしとかないと発行したscriptJobは残り続けるようで、このスクリプトの場合、ウインドウが閉じたのにスクリプトを実行しようとして、でも実行するための関数は既に無いから、何かオブジェクトを選択するたびにエラーを吐く、ということになっておりました。

コメント ( 0 )|Trackback ( 0 )

プレビューで開いたPDFからエクセルに画像をペーストする

mac |2016-01-27
あ、Excel 2011の話です。2016はまだ買っていません。

エクセルファイルの中に画像を配置するのって嫌いなんだけど、お仕事的にそうせざる得ない事もありますんでやります。画像のソースはPDFに配置された画像です(サムネイルのカタログをPDFで出力したもの)。



で、Macで作業をしていると、PDFファイルはAcrobatを使うよりプレビューを使ったほうが手軽なので、そっちで開いて、長方形の選択ツールを使って範囲選択の上でコピーをし、エクセルにペーストするわけですね。ところが、こうして作成したエクセルファイルのファイルサイズがあり得ない巨大さになってしまうのです。

エクセルでペーストする時、ペーストの選択肢は二つあります。



普通のペーストと形式を選択してペースト...です。
形式を選択してペースト...は、この場合、PDFか図かの選択肢となります。



それぞれでペーストしてみました。



一見すると、全部おんなじ用にペーストされているように見えます。
そこで、この3つの画像を全部選択し、幅を大きくしてみます(拡大してみるということです)。



普通にペーストしたりPDFでペーストした時に比べ、図でペーストした時の結果が明らかに劣化しているのが分かりますな。PDFで貼り付けるとソースの解像度を保持しているように見えます(故にファイルサイズも巨大になる可能性があります)。
たぶんファイルサイズを小さくしたいなら図でペーストしてやるのがいいんでしょうが、画質の劣化が許容範囲を超えてしまいそうで心配です。

ところで、PDFファイルの編集機能をプレビューは持ちませんから、プレビュー上でPDFをコピーすると、矩形選択していたとしても実は1ページ分の情報が丸々クリップボードに入るようです。これは、Photoshopなんかにペーストしようとすると分かります。



余談ながらAffinity Designerにペーストすると、各絵が別レイヤーとして(別オブジェクトとして)ペーストされます。ちょっとほぉと思いました。

レイヤーが6つ(写真と同じ数)できているのが分かりましょうか

このように、プレビューでPDFを矩形選択してコピーすると、ページ丸ごとのコンテンツの情報(そこには矩形選択の選択範囲も含まれる)がクリップボードに送られるようなのです。PDFフィアルは単なるビットマップではなく、色々な素材をまとめた物なのだから、そうなるのがむしろ自然なのでしょうが、直感的には理解しづらい挙動を見せてくれますね。
で、今回の例では再現しなかったのだけど、仕事で扱われた例で、エクセルに貼り付けられたものが、PDFの1ページ丸々のコンテンツを矩形選択した形で切り抜いたもの、という状態になりました。つまり、今回の例でたとえると、1ページ6枚の画像が全部張り付いているのだけど、矩形選択された範囲(1枚の写真)しかエクセル上では見えていない、という形になっていたわけです。ちなみにどうしてそれが明らかになったのかというと、エクセル上でその画像をコピーしてPhotoshopにペーストしてみたら、エクセル上では見えていなかったPDFの時の1ページが丸々現れたからです。そりゃ、ファイルサイズも膨らむわけです。

というわけで、pdf上の画像を取り扱う時は注意しましょうね、という趣旨のエントリでございました。たぶん、エクセルに貼り付ける前に、確実にビットマップデータだけの状態にしてから作業をしたほうがいいのでしょうね。プレビューだけで作業をするなら、とりあえずJPEGとかで書き出してから、それに対して矩形選択してコピーするとか、ね。
コメント ( 0 )|Trackback ( 0 )

MayaでのGUI

cg |2016-01-26

イベントに反応してリアクションを返すっての。
選択したオブジェクトの名前と位置を表示するというものを作ってみました。これで合っているのかは知らんけど、とりあえず目的としたところはできているっぽい…

GUI的にはtextFieldとfloatFieldGrpを使ってみた。

textFieldはそのままですね。floatFieldGrpはxyzとかrgbaとか、値を塊で持たせたい時に使うみたいです。textFieldGrpも存在します。余談ながら、textFieldあるいはtextFieldGrpを使って、Pythonの文字列を評価する関数eval()を使えば、フィールドに入力された数式から値を返すというSoftimage的なUIを作れるはずですね。

import maya.cmds as cmds

def changeUI():
    objs = cmds.ls(selection=True)
    if len(objs) > 0:
        cmds.textField(txt, e=True, text=objs[0])
    else:
        cmds.textField(txt, e=True, text='-')
    
    try:
        pos = cmds.xform(objs[0], q=True, worldSpace=True, translation=True)
        cmds.floatFieldGrp( xFormField , e=True, value1=float(pos[0]), value2=float(pos[1]), value3=float(pos[2]) )
    except:
        zero=float(0.0)
        cmds.floatFieldGrp( xFormField , e=True, value1=zero, value2=zero, value3=zero )
 
try:
    if cmds.window(win, exists=True):
        cmds.deleteUI(win, window=True) 
except:
    pass   

win = cmds.window('M4G_Window_Selected', title='TEST')
cmds.columnLayout(columnAttach=['left', 5], rowSpacing=10)
txt = cmds.textField(  text='---')
xFormField = cmds.floatFieldGrp(numberOfFields=3, label='Pos: ', columnAttach=[1, 'left', 5], columnWidth4=[30,50,50,50], value1=100, value2=100, value3=100)

cmds.showWindow(win)

jobNum = cmds.scriptJob( event=["SelectionChanged",'changeUI()'], protected=True  ,parent=win) 

発生したイベントを取得するのはscriptJobってのを使うのだそうだ。eventフラグの"SelectionChanged"って部分がどのイベントに対してリアクションをするかを指定した部分。イベント以外にも条件が変わったり(conditionChange)、アトリビュートが変わったり(attributeChange)といった条件でも駆動するようです。で、今回の場合、選択したものが変わった時にchangeUI()って関数を実行するようにしています。

ちなみにこちら書いている時、# Error: line 1: invalid syntax # が続出しました。
floatFieldGrpに値を書き込む時、xformで取得したリストの値を直接書き込むとダメで、floatに明示的に変換してやるといけたのだけど、何でなんでしょ?

コメント ( 0 )|Trackback ( 0 )

あんまりうまくいかなかった

pictures |2016-01-24
本当はダイヤモンド富士を狙いたかったのだけど、この時期だとそれが見える範囲はまだ内陸。
ということで夕方の富士山をおさえられればと南房総に行ってみたわけです。ちなみに館山でダイヤモンド富士を狙おうと思うと、5月半ばか7月末ぐらいになるようですね。
ってことで鋸山に登ってから館山に行こうかとか考えたり、鴨川で日の出をとか考えたりしたんだけど、朝起きたのが遅かったといういつものパターンで、ほとんど館山で夕日のみというプランとなってしまいました。それでも夕日までには少し時間的余裕があったので、鴨川方面経由で行くこととしました。今回は前回鴨川方面に行ったのとは違い高速を使ったんで、全く意識していなかったのですけど、意図せず前回あまり良い写真を撮れなかった清水渓流広場脇を通ることになったんで、ちょっと寄ってみました。

君津市 16.01.22


やはりいまいちですね。今回は時間が遅すぎたと言った感じでしょうか。向こうから陽がさす時間帯を狙わねばなりません。まぁ半ば予想していた結果だったんで、それほど落ち込むこともなくそこを後にし、太平洋にでました。
鴨川の道の駅、オーシャンパークは朝日を撮ろうとする時によさげなスポットらしいってネットを見ると書いてあるので印象に残っていたんで寄ったんですけどね。このシーズン、この時間はまぁまぁって感じでございます。

鴨川市 16.01.22


そういえばここ(鴨川)は大洗と比較してアニメとのコラボの失敗例としてあげられる町ですけど(劇中で鴨川を連呼するから反感を持たれたとかなんとか)、ともあれ道の駅にもそんなコーナーがありましたな。

鴨川市 16.01.22


それなりに楽しんで観ていた記憶はありますけど、セカンドシーズンの途中までしか観ていないので、そのうち観ないとなぁ。

ということでここで遅い昼飯を食い(選択を誤ったと後悔したけど(^^;←他のものを頼めば良かったという意味でね)、もう15時回りつつあったので館山に向かいます(館山での日の入り時刻はほとんど17時って時間なので16時過ぎには現地にいたい)。車で50分ぐらいですかね。目指すは、特に理由はないのですけど、沖ノ島です。

館山市 16.01.22


夏は海水浴場としてにぎわうのでしょう。あるいは釣り場としてもこのあたりは人気のようです。でもこのシーズンこの時間のここは閑散としております(沖ノ島に至る行程(館山自衛隊裏護岸)には釣り人が結構いましたけどね)。振り返ると海上自衛隊の航空基地があり、たぶん自衛官なのでしょうけど、フェンスにそってぽつぽつジョギングしている人がいました。
ともあれ、島に向かいます。人も少なく、この日は風も弱くて良い日和だったんだと想います。

館山市 16.01.22


残念ながら富士山は見えませんでした。

館山市 16.01.22


館山市 16.01.22


残念だけど、こればっかりは運だからねぇ。
日が沈むまで粘って、家路につきます。
高速が混まなければ千葉県の先っぽも結構近いので、今度はダイヤモンド富士の時にでも訪れたいっす。このあたりでダイヤモンド富士が見られる5月半ばの土日がちょうどいい時期になるようなんで(あーでも土日だと帰り道の高速とか混みそう…)。でも5月なんて雲とか霞とかで富士山が見えない率が高そうだなぁ…。



ちなみに、今日、ダイヤモンド富士を撮ろうとチャレンジしてみたんですけど、目測が狂いまして、ずれました。もうちょっと場所をずれないと山頂にはかかってくれなかったってことっすな。山に太陽がかかりはじめてから撮影位置を修正するという事は時間的に困難なので、もっとちゃんと精度を出して撮影地を決めないといけませんなぁ(たぶん数十メートルとかそんなオーダーなんだけど)。

手賀沼 16.01.24
コメント ( 0 )|Trackback ( 0 )

Parallels Desktop 10 の Windows 7を10にした

mac |2016-01-22


仮想マシンでのWindows 7や8.1から10への無償アップグレードが出来ないってお話を聞いていたこともあり、放置していた案件ですけど、「仮想マシンを Windows 10 にアップグレードするには」[kb.parallels.com]というように公式が案内していることを知りまして、今日、適用してみた次第。
マイクロソフトが対応済みと言うことのようで、アップグレードツールをマイクロソフトからダウンロードの上実行という流れでございました。
指示に従っていくと特に問題もなくアップグレード処理が進み



で、無事インストールが終わりました。



なぜかフォントが汚い感じでしたが、ClearTypeがオフだったのが原因でした。これがオフだったのはなんでなんでしょうね? まぁ別にいいけど。



いちおう、Softimageも動いているようですが、安定動作するかはわかりません(^^)
けど、MacBook Pro側のWindows 8.1もWindows 10に上げちゃおうかね。



ちなみにこちらの環境はつぎ足しつぎ足しの結構古めのイメージなので、Softimageは2010から入っています。ただ、2010のライセンスを取得できるライセンスサーバが動いていないので、使うなら2013以降ということになります。



そんなわけでParallels Desktopの10で問題なさそうに見えますけど、最新バージョンは11であり、Windows 10やEl Capitanに完全対応するのはその11からと開発元はおっしゃっております。具体的にどの程度違うもんなんでしょうかね。アップグレード代は5300円なのですが、その価値があるのかどうなのか。
コメント ( 0 )|Trackback ( 0 )

MayaでのGUI

cg |2016-01-21

以前Qt云々でやろうとしたけど、その後全然Mayaを触らず、しかして最近一つツールを作らねばならぬ事態となったため、maya.cmdsでのGUI作成をお勉強です。

ウインドウを作る

import maya.cmds as cmds

win = cmds.window('test_Window', title='Test Window', widthHeight=(546,350) )
cmds.showWindow(win)

この場合、ウインドウのタイトルがtest_Windowとなり、これを名前の衝突が生まれないように決めてやる必要がある(ということで、会社名や個人名を名前の頭につけることが多いそうで)。ということで、これで作られたウインドウが開いたままで、同じtest_Windowという名前のウインドウを作成しようとすると"Object's name 'test_Window' is not unique."とかいうエラーが出て失敗することになります。もしそうしたいなら、すでに開いているウインドウを破棄して(ウインドウを閉じるか、deleteUIコマンドを走らせる)、その上で実行する必要があるようですね。

cmds.deleteUI(win, window=True)

というわけで、Pythonを使っているのだからウインドウクラスを用意すると良いと参考にしている書籍には書いてありました。んが、とりあえずクラス云々の中身、GUIの部品をどう作るかが興味の対象です。

メニューを作る

import maya.cmds as cmds

if cmds.window(win, exists=True):
    cmds.deleteUI(win, window=True)

win = cmds.window('test_Window', title='NEW TITLE2', widthHeight=(546,350), menuBar=True)
#ここからMenu 1メニュー
cmds.menu( label='Menu 1' )
cmds.menuItem( label='Command 1')
cmds.menuItem( label='Command 2')
cmds.menuItem( divider=True )
cmds.radioMenuItemCollection()
cmds.menuItem( label='Radio Button1', radioButton=True, enable=True )
cmds.menuItem( label='Radio Button2', radioButton=False, enable=True )
#ここからMenu 2メニュー
cmds.menu( label='Menu 2' )
cmds.menuItem( label='Command 3')
cmds.menuItem( subMenu=True, label='Command 4' )
cmds.menuItem( label='Sub Menu 1' )
cmds.menuItem( label='Sub Menu 2' )
cmds.menuItem( label='Sub Menu 3' )
cmds.setParent( '..', menu=True )
cmds.menuItem( label='Command 5')
cmds.showWindow(win)

Menu 2に置いて、サブメニューを作っているけど、その下にsetParentを実行しているのがミソですか。
で、メニューを実行した時にある関数内の処理を行わせようとすると、menuItemコマンドのcommandフラグで関数を指定するのだそうです。

import maya.cmds as cmds

def Cmd1( *args):
    cmds.about()

if cmds.window(win, exists=True):
    cmds.deleteUI(win, window=True)

win = cmds.window('test_Window', title='NEW TITLE2', widthHeight=(546,350), menuBar=True)

cmds.menu( label='Menu 1' )
#メニューを選ぶと関数が実行される
cmds.menuItem( label='Command 1' , command=Cmd1 )
cmds.showWindow(win)

なんだけど、Cmd1を呼び出すにあたって、引数を渡すことができないという問題があるようです。
ちなみに*argsは余った引数を収めるたプルとして機能するらしいですな(Pythonの機能だそうです。頭にアスタリスクをつけた変数の取り扱いのお話し。付け加えると**とアスタリスクを二つ重ねると辞書として機能するらしいです)。

というわけで、functoolsモジュールのparial()関数を使いなさい、だそうです。Maya ヘルプ: Python で初めてスクリプトを記述する場合のヒントとコツ[help.autodesk.com]

import maya.cmds as cmds
from functools import partial

def Cmd1( *args):
    print(args)

if cmds.window(win, exists=True):
    cmds.deleteUI(win, window=True)

win = cmds.window('test_Window', title='NEW TITLE2', widthHeight=(546,350), menuBar=True)

cmds.menu( label='Menu 1' )
#引数に3つのテキストを渡そうとしている。
cmds.menuItem( label='Command 1' , command=partial(Cmd1, 'A', 'B', 'C') )
cmds.showWindow(win)

上記スクリプトの結果として、実行すると('A', 'B', 'C', False)ってのがログに記されます。


ボタンを作る

import maya.cmds as cmds
from functools import partial

def Cmd1( *args):
    print(args)

if cmds.window(win, exists=True):
    cmds.deleteUI(win, window=True)
    

win = cmds.window('test_Window', title='TEST WINDOW',widthHeight=(600,350))

cmds.rowLayout( numberOfColumns=3, \
                columnWidth3=( 200, 200, 180  ), \
                columnAttach=( (1,'both',20), (2,'both',10), (3,'both',5) )
              ) 
cmds.button( label='Command 1', height=26, command=partial(Cmd1, 'A', 'B', 'C') )
cmds.button( label='Command 2', height=26, command=partial(Cmd1, 'D', 'E', 'F') )
cmds.button( label='Command 3', height=26, command=partial(Cmd1, 'G', 'H', 'I') )

cmds.showWindow(win)

上のコードでは子を水平方向に並べるrowLayoutでボタン配置を定義しています。ボタンなどのコントロールには親となるレイアウトが必要ということです。
numberOfColumnsで子(ボタン)の数を3と指定し
columnWidth3でその子(ボタン)が3つの場合のそれぞれの幅を指定しています。
columnAttachではそれぞれのボタンの設定ですね。3つの値を持つタプルでボタンごとの設定をしています。タプルの中身は、一つ目はボタンのインデックス(1スタート)。二つ目はアタッチメント(取り付け)の位置の指定でしょうか。取る値はleft, both, rightとなります。bothにしないと、ボタンのサイズがラベルの幅になってしまうようです。三つ目の値がオフセット値でbothにしている時、ボタンの左右の余白の値になるみたいです。
上を実行すると、下図のウインドウが出来上がるわけですが、幅600のウインドウに対し、
一つ目のボタン:幅が200で余白が20
二つ目のボタン:幅が200で余白が10
三つ目のボタン:幅が180で余白が5
となりまする。なんとなくわかったような気がしたような…

とはいえ、もっとレイアウトをちゃんとコントロールしたい時、formLayoutを使うのだそうです。

import maya.cmds as cmds
from functools import partial

def Cmd1( *args):
    print(args)

if cmds.window(win, exists=True):
    cmds.deleteUI(win, window=True)
    

win = cmds.window('test_Window', title='TEST WINDOW',widthHeight=(600,350))
mainForm = cmds.formLayout( numberOfDivisions=100 )

b1 = cmds.button( label='Command 1', height=26, command=partial(Cmd1, 'A', 'B', 'C') )
b2 = cmds.button( label='Command 2', height=26, command=partial(Cmd1, 'D', 'E', 'F') )
b3 = cmds.button( label='Command 3', height=26, command=partial(Cmd1, 'G', 'H', 'I') )

cmds.formLayout(
            mainForm, edit=True, \
            #フォームの境界にボタンのどのエッジを固定するかの指定。オフセット値を5としている。
            attachForm = ( [ b1, 'left', 5 ], \
                           [ b1, 'bottom', 5 ], \
                           [ b2, 'bottom', 5 ], \
                           [ b3, 'bottom', 5 ], \
                           [ b3, 'right', 5 ]), \
            #ボタンをフォームのどの位置に固定するかの指定。b1の右辺を33%の位置に、b3の左辺を67%の位置に。
            attachPosition = ( [ b1, 'right' , 0, 33], \
                               [ b3, 'left' , 0, 67] ), \
            #真ん中のボタンb2が左右のボタンの隣接する辺に固定ための設定。
            attachControl = ( [ b2, 'left', 4,  b1 ], \
                              [ b2, 'right', 4, b3 ] ),\
            #すべてのボタンの上辺は固定しない。
            attachNone = ( [ b1, 'top' ], [ b2, 'top' ], [ b3, 'top' ] )
            )

cmds.showWindow(win)

mainForm = cmds.formLayout( numberOfDivisions=100 ) をウインドウを作成するすぐ後ろに設定することで、mainFormがWindowsのすぐ子供になり、これの子供に各コントロール要素を配置していくイメージのようです。numberOfDivisions=100はウインドウの左上を基準として、右下が縦横それぞれ100となるという設定。0~100%の範囲で位置を指定するための設定みたいです。

rowLayoutを削除し、formLayoutを追加しています。また、作成したボタンはb1~b3の変数に入れています。

これにより、Mayaのウインドウっぽいボタンが三つウインドウの下に並ぶもんが出来上がりました。

なので、これをクラスとして保持しておけば、いろいろ流用できて便利だよってのが参考書籍のおっしゃる内容でございます。

でもって、空いている上側のスペースにラジオボタンを設定してみます。

import maya.cmds as cmds
from functools import partial

def applyAndCloseBtm(*args):
    applyBtm()
    closeBtm()
def applyBtm(*args):
    urlList = {
        1:'http://toyota.jp', \
        2:'http://www.nissan.co.jp', \
        3:'http://www.honda.co.jp', \
        4:'http://www.subaru.jp', \
    }
    
    siteIndex = cmds.radioButtonGrp(
                                siteUrl, q=True, \
                                select=True \
                                  )
    cmds.launch(webPage=urlList[siteIndex])                              
def closeBtm(*args):
    cmds.deleteUI(win, window=True)

if cmds.window(win, exists=True):
    cmds.deleteUI(win, window=True)
    

win = cmds.window('test_Windowc', title='TEST WINDOW',widthHeight=(600,350))
mainForm = cmds.formLayout( numberOfDivisions=100 )

b1 = cmds.button( label='Apply and Close', height=26, command=applyAndCloseBtm )
b2 = cmds.button( label='Apply', height=26, command=applyBtm )
b3 = cmds.button( label='Close', height=26, command=closeBtm )

siteUrl = cmds.radioButtonGrp(
                            label='WWW: ',
                            labelArray4=[ 'TOYOTA', \
                                          'NISSAN', \
                                          'HONDA', \
                                          'SUBARU' ], \
                            numberOfRadioButtons=4, \
                            select=1 \
                             )

cmds.formLayout(
            mainForm, edit=True, \
            
            attachForm = ( [ b1, 'left', 5 ], \
                           [ b1, 'bottom', 5 ], \
                           [ b2, 'bottom', 5 ], \
                           [ b3, 'bottom', 5 ], \
                           [ b3, 'right', 5 ]), \
            
            attachPosition = ( [ b1, 'right' , 0, 33], \
                               [ b3, 'left' , 0, 67],
                               [ siteUrl, 'top', 10, 0] ), \
            
            attachControl = ( [ b2, 'left', 4,  b1 ], \
                              [ b2, 'right', 4, b3 ] ),\
            
            attachNone = ( [ b1, 'top' ], [ b2, 'top' ], [ b3, 'top' ] )
            )

cmds.showWindow(win)

チェックボックスから選んでApplyを押すと選ばれた会社のサイトがデフォルトブラウザで開く、というものとなります。

ちょっとだけわかってきたような、そんな感じで今日は終わります。

コメント ( 5 )|Trackback ( 0 )

マイクロソフトが面白い発表をしてきました

pc |2016-01-18
鈴木淳也の「Windowsフロントライン」:次世代プロセッサはWindows 10のみ対応、SkylakeのWindows 7/8.1サポート終了は2017年7月という衝撃 [ ITmedia PC USER]

新しいサポートポリシーが発表されたそうで、そこにCPUサポートに関する記述があるそうです。
曰く、今後登場する新しい世代のプロセッサのサポートはWindows 10のみが行う、というものですな。Intel CPUなら現行のはSkylakeですけど、その次の世代(今年後半あたりに投入らしい)からだそうです。

それが動作保証がされないというレベルなのか、全く動かなくなるのか(Windows 8.1以下のインストールすら行えなくなるのか)はわかりませんが、とにかくサポートはされなくなる、と。

また現行のSkylakeであっても来年7月17日まではWindows 7と8.1についてサポートは提供されるけど、以降は提供されないようになるそうです。主にセキュリティリスクに関するサポートと言うことなのでしょうけど(故に致命的な問題に対しては以降もセキュリティアップデートを提供するとしているそうで)、実際問題としてどの程度の害が生じるんでしょう。

まぁおそらく何らかの回避手段がマイクロソフトの外から提供されるんだろうなとは思いますけど、古い環境を維持しなければならないところは大変です。個人的には問題があるとするならWindows 10でSoftimageがちゃんと動くかの不安程度なんだけど(一応動いてはいるようだけど)、多くの法人がちょっと困った気分になっているんじゃないですかな。ってことで、Autodeskにおかれましては、Softimgeのサポート期限が切れる4/30までに現在のWindows 10でちゃんと動くというものをリリースしておいて欲しいものです…。あまり期待はしていないけど(^^;

個人的にはSoftimge問題を除けば、古いOSでは新しい環境が使えないってのはMacでは普通のことなので、で、古い環境が残っているのは割と苦々しく思うタイプの人なので、いいぞもっとやれ、って感じではありますw

Microsoft、SkylakeでのWindows 7/8.1サポートを2017年7月までに短縮 ~Intel、AMD、Qualcommの次期SoCはWindows 10のみをサポート [ PC Watch]
コメント ( 0 )|Trackback ( 0 )

Thunderbolt 3 の夢が広がります

pc |2016-01-07
毎年恒例CES 2016がラスベガスで行われているようですね。そういえば同じような時期にMacWorld Expoもかつて行われていたけど、それが開かれなくなってもう何年でしょうか。Wikipediaによると2009年の同イベントがAppleが参加した最後のエキスポになるようです。もう7年。

でまぁそこにThunderbolt 3製品もいくつか登場してきているようなのですね。
驚くのがDellがThnderbolt 3対応ドックを見せてきたこと。

Dell outs USB-C and Thunderbolt 3 docks (and Macs can play too) [SlashGear]

まぁDellは既にThunderbolt 3搭載のラップトップを発表しているし、それを考えると不思議でも何でもないのですけど、Dellに限らず、Macとは距離を置いているメーカーから積極的なThnderbolt製品が出てくると言うのは、ちょっと新鮮な驚きがあります。
Dellに限らずノートPCにThnderbolt 3を採用というケースが出て来ているんで(Acerとか)、ドックの種類が増えていく事が期待されますね。
そのひとつとして参考出品されていたのがKensingtonのDock [Macお宝鑑定団 blog(羅針盤)] でしょうか。

HDDケースでは従来からThnderbolt製品を出し続けているAKiTiOが発表しています。2ベイのドライブってことでストレージの速度はそれほどではない(770MB/s)ようですが、Displayportを持っていることで4K/60Hzディスプレイを接続しつつ、Thnderboltポートの方にも4Kディスプレイを接続できるようです。Thunderbolt 3ならでわって感じですね。

でThnderbolt 3関係製品で最も夢のあるものがRazer Blade Stealthってもの。RazerのノートPCなんだけど、通常はスリムなノートであり、しかしThnderbolt 3接続の外付けのボックスを繋げば、そこに強力なGPUを搭載し、ハイエンドゲームPCに変身するってものです。

Razer,ゲーマー向けUltrabook「Blade Stealth」発表。Thunderbolt 3接続の外付けグラフィックスボックスと組み合わせてゲームマシンに [4Gamer.net]

上記記事によると、Razer Coreというボックスは、PCI Express x16で375WまでのGPUを乗せることが出来るのだそうで、これはコンシューマー向けGPUのハイエンド製品を搭載可能であることを意味しているのだと思います。

公式に外付けGPUへの道が開けたThnderboltに、それを実現した製品が出て来たこと。
GPUの選択肢が限られたMacユーザには非常に夢のあるお話です。

まぁそんなわけで、早くAppleのThnderbolt 3対応製品が登場しないかなと思っております。まずはMacBook ProとMac Pro。早く来い。
コメント ( 0 )|Trackback ( 0 )

昔作ったスクリプトがSIをたたき落とした

xsi |2016-01-04

昔作ったスクリプトがありまして、なにせ昔だからぱっと見ただけだとよく分からないのだけど、とりあえず実行したらPPGを開こうとしてSoftimageごとたたき落とされてる、というような感じになりました。 同じスクリプトを自宅環境で試したら落ちなかったので、環境依存の部分もあるのでしょうが、よくよく確認してみると構文的に正しくない書き方をしている事が原因だったようです。

チェックボックスのあるPPGを作りました。例えばこんなスクリプト。

from win32com.client import constants as c
app = Application

oProp = XSIFactory.CreateObject( "CustomProperty" )
oProp.name = "TEST PPG"

boolcheckbox = oProp.AddParameter2( "boolcheckbox", c.siBool, 1)

oLayout = oProp.PPGLayout

oLayout.AddEnumControl( "boolcheckbox", ["", 0] , "test", c.siControlBoolean )

Err = app.InspectObj(oProp, "", "", c.siModal, False)

if Err == False:
	LogMessage(  boolcheckbox.Value )
else:
	LogMessage("Cancel")
 

問題は、AddEnumControlの部分のリスト部分(["", 0] の所)の書き方にありました。

ここのリストは[ "String", Value, "String", Value ... ] というように文字列のラベルと値の組み合わせを羅列していかなければならないのですけど、これを [ 0, 0 ] って書いていたのですね。チェックボックスだとこのリスト部分ってあんまり意味が無いみたいなのですけど(だから [0,0] にも特に意味が無い?)、環境によってSoftimageごとたたき落とす原因となってしまったようです。

正しく書かないとダメですなぁってことで。

コメント ( 0 )|Trackback ( 0 )

SSDを追加しました

mac |2016-01-03
Mac Pro Mid 2010延命を目指してSSDを搭載してみました。
銀色筐体のMac ProにSSDを内蔵する手段は3種類ほどあります。
  • 3.5インチベイのSATAスロットに2.5インチSATAタイプのSSDに3.5インチのアダプタをくっつけて取り付ける
  • 5インチベイにSATAタイプのSSDを取り付ける(固定したいなら5インチのアダプタを取り付ける)
  • PCI ExpressスロットにPCI Expressタイプの物を取り付ける(この場合SATAタイプのSSDをつけるカードやm2のをとりつけるのや、PCI ExpressスロットのSSDとかいくつかある)
このうち、2つ目を採用しました。3.5インチベイはHDDでうまっちゃっているからね。SSDはSanDiskの物がお値段的に手ごろだったので選択し、5インチのアダプタも取り付けました。



5インチベイはこれまで開けたことが無かったのでほこりだらけです。



一応掃除を行って、とりつけます。ちなみに、Mac Proの5インチベイは光学ドライブを2発積める形になっているんで、SATAのコネクタも2つ用意されています。



なので接続のためにケーブルを用意したりする必要はありません。
取り付けは特に問題なく行えました。

で、動作確認。



特に問題もなく認識され、HFS+で初期化を行いました。Trimがオフになっていますが、El Capitanではtrimforceコマンドでオンにすることが可能です。サードパーティー品は保証しきれないということで、Apple的にはデフォルトオフって事なんですかね。ということもあり、オフにしております。
リンク速度は3ギガビットと表示されます。理論値でも300MB/s程度なんで、ベンチマークソフトで250MB/sオーバーの数字が出たのは、まぁ、そんなもんって事なんでしょう。ちなみにこのSSD(SDSSDHII-960G-J25)は6Gbpsで接続される環境では500MB/s程度は期待出来るようです。
ということで、ここまでは問題なかったので、OSをインストールしてみたのですよ。OS X 10.11.2ね。ただ、結果としてうまくいきませんでした。とはいえ、その原因がどこにあるかはわかりません。5インチベイのところに問題があるのか、なんなのか。しかしそれ以前にインストールの手順そのものに問題があった可能性が大です…

問題というのは、このMac ProがGPUカードを換装している物であることを忘れていた事に起因していまして。
つまり、インストール処理がはじまって再起動して、画面が映らないって事になったのですね。初期状態だから、当然各種共有もオンになっていないわけで、外からのコントロールも出来ません。
ということで1時間ほど放置してインストールが終わったかなぁってタイミングで一度電源落として、ビデオカードを取り換えました。で、電源入れたら画面が表示されて、インストール処理が進んでいくという状態になりました(どうやらインストール途中で電源を落としてしまったようです)。ここで本当は入れ直すってのが正しい選択なんでしょうけど、そのままインストール処理を進めたらインストールが完了しちゃったのでそのまま設定を進めてしまいました。んが、システムの言語が英語で立ち上がるんですよ。だから既に何かがおかしくなっていたのかもしれません。けど、それ以外は普通に使えるし、その後NVIDIAのドライバを入れたらビデオカードをGeForce GTX 960に入れ替えても仕えるようになったしであまり気にしていませんでした。
で、使用をするために、必要ファイルのコピーや環境構築のセットアップを始めたわけですが、処理がちょくちょく止まります。プチフリって現象に感覚的には近いかもしれません。これがあまりに頻発するもので、早々にシステムドライブにするのをあきらめてしまいました。

本当はOSを入れ直したり、接続するベイを3.5インチにしてみたりっていう検証をすべき状況ではありますが、現在HDDでシステムドライブとしている領域のサイズよりSSDの容量が小さいため、そのままシステムを移行させることが出来ず、その面倒くささもあり心が折れました。

というわけで、主にディスクアクセスのレスポンスが大切な処理の作業領域として使っていくこととしました。とりあえずはFCPXのキャッシュファイルの領域にしていますが、RAID構成していないHDDで使用するよりも確実に快適になっているのは実感しています。なぜかPhotoshopのキャッシュ領域に指定できないのでそれはちょっと困惑しています。その他、キャッシュを指定する必要なものがあれば、ここを指定していきたいと思います。

システムドライブをそのまま移行できる容量のSSDが手に届く価格で出て来たら、その時はシステムドライブとして購入して試してみましょう。2TBあれば入るので、既に現物が出て来ている2TBクラスが、そうですね、5万円を切ってきたら考えるかなぁ…(現在は10万円弱ってところ)。
コメント ( 0 )|Trackback ( 0 )
« 前ページ・