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

Macでの話。

ショートカットキー

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

詳細な話

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

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

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

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

iOSアプリの設定で変数など管理

iOSアプリを作ったときに、
アプリを入れたあとで、コンテンツの中身を書き換えたい場合。

たとえば、
OSCを使うためIPアドレスをアプリに設定したい。
アプリの向きを変えたい。
デバッグモードのトグルで切り替えたい。
などなど。

上みたいな設定ができると、作ったアプリにちょっと愛着わいてモチベ上がる。

サイネージのお仕事でiPadなどの端末からコンテンツを操作するということが
最近ふえたので、そのときにしておくと親切なTipsです。

openFrameworksでiOSを開発する際にはofxSettingsが便利でした。
https://github.com/prossel/ofxSettings

 


詳細な設定は文末の参考リンクにまるなげ。

設定の大体の流れは、
1. srcなど右クリックでSettings.bundleファイルを追加する。
2. Root.plistに表示したい項目を追加。
3. Keyの値を利用して、端末の設定画面で入力した値をアプリ起動時などに変数へ格納する。(ofxSettingsではSettings::get~()で取得)
4. 取得はせず設定画面に表示したいだけの場合はKeyの値を利用してSettings::set~()で。
5. ビルド時の情報を表示させたい場合は、BuildPhases

 

APP_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $PRODUCT_SETTINGS_PATH)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:9:DefaultValue ${APP_VERSION}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist"

date=$(date "+ @ %Y.%m.%d %H:%M")
BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $PRODUCT_SETTINGS_PATH)$date
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:10:DefaultValue ${BUILD_NUMBER}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist"

RunScriptで上のような記述をします。
1行目:APP_VERSIONという変数にxcodeで指定しているアプリのバージョンを代入
2行目:plistのitem9DefaultValueをAPP_VERSIONに書き換え
みたいな感じでしょうか。
何項目め、みたいな指定しかできないのかな。ちょっと調べてみたけどなさそう?

xcodeからAddRowとかして追加するとなんか表示変になっていたりすることがあるので、plistファイルを他のエディタで開いてxmlとして直接編集した方が無難かも。
xcodeで編集できる方がitemのナンバーとかわかりやすいけど。

‘date=$(date “+ @ %Y.%m.%d %H:%M”)’ などを追加して
ビルド時の日時なども記載しておくとデバッグなどでは便利かも
http://goozenlab.com/blog/2015/02/06/versionning/


参考
https://dev.classmethod.jp/smartphone/iphone/settings-bundle-acknowledgements/
https://qiita.com/akatsuki174/items/392cb3be619fabfa4608

 

IPアドレスを取得する_oF_osx(C++)

openFrameworksなどでアプリを動かしているPCのIPアドレスを取得したい。

Mac OSXの話。
参考(というかほぼまるまる):
http://www.geekpage.jp/programming/linux-network/get-ipaddr.php

oFなどでofMain.hをincludeしていれば
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>
のインクルードでOK

ネットに繋がっていない場合は
255.127.0.0
とか返ってきた。(要検証)

ネットに繋がっていない状態でも何かしらそれっぽいIPアドレスが返ってきたので、
[*] check good IP のところで、最後の値を見て、感でぽい処理を追加しただけ。

OSCを使うとき、IPアドレスで確認して接続+立ち上げするようにすれば、
とっても親切で徳が高い。

ちなみにiOSでも上のコードで取得できた!シンプルでよき。

WindowsではWinsockを使うとできそう。
個人的にはいまのところ需要ないので、またこんど。
https://clown.hatenablog.jp/entry/20081225/p1

 

 

openFrameworksよく使うスニペット

私がよく使うスニペット?定型?的なものをGistにまとめていきます。
今後も時々更新します。たぶんぜったいこうしんします。

参考になれば幸いですし、できれば人のものも知りたい。。
ちなみに環境はMac、oF0.10.0で使うものが多いですが、特に関係なく使えるものが多いはず。

 

ちなみに私はこういったものをポンと出せるように
Clipy(https://clipy-app.com/)というアプリを使って活用しています。
わりかし便利な気がしていますが、ほかにもオススメな方法があればぜひ教えていただければ幸いです🙇‍♂️

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

 

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


heartbeat015.zip

 

感想

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

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

 

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