HOMEWORKS2020に参加しました。

もう2ヶ月近く前の話ですが、、、
1月23日24日と大阪のPINE BLOOKLYNというイベントスペースで、
HOMEWORKSという展示のイベントに参加させていただきました。

その中で私は drawingBlobscapes という作品を展示させていただきました。

drawingBlobscapes

20210124_1324.gif

画像まとめ(flickr)
20200123-24_HOMEWORKS

コロナ禍ということもあり、中には東京からリモートで展示される作家さんもいらっしゃいましたが、私は帰省も兼ねて厳重にコロナ対策を行った上で現地にて参加させていただきました。

ちなみに大阪移動で新幹線のグリーン車に初めて乗ったのですが、普段乗っているものと結構違って少し衝撃でした。広くてすげー快適、人もわりかし少なかった。

経緯

HOMEWORKSについて以前から名前は知っていて、参加してみたいなあと思っていた展示でした。たまたま会社の同僚から紹介いただいて、いい機会だったので、ぜひにと参加させていただきました。

当初はVRゴーグルに使われるような高密解像度モニタを使って、
一見写真や絵画に見える展示物の中で一部映像が表示されているという作品を作ろうと考えていたのですが、
VRモニタとPCの相性が割と限られていたようで、予定していたPCではモニタに映像が正しく表示されないという自体が発覚し、展示内容を再検討しました。VRモニタはPC選んで別の機会に使ってみたい。

なにか使えそうなアイデアないかなと過去のプロジェクトなど見ていると、ちょうど1年前にopenFrameworksで作成していた実験プロジェクトを発掘し、自分としては改めて好きな表現だなーと思ったので、こちらを作品として仕上げてみることにしました。

作品について、

概要的な話をすると、
openFrameworksを始めてからkyndさんというアーティストを知り、プログラミングで作るアナログな表現に魅力を感じていました。

作っていく過程で、
抽象的に変換された自分の像を見ることで、自分にしかそれは自分だとわからない表現が面白いなと思ったり、
自分は写真に映るのが少し苦手なので、こういう曖昧な像の残り方は好都合だと思いました。

ちょっと余談ですが、記憶を探るには小石程度のきっかけで良いとパクノダが言ってました。
実際には、記憶は形を留めないけれど。美化され風化されるものだけれど。
個人的に思い出すということに関しては、別に正確でなくても十分に意味は果たしている、
むしろ正確に思い出すことはそこまで重要でなく、美化され風化され、
都合よく形を変えた方が思い出すということは豊かな気がします。

手書きのようなイラストチックな表現を目指した結果、いままでなんとなく好きだった表現に少し理由が見えてきた気がしました。

同じ絵でも、他人にはわからないけど、自分にとってはなんとなく理解できるものは、愛着を持ちやすいと思います。自分にだけの度合いが強ければなおさら。
また一見なんの手がかりにもならない写真や映像が、ある人にとっては、何かを思い出すきっかけになればいいなと思っていました。エモ。

イラストチックにするだけであれば、映像をアニメ調に変換するとか、鉛筆画風に変換するとか、シェーダーや機械学習を使った手法がたくさんあります。

それも悪かあないのですが、別の手法をとった場合、何かしらの制限によって別の手法が必要になった場合、自ずと差別化された新しい表現が生まれるものかもしれないです。
まあ今回の話では時間や自分の能力などの制限が仕方なく発生している部分もありますが。
だからこそ、このプロトタイプとしてゆるく展示できる場所には大きな意味があるとも感じました。


技術的な話をすると、
主な技術としてはopenCVのfindContours , k-meansというものが使われています。

撮影した映像の1フレームを対象にk-meansの処理を掛けることで、その1枚で使われている主な色を抜き出します。

K-meansとは、ものすごくざっくりと説明すると、複数ある値を指定したK個のクラスに分類する手法です。普通、平均を出すと、複数の値から1つの平均値を取り出しますが、それが複数個取り出せるみたいな。(今回は10個とか)
以下の図でいうと、XYにたくさんプロットされている点を3つのクラスタに分類すると、各点はどの分類に当てはまるか、またその主となるXYは(薄い大きな+OX)どんな値か。みたいな。
そして、取り出した色をもとにfindContoursという処理をあてます。

kmeans

findContoursについてもざっくり説明すると、1枚の画像から輪郭を検出するような処理です。
ピクセルごとに周りのピクセルと比較して明るさに大きなギャップがあるピクセルを輪郭のエッジとするみたいな。
で今回は、色を指定してこのfindContoursをかけ、指定した色の輪郭を検出するということをしています。

こうして検出された輪郭はいくつかの点の情報を持っています。この点をつないで輪郭線を書くわけなんですが、このときこの点の数を間引いていくことで抽象的な表現にしています。要は多角形を三角形に近づけていくみたいな話。
図形に近づけることで少しおしゃれな見え方になったりしてたのしい。gifでみると変化が見られたりしてたのしい。

でまた、この輪郭のことをContourとかBlobと呼ぶことをよく見かけます。
この輪郭・塊の集合で表された像を描いていく作品だったので、タイトルをdrawingBlobscapesとしました。

ちなみに本作はopenFrameworksを使用して制作したのですが、
K-meansは内部的にはピクセルに対して行われる処理ではあるので割と重たい処理です。なので、この処理は別スレッドで処理するようにしています。
来場者の中にopenCVに詳しい方、openFrameworksを触っていた方もいらしていて、まさにスレッドなど自分としては少し頑張った部分について質問していただいた方がいて嬉しかったです。

その他、今回はほぼshaderを使っていないので、今後のブラッシュアップもいろいろできるかなと思ったり。ただ、使わなかったからこその表現であった気もします。

おおまかな作り自体は1年前の元プロジェクトの時点でできていたものの、
展示用に最適化であったり、パラメータの調整的なところであったり、
簡易でマッピングの機能もいるわと思って、ofxWarpMeshで対応したり。

あとWebカメラの映像をそのままこの変換に掛けるのでなく、彩度やコントラストの調整は事前にWebCamSettingというアプリを使って処理しました。
その調整くらいならプロジェクトに仕込んでもよかったけど、ギリギリまで別の所を詰めるべきだと思ったので、そこは既存のアプリをありがたく使おうと割り切りました。こういう展示なら十分。

感想

思っていたよりもお客さんが来てくれていて、だけど会場が広くて込み過ぎもせず、とてもいいイベントに参加させていただきました。
めちゃくちゃ良いスペースだったのですが、もう営業終了してしまうということで非常に残念。

リアルな展示ではお客さんから直接感想やフィードバックを貰えるので、やった実感があって楽しかったです。

展示しながら人がいないタイミングでパラメータいじってみたり、gifでも出力しておきたいなと思って、急遽1分毎くらいに3秒分くらいを連番で書き出す機能を実装してみたり。個人的にはライブ感のある展示で退屈しなかったです。これもゆるめの展示だからこそ。

プロジェクターを割と大きなスペースにドンと投影するのは久しぶりだったので、やっぱりそれだけで少し嬉しかったです。
コロナが落ち着いてきているので、また少しずつこういうイベントが増えて参加できるといいなあ。

ご来場いただいたお客さん、企画運営などしてくださった方々、参加作家のみなさま、お疲れさまでした&ありがとうございました!!

20210124_1422.gif
20210124_1326.gif

openCV3/4のメモ

openCV3/4のメモ

要約

openCv4をopenframeworksで使うまでの手順。
プロジェクトの生成については、ほかサイトで見なかった簡単な方法をメモ。
めちゃ雑記です。

概要

oFでopenCV3とか4とか使ってみます。
この記事この記事にそって進めてみる。
opencv4でないといけないことは特にないです。ただただBackgroundSubtractorを試してみたかった。
後日また雑な記事かきます。テストの動画だけ貼っときます。なにかのための証拠。

環境とりあえずMac

openCVのinstall

まずはopenCV3 or 4のインストール。
※ 基本最新で上書きされるっぽい。3,4を共存させる方法もあるらしいが、自分は openCv4.1.0でこれといって不具合はないので、opencv4のみになっています。

brew tap homebrew/scienceは使えなくなったらしい。参考
そのため brew tap brewsci/science こちらのコマンドで環境アップデート。

  • opencv3の場合
    brew install openCV3で入れる。
  • opencv4の場合
    opencv4についてはこちらが詳しい。
    brew upgrade opencv でopenCV4(最新版 ex: 4.1.0)を入れる。
途中xcodeのコマンドラインをインストールしてね的なエラーが出たので、xcode-select --installをして、再度upgradeかけると、エラーなく無事完了した。  
過去に入れた気がするのにと思っていたけど、どうもOSをアップグレードすると再度入れる必要があるらしい。  

普通にすすめると、たいていは/usr/local/Cellar/opencv/が更新されるはず。

Xcodeで新規プロジェクト作成

色んなサイトでは以下の方法があげられていたが、パス間違える可能性があったり、記入が面倒だったりなので、個人的にはおすすめじゃない。

紹介されていたプロジェクト生成方法

open
  1. Project.xcconfigでOPENCV_PATHを設定 パスは適宜変えてください。
//OpenCV3
OPENCV_PATH = /usr/local/Cellar/opencv/3.4.1_2
//OpenCV4
OPENCV_PATH = /usr/local/Cellar/opencv/4.1.0_2  
  1. BuildSettingsのHeader Search PathsにOpenCVのインクルードパスを追加
    $(OPENCV_PATH)/include/opencv4
  2. Build SettingsのOther Linker Flagsに必要なdlybを追加
    ここが面倒、、

openCV4をインストールすると、libフォルダにdylib以外に.aファイルもありました。
これらおそらく中身は同じですが、動的ライブラリか、静的ライブラリかの違いがあります。  
こちらでは動的のほうがファイルサイズ小さく、使用メモリも少なくできるっぽい。
dylibを追加するのが面倒な場合は、
.aファイルをGeneralのLinked Frameworks and Librariesにドラッグドロップしても起動可能です。

(たぶんProject.xcconfigのOTHER_LDFLAGSこのあたりの設定でどうにかなるのだけど、、)

#include <opencv2/core.hpp>ここでリンク貼れてないよってエラー出たけど、単純にheader search pathに$(OPENCV_PATH)/includeを入れてないのが原因でした。

おすすめの生成方法

ProjectGeneratorでプロジェクトを作り、

  1. プロジェクトのSearchPaths > HeaderSearchPathsに/usr/local/Cellar/opencv/4.1.0_2/include/opencv4 を追加。(パスは適宜変更してください。)
  2. /usr/local/Cellar/opencv/4.1.0_2/libから必要なdylibを General>LinkedFrameworks and Libraries にドラッグドロップで追加

どのヘッダ呼び出すときにどのlibが必要になるのか、どこを見ればいいんだろう。。。今の所勘で追加しています。。。
このやり方が簡単安定な気がする。Debug/Releaseで変更の必要ない?
紹介されていたプロジェクト生成方法だと必要かもだけど。


画像は適当に追加したのでごちゃっとしています。どうやら.aの静的ライブラリよりは、.dylibなど動的ライブラリのほうが実行ファイルが軽く、メモリの消費を抑えられるとかどうとか。。。

ofxCvとの連携と利用

oFでopenCVを扱う際に、関数群を使いやすくまとめてくれているofxCvを使うとめっちゃ便利。

ProjectGeneratorでofxCvのみ追加してプロジェクト生成。
あとは、上の1.2.を同様に。
なんかもしかしたら、もうちょうっと設定必要だったかも。わすれてもうた。


おまけめも

ofxOpenCvDnnSegmentation など

やはりどこにでも先人がいるもので、馬場先生のofxOpenCvDnnSegmentationがあった。openCVのdnnライブラリをいろいろまとめてらっしゃる。

配布されていたopencv2.aでうまくいかなかったので、自分でメイクしてみる。参考

が、原因はどうもそこではなかった。ので、makeの手順は隠す。

makeの手順
  1. python build_framework.py osxを実行するが、python3ではうまくいかないみたい。
    自分の場合は python2 build_framework.py osc とするとうまくいった。
    python -Vでバージョンを確認したり、which python, which python2でpythonの2.7以上が使われているか確認するとよさそう。
    参考1 参考2

エラー(returned non-zero exit status 65)について
** BUILD FAILED **

The following build commands failed:
    CompileC /Users/hiraoshugo/openCV/opencv-4.1.0/platforms/osx/osx/build/build-x86_64-macosx/modules/world/OpenCV.build/Release/opencv_world.build/Objects-normal/x86_64/opencl_kernels_video.o /Users/hiraoshugo/openCV/opencv-4.1.0/platforms/osx/osx/build/build-x86_64-macosx/modules/world/opencl_kernels_video.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
============================================================
ERROR: Command '['xcodebuild', 'MACOSX_DEPLOYMENT_TARGET=10.12', 'ARCHS=x86_64', '-sdk', 'macosx', '-configuration', 'Release', '-parallelizeTargets', '-jobs', '4', '-target', 'ALL_BUILD', 'build']' returned non-zero exit status 65

こんなエラーでた。どうやらcmakeのバージョン(3.10.2)がダメらしい。参考
てわけで、cmakeのupgrade

cmake --version
// cmake version 3.10.2
brew upgrade cmake
// .....
cmake --version
// cmake version 3.15.2
python2 build_framework.py osx
// .....

  1. python build_framework.py –contrib <opencv_contribへのパス> osx

そんなこんな。。

結論、こちらのように#include "opencv2/imgproc/imgproc_c.h"をofxCvのWrappers.hに追加した。

modelデータは以下から直接落とした。
http://dl.caffe.berkeleyvision.org/fcn8s-heavy-pascal.caffemodel


最近いろんな出会いがあって楽しい。特に音楽やってる人とよく出会う。
春よりも春らしい。

明日は学生CGコンテスト25周年のパーティーにいってきます。
夏がもうすぐ終わるからね。季節の変わり目。春の訪れ。
秋はいずこへ。

スクリーンショットにまつわるメモ

Macでの話。

ショートカットキー

  • cmd + shift + 3 で画面のスクリーンショット。
  • cmd + shift + 4 で選択範囲をスクリーンショット。
    このときスペースバーを押すと選択ウィンドウをスクショするか切り替えできる。クリックするとスクショが撮れる。
    ただ普通にすると、ウィンドウの影も撮ってしまう。
    これを回避するにはクリックする際に、optionキーを押しながらクリックする。これで影のない選択ウィンドウのスクショが撮れる。

詳細な話

スクリーンショットしたときの名前や保存先の変更
https://susu.mu/archives/73

ググってよく出てくる記事では名前と日付の間にスペースが入ってしまう。
日付だけにすると、日付の前にスペースが入ってしまう。
これを避けるために上の記事を参考にしました。

OSをアップロードすると設定がリセットされるようなので、備忘録として。

Coreな部分をいじるので、一筋縄では行かないかも。
そんなときは以下を参考に。
https://qiita.com/iwaseasahi/items/9d2e29b02df5cce7285d

#BTH2018に参加しました

先日、10/20,21と東京ビックサイトで開催されたTOKYO BLOCKS HACKATHON (#BTH2018)に参加しました。
https://blockshackathon2018.peatix.com/

Maxアカウントメールにハッカソンしますってメールが来て知りました。
知ったのが開催の週の水曜日とか結構直前だったのでエイヤーって感じで参加しました。
一応ROLIという楽器を見たことがあったのと、個人的にも新しい楽器というものに少し興味があったので。

 

チームビルディング

心拍を使うアイデアの方がいて、とても興味があったので、なんとかかんとか仲間に入れてもらいました。
個人的には久々にMaxMSPを触って勉強したかったので、Maxを使ってBlocksをハックする部分を担当させていただきました。🙏

1日目終了時点でコンセプト的なものは決まっていたものの、具体的な作戦が決まっておらず、割と遅くまで残ってメンバー全員で作戦会議しました。
こういった経験は個人的にはとても貴重で楽しかった。

最終的には、
①AppleWatchから心拍を取って、
②JUCEで作ったアプリにOSCで心拍数を送り、AbletonLinkで共有、
③Maxで受け取ってBlocksへ表示
④別Maxで受け取ってリズムトラックのテンポへ反映・音を出力
⑤別Blocksを使って、変化するリズムトラックに合わせてリアルタイムに演奏
といった形。
僕が担当したのは③の部分。

AbletonLinkで受け取った拍からBPM計算して、数字を表示、拍に合わせてハートのイラストを伸縮(イメージ2枚を切り替え)ということをしています。

BlocksとMaxでの開発について

備忘録兼ねて技術的な話。

BlocksとMaxはBluetoothで接続します。
Blocksの電源入れて、Macのシステム環境設定からAudioMIDI設定からペアリングしました。
環境内にあるBluetooth端末が表示されているので、その中から手元のBlocksのIDと同じものを選択。
IDはBlocksの裏面に小さい文字で書いてありました。

MaxでFile > ShowPackageManagerからBlocksのパッケージをインストールすると、Maxからblocksのオブジェクトを作れるようになります。
blocks.button とか blocks.jit.matrixなどいろいろ用意されているのでヘルプから試してみると楽しい。

表示で重要なのはblocks.padというオブジェクト。
blocks.imageや、blocks.jit.matrixでBlocksのLEDを変化させることができるのですが、その際にblocks.padが必要になります。
Maxでプレゼンテーションモードにしたときに、このpadオブジェクトの上にblocks.jit.matrixなどサイズを合わせて配置する必要があり、これがズレるとBlocksの表示もズレてしまいます。

あとは、ヘルプにも書いてありますが、padオブジェクトの左上の三角をクリックしてオンにする必要があります。Max上で複数プロジェクトからblocksオブジェクトを操作している場合にどのオブジェクトを有効にするかはっきりさせるための操作のようです。

はじめ上の手順を踏んだはずにもかかわらずBlocks実機に表示されないことがありましたが、Max再起動やBluetooth接続し直しなどいろいろ見直すと無事繋がりました。

Max使ってBlocksで文字を表示する際にはjit.lcdを使うといいと@tatmosさんに教えていただきました。
Blocksが15x15のLEDで解像度が低いため、文字の表示はかなり厳しく、今回必要だった数字三桁程度の表示がギリギリな印象でした。
また、おそらくLED間は特にパーテーション的な区切りはなさそうで、黒字を出そうとすると、背景となる色に侵食されて可読性はほぼなしでした。
少しでも可読性確保するため、背景となるハートの画像は明るさを抑え、文字はできるだけ明るく、的なことを簡易的にしてました。

 

最終的なパッチはこんな感じ。(ハッカソン後、若干修正しました。)


heartbeat015.zip

 

感想

ハッカソンでは、メンバーにも恵まれて、なんだかんだ(謎の)特別賞をいただくことができました。
最後の発表前には、ネットワークが切断されてしまい、心臓が止まった状態となってしまいましたが、なんとかギリギリで動く状態に復帰でき、事なきを得ました。
ネットワーク改善のためうっかりMaxを再起動したので、いろんなパラメータの初期値が変わってしまってました。(後日修正しました)

久しぶりにMaxを触れて楽しかったと同時に、個人的な制作では使えても、仕事として利用することはなかなかないだろうなあと思ったり。

 

今回思い立ってハッカソンに参加させていただきましたが、とても学びが多かったです。
現場力とかつけるためにも、今後もハッカソンなどちょくちょく参加したいなあと思います。

 

展示コンテンツ制作の備忘録

展示コンテンツを制作する際の、注意事項や、組み込んでおくと安心な仕組みを、
仕事などでやったこと、気づいたことを中心にまとめておきます。
長期・短期にかかわらず、手元を離れて展示される・スタッフの方に運用してもらうコンテンツを作る際に役立てば ヨッシャ! です。

整理しつつ、気づいたこと、思い出したことあったら、後日追記していきます。

※ コンテンツはopenFrameworksで作ることが多いので、oFに特化した内容ですが、タスクスケジューラなど標準機能の使用時の注意も覚えている限りで記載するので、参考になれば幸いです🙏
※ ここで紹介している対策は、あくまで私の取った取り急ぎの対策もあるので、もっとスマートに解決できる方法があるかもしれません。
もしこんな対策あるよというものがあればご教示いただければ、とってもとっても幸いです。🙏🙏🙏

 

【Mac】

これから追記します。

【Windows】

・運用において、「シャットダウン→起動」と「再起動」は違う。
デフォルトの設定では、シャットダウンのとき「高速スタートアップ」というものが有効になっており、再起動のときは無効になっているらしい。
「高速スタートアップ」はシャットダウン時にPC周辺機器の情報などをログとして残しておいて、起動時にはそのログを使うことで起動が30%くらい早くなるらしい設定。
シャットダウン→起動の運用を確実に行うときは、この高速スタートアップを無効にする必要がある。

・電源オプションを高パフォーマンスにしておく。
負荷の高いアプリを実行する場合は、消費電力はあがるけど、この設定を変更するとアプリの動作が若干安定する場合がある。

・「次の時間が経過後ハードディスクの電源を切る」を0(OFF)にしておく(?)
一定時間HDDへのアクセスがない場合にHDDが止まり、再び回しだすために負荷がかかる、遅延が生じる場合があるらしい。

上2つは省電力目的の設定なようなので高パフォーマンス・HDDの電源切るオフ にしておいたほうが安定しそう。

・監視アプリを用意する(oF_Win_Watchdogなど)
oFアプリなら何かしらのトラブルでアプリが落ちたとき自動で立ち上がるように、監視用として、oF_Win_Watchdogを入れておくと安心。
https://github.com/Akira-Hayasaka/oF_Win_Watchdog
ポイントとしては、監視するアプリのパスを相対パスで指定すると、環境?立ち上げのタイミング?(原因が明確でないですが、、)によって時々対象のアプリがうまく指定できないことがあった。ので、絶対パスで指定したほうが安心。
oFについては後日別記事で。

・アプリが落ちた際にメールを飛ばす仕組みを用意する
上に加えて自動メール送信をコンボすると、なにかあったときにメールが送られてきて対処が取れる。
Macならmailコマンドがあるので、ofSystem(mail ~~~)などとすれば、比較的簡単に簡単にメールを遅れるが、windowsの場合、認証とかの関係でちょいややこしい。
私の場合は、Windowsを使う案件だったので、vbsスクリプトを書いて、
(vbsの書き方についてはこの辺が参考になるかも→http://serialty.blog117.fc2.com/blog-entry-10.html
監視用のWachdogアプリの中で再起動する際に、ofSystem()からvbsスクリプトを叩いてメールを飛ばす。といった具合で組み込んでいました。
あと日本語を含む場合はshift-jisで保存する必要があった。はず。(チョットワスレマシタ)
参考までに以下vbsスクリプトの例(GmailのSMTPを利用)

'****************************************************************
' mail sender
'****************************************************************

Set Cdo = WScript.CreateObject("CDO.Message")
Cdo.From = "送信元表示名<送信元メールアドレス>"
Cdo.To = "表示名<メールアドレス>;表示名<メールアドレス>;"
Cdo.Subject  = "件名"
Cdo.Textbody = "メッセージ" & vbCrLf & Now
Cdo.BodyPart.Charset = "utf-8"

Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = true
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Googleのユーザー名(
メールアドレス)"
Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "SMTPパスワード"

Cdo.Configuration.Fields.Update
Cdo.Send

Wscript.Quit(Err.Number)

詳細を後日別記事で書いておきたい。。。

・FreeConsole()
openFrameworksのアプリとかだと、FreeConsole()でコンソールウインドウを非表示にできる。けれど、アプリ終了時にコンソールウィンドウを閉じることができず、バックグラウンドプロセスとして残ってしまう場合がある。(コンテンツの表示されているウインドウは消えているのに、BGMだけがなっていたり、裏でスレッドが走ったままになっていたり)
対策として、oFのExit()関数の中でstd::exit(0)を記載しておけばコンソールウィンドウも一緒に閉じることができました。

・タスクスケジューラ
タスクスケジューラからアプリを起動する場合、通常だとディスクアクセスの優先度が低い状態で起動してしまう。(watchdogも同様に優先度低いのでアプリが立ち上げ直されても優先度は低いまま)
これを変更するには、スケジューラからタスクをエクスポートして、xmlファイル上でpriorityを変更して、再度タスクをインポートして登録する必要がある。
http://ttgcameback.blogspot.com/2015/09/blog-post.html

・ウインドウの最前面化(アクティブ化)
アプリを自動で立ち上げた際、何かしらの影響でアプリ画面がアクティブ状態になっておらず、別のウインドウの下に隠れてしまったりする場合がありました。
またまたvbsスクリプトを書いて、アクティブにするようにしました。
ポイントとなるのは、アクティブ化するためのAppActivateという関数。単純にこれを実行するだけではウインドウが最前面に表れないこともあるそうで、調べてみると同じような現象で悩んでいる方がおられました。
私の場合は、

set WshShell = WScript.CreateObject("WScript.Shell")
Dim result
result = WshShell.Run ("起動するアプリのパス",1)
         WScript.Sleep 10000
         WshShell.AppActivate "ウインドウの名前"
         WScript.Sleep 100
set WshShell = Nothing
set result = Nothing

またoFで作ったアプリはたぶんデフォルトではウインドウの名前が振られていないので、ofSetWindowTitle()で名前を指定する必要がある。

【iOSアプリ】

アプリをインストールする際のアカウントに注意。
特にアプリをアップデートで上書きする際は、一度アプリをiOS端末から削除したほうが無難かも。
途中でアカウントを変更したりすると上書きでは前のライセンスのままインストールされて、期限切れみたいなことになりかねない。というかなった。

本番用にビルドする際は必ずクリーンしてからビルドして実機にインストールする。
画像などのデータがアプリ内部に残ってしまい、予想以上にファイル数が多くなっていたりする。
特にofDirectory使ってまとめて画像を読み込む際には、これによって、順番が変わってしまったりする。

 

【その他】

TeamViewer
・無料アカウントでつなぐと、接続終了時に「この無料セッションは~~提供されました」というウインドウが接続PCと接続先PCに表示される。
が、何度か接続→接続終了を繰り返せば、このウインドウが表示されない時があり、その場合は、接続先PCにもウインドウが表示されないらしい。
ちょっとした小技だけど、仕事などで利用するなら、ちゃんとアカウントを取ったほうが無論良い。