2019年07月17日

発想は悪くない

...んですが、実装はちと チカラワザ が過ぎましたな。
sm35402391


(7/19追記) さっそく対応されたようですよ → sm35419659

スマートな (よくある) 実現方法としては、外部のウィンドウ操作系スクリプトやそれ系のAPIを使うことが多いように思います。

※有名どころだと UWSCとか(なんか色々消えてるらしい?)。検索するとその手のツールは色々見付かります。

件のパターンなら、

1. TransformViewの "#個別モーフ確認" をON
2. モーフリストを上から走査しつつ (先頭要素選択からキー下入力)、表示画面のウィンドウ内容をキャプチャし加工保存

ぐらいで実現できるので、面倒なのは View内の各コントロールハンドルの取得あたりでしょうか。

まあ (予めモデル情報の精査は必要ですが) 同じような発想で MMD本体でも同様のブツは作れたりするので、自動化でラクしたい方なんかは色々情報をあさってみるのもよいかもしれませんね。


...と、頑張っている方たちに冷や水浴びせているだけではアレなので、一応 対応?的なことをやっておきました。

以下にサンプル置いておくので後はお好きなように。

※PMX用のプラグインはあまり太らせたくないので、旧仕様に突貫で拡張を施しておきました。↑でも書いてありますが、操作マクロ系拡張は十分に方法論が確立されているので、わざわざプラグインとして専用機能を用意していくのは気が進むものではないですね (面倒)


!! PmxEditor_0254g 以降が必要
コード上でダブルクリックをおこなうと内容を選択できます。CSScript の簡易形式にそのままコピペで実行可能です。

■テストコード1 : View画面をクリップボードへキャプチャ
// PmxView画面をクリップボードへコピー(キャプチャ)
Clipboard.SetImage(view.GetClientImage());

// SubView
//Clipboard.SetImage(connect.View.PmxViewHelper.SubView.GetClientImage());

// TransformView
//Clipboard.SetImage(connect.View.TransformView.GetClientImage());

----
■テストコード2 : モーフ一覧を画像で出力(参考用)
/*
* 全モーフを一覧で画像出力します/適宜表示状態を変更してください.
* 一時フォルダにMorphImageOutフォルダを作成します
* 不要になったら要削除
* なお掲載用の参考版なので各自改変してご利用ください.
*/

// 画像出力先 = 一時フォルダ以下
var dir = Path.Combine(Path.GetTempPath(), "MorphImageOut");
if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); }

// 有効ファイル名判定用
var invals = Path.GetInvalidFileNameChars();
Func< /*このコメントはブログの表示が変になるため(元ソースには何もありません)*/
string, bool> checkName = (string name) => { return name.IndexOfAny(invals) < 0; };

// TransformViewは表示しておく
var tv = connect.View.TransformView;
tv.Visible = true;

// 変形はリセット
tv.ResetTransform();
// 個別モーフ確認をON
tv.MorphChecker = true;
int c = 0;
foreach (var m in pmx.Morph) {
try {
// "m[番号(4桁)]+_[モーフ名]" / 無効な場合は番号のみ
var path = Path.Combine(dir, "m" + c.ToString("0000") + (checkName(m.Name) ? "_" + m.Name : ""));
// モーフ対象を選択 → 変形適用
tv.SelectedMorphIndex = c;

// TransformViewの画面を取得し保存 | このjpegは画質が悪いので注意
path = Path.ChangeExtension(path, ".jpg");
tv.GetClientImage().Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch {
// 掲載用なのでここではスルーしておく
}
c++; // カウンタを進める
}

// モーフ確認をOFF
tv.MorphChecker = false;
// 対象フォルダを開く
System.Diagnostics.Process.Start(dir);



以上


posted by - at 02:30| PMX | 更新情報をチェックする

2019年03月27日

プログラミング教育

そろそろ小学校でプログラミングが必修化になる頃合のようですね。

主旨としては 「コーディング (従来の記述型プログラミング言語) をメインにせずプログラミング的思考を育む」 というものらしいので、ゲーム的なものを遊びながら作成または改変していく、といった内容が中心になるんだろうなぁ、と単純に予想されます。

内容的に生徒(児童) 側が負担になる部分は少ない、というかむしろゲームなら喜んでやると思いますが、その分 「現場の教員の方々はご愁傷様」 といった感じですね。


■誰が教えるのか (人も金も出しません)

随分昔の話になりますが、実際の教育現場で PC関連の授業をお手伝いしていたことがあります (授業中に教員の補助を行うお仕事/複数校を定期巡回/なお短期業務)

小学校での授業内容は PC操作に慣れるためのゲームやお絵描きなどが大半で、児童にも非常に人気が高いものでした。ただ、その分教員側の負担はすさまじく、

・30〜40人もの人数が一切の問題なく円滑に進むことはまずないので、教員一人だけではその都度対応で止まる→再開→また止まる→...みたいなループになって収拾がつかない=授業が進まない

・トラブルの原因が PCやプリンタ/ネットワークなどの機材側に由来する場合も多く、専門知識を持たない一介の教員では対応しきれない (数日の研修でなんとかなるレベルではない)

・そもそも教える側の教員自体が PC使うの初めてぐらいなのに...

といった現場の苦労話をよく聞かされました。その分どこへ行っても重宝され、先生方からは感謝しかされず、ちょっと立場を勘違いしそうになる (ある意味危険な?) お仕事でしたね。

昨今のプログラミング教育の話題を眺めていると、そんな当時の記憶がよく思い出されます。

"本来業務であるはずの学業" 以外のアレコレですら現場の教員になんでもかんでも押し付けている状況では、メディアや教育・情報関連業界が期待しているほどの効果を望むのは、そもそも難しいでしょうね。


■プログラミング的思考を突き詰めていくと、結局コーディング (プログラミング言語) に行き当たる

"プログラミング" という関連技能を既に持つ一人として、現状のプログラミング教育に対して思うことですが、↑の表題通りです。

プログラミング教育の主旨 (コーディングいらない、でもプログラミング的思考欲しい) と合わせると、身も蓋もない現実になってしまいますね。

まあ言語の習得、勉強、理解は正直 "面倒" だし "つまらない" し "わけわからん" もんです。専門家もいない、十分な時間も取れない、という公教育でやるようなものではないので、小学校で主題にしないのは正解だと思います。

ただ結局のところ 「プログラミング的思考」 なるもの自体がすなわち 「プログラミング言語として正しく表現されること」 と等価であり、そしてそれらが表裏一体の関係である、ということに気付くと、

最も効率的にプログラミング的思考を取得する方法 = プログラミング言語の習得

となってしまうわけです。要するに 「コーディングを行わなくてもプログラミング的思考のトレーニングは可能だけど、結局効率悪いだけだよ」 というお話です。

※この辺は通常の言語と思考の関係とよく似ています。思考があるから言語になるのか、それとも言語があるからその思考が可能なのかは、いまだもって証明不能です。解っているのは "言語能力を鍛えないと思考力も上がらない" という事実だけです。


■プログラミング言語の習得は簡単

「入門書を見てもわけのわからない説明ばっかで意味不明。やる気をなくす」 というのは、共通的な体験なんでしょうね。

大抵の入門書の構成は実はプログラミング初学者には最適化されていない、というのは自分でもよく思うことです。

では何故そうなっているのか、それがヨシとされているのか、という理由ですが、これは簡単な話です。

「二つ目以降の言語習得にはあれが最適」 だからです。

(例えばプログラミング職に就いている人で) プログラミング言語を一種類しか使えない人は実際ほとんどいません。一つしっかり習得してしまえば二つ目以降の習得は "いともたやすくおこなえる" からです。

では一つ目と二つ目以降、現実的な機会としてはどちらが多くなるでしょうか? 深く考えるまでもなく、2,3,4...と、どこまでも続いていく二つ目以降の方でしょうね。

故に世に出回る入門書は "一つ目の習得" という本当の初学者を相手にはできないことになります。書籍も商売なんでね...仕方ないですね。

※なにより書いてる人間が既に習得者でもあるので、良し悪しの判断基準である自分にとって解りやすい内容、すなわち二つ目以降の言語習得向き、と自然になってしまうわけです。

「じゃあやっぱりプログラミング言語の習得は難しいじゃないか。この嘘つきめ!」 とお叱りを受けそうなので、初学者のための本来の習得方法を書いておきます。

実に簡単です。

・入門書にあるサンプルコードを実際に書いて実行して、一部を "自分の意思で" 書き換えてまた実行して、それが思い通り動くかどうか観察して...と、そういう作業を "頭の中の霧が晴れるまで" 繰り返しおこなう

これだけです (特に重要なのは、できるだけ多くの失敗=ダメパターンを経験すること)

※文法や解説なんかを熟読するのはその後で構いません。どうせ最初に読んだってそれが頭に入るわけないんですから(笑)

「そんなの全然楽しくないじゃん!」

まったくもってその通りです。楽しくなるのは霧が (本当に) 晴れた後の話ですからね。その時が来るまでは苦しいのが当たり前です。

自転車に乗れるまではみんな転んで痛い思いをする。でも一度乗れるようになれば後は楽になりますね。同じことです。

プログラミングに限らず、新しい物事にチャレンジする、すなわち初学者を乗り越えるということは 「なんかわからんけどモヤモヤする」 という霧を晴らす作業に他なりません。

「最初から楽しく!」 という威勢のいい掛け声は魅力的ですが、本質的には遠回りになることを憶えておくとよいかと思います。

ちなみに 「プログラミングは限られた人間しか適応できない」 なる評価がたまに目に入ったりしますが、まあないですね。通常の言語と同じように誰でも習得可能です。小学生でも全然余裕です。

※「ほとんどの日本人は 6年間も英語を勉強するのに話せない」 という文言は英語教育への批判などでもよく出ますが、そりゃその 6年の間に "話す" ということに対しての霧が晴れる瞬間が一度もない (=そんな訓練してない) んだから、むしろ話せなくて当然です。そもそも公教育に頼る時点で何事も間違っています。必要な技能は自分で学び取りましょう。公教育はそれら必要な物事の出発点を教えてくれることに大きな意義があります。


■まとめ

・公教育に過剰な期待はするな、させるな
・プログラミング的思考とプログラミング言語を切り離すのは原理的に無理
・プログラミング言語の習得なんて誰でもできる、余裕余裕
・「最初から楽しく!」 には注意せよ

以上、昨今のプログラミング教育を通して、普段思っていることをつらつらと書いてみました。

なお当然ながらプログラミング言語は習得して終わり、というものではありません。むしろそこからが本当の出発点 (冒険≒地獄の始まり) です。


最後に、

Q. 「プログラミング的思考を鍛えていくと何ができるようになりますか?」
A. 「MMDが作れるようになります。本当の意味でね」

...長文読了おつかれさまでした。

posted by - at 21:22| その他 | 更新情報をチェックする

2018年12月12日

ねんまつ(2018)

年も終わりということで、なんとなく昨今のまとめ的な内容でも。

■お片付け
どれぐらいの方が気付いているか知りませんが、昨年末の予告?通り、旧時代品 (PMDエディタ) は "キリのよい日" に片付けられました。お疲れさま。
※終了日は一応 (おもてからは見えませんが) DLページ内には記載してあります。

■ver
今年は一年を通して PMXエディタのバージョンは一つも上がりませんでした。PMDエディタからの長い活動期間でも、verが上がらない年は初めてだったようです。

まあ流石にこれだけ長く続けていると、やらない理由 も やれない理由 も様々増えますのでね...

といって、そんな負的な話など聞いても誰も幸せにはならないので、ここには何も書きませんが。

■MMD関係
十周年
・杯が (事実上) 刷新
・カテタグ化

など、主にニコニコ周りではいくつかの宿題が片付いた年だったように思います。

カテタグについては、発展期であれば好ましいものではないと考えたかもしれませんが、現在のニコニコの状況では さしたるほどの影響もない ものかと。

その他、技術面についてなどは以前からの繰り返しになるので省略。


...と、ダラダラと書いているとまた長くなるので、こんなところで。

とりあえず MMDに関わるようになり十年、最初は 「この先どうなることやら...」 とか思っていましたが、結果だけ見れば十分に有益なものを残せたのかと思います。

以上、ただの補助ツール作者の分際で何かエラそうなことをほざいてみたかっただけの年末記事でした。



さてスマブラへ戻らねば......

posted by - at 00:33| その他 | 更新情報をチェックする