20210605のMacに関する記事は6件です。

AppleScriptでPowerPointを操作する Part1|図形の操作

環境 macOS 11.4 (Big Sur) PowerPoint for Mac 16.49(Office 365、2021) 目指すところ 以下のような操作を、ワンクリックやワンボタンで行えるようにする PowerPointのオブジェクト(書式つき)を一発で生成したい 図形によってデフォルト書式を変えたい(PowerPoint本来の機能では全てのShapeで同じ書式しかデフォルトにできない) 段落(行間、段落間距離)の設定を一発で行いたい PowerPointの表の編集(行の追加、削除)を、右クリックを使わず行いたい1 右クリックを押した瞬間、選択範囲が変わるのが面倒 活用方法 左手デバイス(StreamDeck等)で、ワンクリックでできることを目的に作成しました。 デバイスを持っていない人でも、メニューに割り当てたり、Automatorと組み合わせることでショートカットを設定することができます。 なぜAppleScriptか AppleScriptの処理で特徴的なのは、自分が操作したり選択中の書類、書類中のオブジェクトに対して処理できることです。 それはマクロで良いのではないか?と思われるかもしれませんが、PowerPointでは一つ一つのファイルにマクロを埋め込む必要があり、現実的ではありません。 昨今ではpythonの適用範囲が広がっており、PowerPointを操作することも可能ですが、まず環境構築が大変であること、選択中のプレゼンファイルやページを取得できない、という問題があります。 1番の問題はWindowsでは使えないことでしょうか。作業がmac中心の方であれば有力な選択肢だと思います。 AppleScript マクロ Python 選択中のオブジェクトを処理できる ○ ○ × ファイルに埋め込みが必要ない ○ × ○ 動作が早い × ○ △ メニュー/ショートカット等割り当てられる ○ ○ △ アプリ間連携ができる ○ officeのみ △ 環境構築が不要 ○ ○ × Windowsでも使える × ○ ○ AppleScriptで気をつけるところ 英語に近く、読みやすくて習得しやすいと言われているAppleScriptですが、C系やJava, Python等のプログラムを見慣れていた自分にはいくつか混乱した部分がありました。 tell ... end tellの使い方 AppleScriptの例では、最初にtell文を用いてアプリケーションを起動するものが多いため、 それに慣れて、「tell文=Applicationを指定する文」だと思っていたら他の人のプログラムが理解できず、ハマりました。 tell文はオブジェクトの送信範囲を指定する役割があります。 VBAでいうところのWith文みたいなもの、というのが今の自分の理解です。 特にオブジェクトの階層が深くなるPowerPointでは、tell文をうまく使わないと指定するだけで面倒です。 また、tell文の中では自分で定義したハンドラを呼び出すときにmy もしくは of meが必要になります。 値の代入 他の言語では 変数 = 代入する値となるところが set 変数 to 代入する値と表記されます。 別段難しさがあるわけではないのですが、記号をなるべく使わずに表記するAppleScriptは、命令語をきちんと覚えていない状態で見ると、変数なのか命令語なのかの区別が視覚的にしづらいです。ネット上のコードでもカラーリングされていないことも多く、余計に混乱しますね。 文章として自然に作ろうとしているぶん、初見だと、どれが変数でどれがコマンドなのかがわかりにくく、面食らいました。 階層オブジェクトの指定 他の言語では AAA.BBB.CCCとなるところが CCC of BBB of AAAと表記されます。 確かに英語に基づくとそうなのですが、普通の言語とは順序も逆ですし、 階層が深くなると見づらくなってきます。 この見辛さを解消するために、tell文を多用します。 AppleScriptのアプリケーション対応 アプリケーションをコントロールするコマンド等は、どこで調べれば良いでしょうか。 これは「スクリプトエディタ」の基本機能に実装されていますので、そこから調べることが確実です。 スクリプトエディタのメニュー「ファイル」>「用語説明を開く」を選択すると、対応しているアプリケーション一覧が現れます。 PowerPointのページ、オブジェクトの階層構造 PowerPointを操作する上では、Applescriptの知識だけでなく、PowerPointのオブジェクト構造を理解することが重要です。(マクロで組む場合と同様です) 参考リンク|PowerPointのオブジェクトについて もう一つ、applescriptの選択範囲を取得するselectionはVBAのマクロとは指定範囲や使い方が異なるところも注意です。 selectionの挙動は私もまだ把握しきれておらず、オブジェクトの種類によって試行錯誤しながら確認せざるを得ないです。以下の挙動は全て違います。 今のページ(番号)の取得|returnは数値 slide index of slide range of selection of active window 選んでいるオブジェクトの取得|returnはshape range(複数オブジェクトの場合もあり) shape range of selection of active window 表の選んでいる部分の取得|returnは真偽値 selected of cell xx of row xx of table object of shape table xx of shape range of selection of active window コードの実装 それでは実際にコードを実装していきます。 AppleScript初心者なので、もっと良い書き方や実装がある場合はぜひ教えていただけると助かります。 図形(吹き出し)の生成 まずはPowerPointを起動(もしくは起動中のPowerPointをアクティブに) スクリプトエディタを立ち上げ、以下のコードを入力して実行してみましょう tell application "Microsoft PowerPoint" activate end tell PowerPointが起動したでしょうか。 それではもう少し使えそうなコードを書いていきます。 適当な場所(最初のページ)に図形オブジェクト(Shape)を配置 次に図形を生成するコードです。 下記を実行し、最初のページに角丸四角形が生成されれば成功です。 tell application "Microsoft PowerPoint" -- 図形の位置とサイズ、形状を設定 set x_position to 30 set y_position to 30 set dia_width to 100 set dia_height to 100 set shape_type to autoshape rounded rectangle --最初のページ内で操作 tell slide 1 of active presentation -- 図形を生成し、TheShapeと命名 set TheShape to make new shape at the end with properties {auto shape type:shape_type, left position:x_position, top:y_position, width:dia_width, height:dia_height} end tell end tell 今選んでいるページに図形を配置 これを元に少しずつ改造していきましょう。先程のコードでは常に1ページ目に図形が生成されてしまいましたが、選択しているページに図形を生成するように変えましょう。 上記コードの、最初のページ内で操作という部分を以下のように変えます。 --現在のスライド番号を取得 set n to slide index of slide range of selection of active window --現在のスライド内で操作 tell slide n of active presentation -- ここで図形生成(省略) end tell 図形を吹き出しにしてみる 次に図形を角丸四角形から吹き出しに変更していきます。 図形の名称の調べ方ですが、スクリプトエディタの「用語説明」(メニュー:ファイル>用語説明を開く)から確認できます。 PowerPointの用語説明を選んだら、auto shape typeを検索してみましょう。ずらずらと図形の種類の名前が出てきたかと思います。この順番はPowerPointのリボンメニューと同じ構成になっていますので、そこから頑張って探してください。 吹き出しはautoshape rectangular calloutです。 set shape_type to autoshape rectangular callout Shapeの書式を色々設定 最後に書式を設定していきます。 用語説明の中でShapeのプロパティを調べると色々出てきます。xx formatとなっているところを変えていきます。色の設定はRGBで指定する方法とテーマ色から選ぶ方法のどちらもあります。 tell TheShape set line weight of line format of it to 1 --枠線の太さを1に set line style of line format of it to single line --枠線を実線に set dash style of line format of it to line dash style solid --枠線を実線に set fore color of line format of it to {200, 200, 200} --枠線の色をグレーに --set fore color theme index of fill format of it to sixth accent theme color --塗りつぶしの色をアクセント6に set fore color of fill format of it to {229, 229, 229} --塗りつぶしの色をグレーに set font color theme index of font of text range of text frame of it to second text theme color --フォントをテキスト2に set font size of font of text range of text frame of it to 14 --フォントサイズを14に end tell 全て合わせる(選択中のページに、吹き出しを生成し、書式を設定) ここまでの内容を全て含んだコードは以下になります。 tell application "Microsoft PowerPoint" -- 図形の位置とサイズ、形状を設定 set x_position to 15 set y_position to 15 set dia_width to 200 set dia_height to 100 set shape_type to autoshape rectangular callout -- set n to slide index of slide range of selection of active window --現在のスライド番号を取得 tell slide n of active presentation --現在のスライド内で操作 --図形を生成し、TheShapeと命名 set TheShape to make new shape at the end with properties ¬ {left position:x_position, top:y_position, width:dia_width, height:dia_height, auto shape type:shape_type} tell TheShape set line weight of line format of it to 1 --枠線の太さを1に set line style of line format of it to single line --枠線を実線に set dash style of line format of it to line dash style solid --枠線を実線に set fore color of line format of it to {200, 200, 200} --枠線の色をグレーに --set fore color theme index of fill format of it to sixth accent theme color --塗りつぶしの色をアクセント6に set fore color of fill format of it to {229, 229, 229} --塗りつぶしの色をグレーに set font color theme index of font of text range of text frame of it to second text theme color --フォントをテキスト2に set font size of font of text range of text frame of it to 14 --フォントサイズを14に end tell end tell end tell 選択した全ての図形を一括変換 次に選択した図形の形状や書式を一気に変換するやり方についてみていきます。 選択した図形を取得 選択範囲を表すオブジェクトはshape rangeです。 現在選択している図形(複数)を取得するコードは以下になります。 shape range of selection of active window この中から一つ一つ図形を抜き出して、変換していくことになります。 shape X of shape range のようにXの数値を変えていくことで一つ一つの図形を抜き出せます。 吹き出しへ一括変換 それでは実際にコードを見ていきましょう。 いくつかの図形を選択し、以下のコードを実行してみてください。 tell application "Microsoft PowerPoint" set theShapeRange to shape range of selection of active window --現在の選択範囲をtheShapeRangeと設定 set shapeCount to (count shapes of theShapeRange) --いくつ選択しているかを取得 -- 選んでいる全てのShapeを吹き出しに変更 repeat with i from 1 to shapeCount set auto shape type of shape i of theShapeRange to autoshape rectangular callout --図形を吹き出しに end repeat end tell 形状が変化したでしょうか? 書式を含めて一括変換 最後に書式も含めて一括変換していきたいと思います。 設定方法は生成の時と全く同じです。 tell application "Microsoft PowerPoint" -- 選んでいる全てのShapeを吹き出しに変更 -- set theShapeRange to shape range of selection of active window set shapeCount to (count shapes of theShapeRange) repeat with i from 1 to shapeCount tell shape i of theShapeRange set auto shape type of it to autoshape rectangular callout --図形を吹き出しに set line weight of line format of it to 1 --枠線の太さを1に set line style of line format of it to single line --枠線を実線に set dash style of line format of it to line dash style solid --枠線を実線に set fore color of line format of it to {200, 200, 200} --枠線の色をグレーに --set fore color theme index of fill format of it to sixth accent theme color --塗りつぶしの色をアクセント6に set fore color of fill format of it to {229, 229, 229} --塗りつぶしの色をグレーに set font color theme index of font of text range of text frame of it to second text theme color --フォントをテキスト2に end tell end repeat end tell 選択した図形の段落設定(行間、段落間設定)を一括変換 デザインを揃える上では、行間や段落間設定を揃えておくことが重要です。 段落設定はかなり深い部分にあります。 paragraph format of text range of text frame of shape X AppleScriptとして新たに覚えることはありませんが、人にとっては有用なScriptだと思いますので載せておきます。 tell application "Microsoft PowerPoint" -- 選んでいる全てのShapeの段落を設定 set theShapeRange to shape range of selection of active window set shapeCount to (count shapes of theShapeRange) repeat with i from 1 to shapeCount tell paragraph format of text range of text frame of shape i of theShapeRange set line rule within of it to true --行間の設定を行の倍数に set space within of it to 1.1 --行間を1.1倍に set line rule before of it to false --段落前の設定をポイントに set space before of it to 3 --段落前を3ポイントに end tell end repeat end tell メニューへ設定 ここで作成したAppleScriptの活用方法ですが、最もわかりやすいのはメニューへの設定ではないでしょうか。 現在アクティブのアプリケーションに合わせてメニューを変更する機能がOSレベルで実装されています。 設定方法も非常に簡単で、メニューの設定をした後、該当のフォルダにスクリプトファイルを配置するだけです。 以下、その方法を記載します。 まずはメニューを表示する スクリプトエディタの「環境設定」>「一般」の中に「メニューバーにスクリプトメニューを表示」という項目がありますので、ここにチェックをつけてください。 これでメニューバーにスクリプトのアイコンが表示されるようになります。 アプリケーションスクリプトを設定する 該当のアプリケーションを起動します。(今回はPowerPoint) その状態でスクリプトメニューを表示すると「スクリプトフォルダを開く」の下に「PowerPointスクリプトフォルダを開く」というメニューが出てきます。 これをクリックし、開いたフォルダにスクリプトをコピーしておけば、いつでもメニューから呼び出せるようになります。 関連記事 参考リンク 多くのページを参考にさせていただいています。 思い出せる範囲で追記していきます。 AppleScript全般(入門から応用まで) AppleScript言語詳細 https://seraphy.hatenablog.com/entries/2010/04/08 https://seraphy.hatenablog.com/entries/2010/04/11 PowerPointのさまざまな選択状態について(VBA情報) 表の編集については、この記事が長くなったため、分割先 (https://qiita.com/yuoya/items/b1f10789acf73420ea80) に記載しています ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M5Stack UnitV2をmacOSで試す

やりたいこと 以下の環境でM5Stack UnitV2と繋いでAIカメラで遊ぶまで。特にドライバはインストールしていない。 M5Stack UnitV2 MacBook Pro macOS Big Sur Chromeブラウザ まずは接続 Type-CのケーブルでMacとM5Stack UnitV2を接続する。LEDが点灯してファンが回り出すのを確認する。その後、TerminalでM5Stack UnitV2を探す。 $ ifconfig 多分こんなのがM5Stack UnitV2だと思う。enの数字は環境によって違うかもしれない。わかりやすいのはM5Stack UnitV2をUSBで繋がない状態でifconfigしてみた結果と繋いだ状態のifconfigの差分がM5Stack UnitV2なので、見つからなかったら抜き差しして差分を調べると良い。 en7: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=6467<RXCSUM,TXCSUM,VLAN_MTU,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZE 以下のコマンドでネットワークを有効にしてあげるとM5Stack UnitV2とのコネクションが確立する。 $ sudo ifconfig en7 down $ sudo ifconfig en7 up AIカメラで遊ぶ 繋がったらChromeブラウザで http://10.254.239.1/ を叩いてみる。M5Stack UnitV2と接続されていればObject TrackingやFace Trackingなどのサンプルが試せるページが開くはず。 色々試してみたけれど、ファンがついてるものの、ちょくちょくオーバーヒートする。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 macにpythonの仮想環境を作りモジュールを導入

M1 macbookProを会社から貸与いただいたので、pythonの仮想環境を作ってみました。 今回仮想環境は、machineLearningという名前で作ってます。 ${your_name}@MacBook-Pro> python3 -m venv machineLearning sourceコマンドで仮想環境を起動すれば、その環境に入れる。 ${your_name}@MacBook-Pro> source ./machineLeaning/bin/activate (machineLearning)${your_name}@MacBook-Pro> その仮想環境にnumpyモジュールをインストールする (machineLearning) ${your_name}@MacBook-Pro ~ % pip install numpy Collecting numpy Downloading numpy-1.20.3-cp38-cp38-macosx_10_9_x86_64.whl (16.0 MB) |████████████████████████████████| 16.0 MB 5.9 MB/s Installing collected packages: numpy Successfully installed numpy-1.20.3 次にtensorflowをインストール。が失敗してしまう。次のように公式サイトどおりにpipするも、 pip install --upgrade tensorflow Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow のエラーメッセージでダメだった。バージョン指定しても同じ。M1(ARM版)用のtensorflow見つからないと言っている。 pip install --upgrade tensorflow そこで、 Mac-optimized version of TensorFlow 2.4 https://note.com/npaka/n/n7f2dcf8b316d を拝見すると、M1 MAC用のパッケージがあるようである。しかもこっちの方が、実行スピードが格段に速い。実測だと4倍以上のようだ。 将来的にはマスターブランチにマージされるようである。これをインストールするため、 公式appleのgithub    https://github.com/apple/tensorflow_macos のINSTALLATION に書いてある通り、次のscriptを実行。 $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)" 無事インストールできました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 macにpython仮想環境を作りTensorFlowを導入

はじめに M1 macbookProを会社から貸与いただいたので、pythonの仮想環境を作ってみました。 ところがtensorflowモジュールがpipで入らなくて、それを解決できたので記事にします。 pythonの仮想環境を作る 今回仮想環境は、machineLearningという名前で作ってます。まずpythonの仮想環境を作ります。 ${your_name}@MacBook-Pro> python3 -m venv machineLearning 仮想環境にモジュールをインストール sourceコマンドで仮想環境を起動すれば、その環境に入れる。 ${your_name}@MacBook-Pro> source ./machineLeaning/bin/activate (machineLearning)${your_name}@MacBook-Pro> その仮想環境にnumpyモジュールをインストールする (machineLearning) ${your_name}@MacBook-Pro ~ % pip install numpy Collecting numpy Downloading numpy-1.20.3-cp38-cp38-macosx_10_9_x86_64.whl (16.0 MB) |████████████████████████████████| 16.0 MB 5.9 MB/s Installing collected packages: numpy Successfully installed numpy-1.20.3 TensorFlowが入らない 次にtensorflowをインストール。次のように公式サイトどおりにpipするも、失敗してしまう。適当なバージョン指定しても同じ。M1(ARM版)用のtensorflow見つからないと言っている。仮想環境に見合ったモジュールのバージョンが見つからない、ということのようだ。 ${your_name}@MacBook-Pro> pip install --upgrade tensorflow Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow M1用のTensorFlowモジュールを発見 そこで、 Mac-optimized version of TensorFlow 2.4 を拝見すると、M1 MAC用のパッケージがあるようである。しかもこっちの方が、実行スピードが格段に速い。実測だと4倍以上のようだ。 tensorflowのブログ から引用 将来的にはマスターブランチにマージされるようである。 TensorFlowモジュールのインストール これをインストールするため、 github 公式apple のINSTALLATION にあるように、次のscriptを実行。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)" 無事インストールできました。M1 MAC用に作られたモジュールはまだまだ少ないようです。M1MACに対応して性能を生かせるようになるまで、しばらくかかるのではないかと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Import "requests" could not be resolved from sourcePylancereportMissingModuleSource

現象 importの失敗 Import "requests" could not be resolved from sourcePylancereportMissingModuleSource pipしても、既にあると表示 pip install requests Requirement already satisfied: requests in *************** pathの確認↓ import sys import pprint for place in sys.path: print(place) 原因 Python2系と3系が混在していて、VSコード内部でターミナルを起動したため、Python2系を参照していた (ターミナル単体で起動すると、Python3系を呼ぶのでややこしい...) 解決方法 VSコードのSettingにpython.pythonpathと検索 pythonをpython3に変更する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

pyenv global,localが使えなくなったときの対処法

はじめに Macでpyenv+pipenvでPythonの仮想環境等の管理をしているのですが、気付いたらpyenv global(pyenv local)をしてもPythonのバージョン変更が反映されませんでした。 実行環境 Inter Mac pyenv + pipenv 原因 とりあえず、pythonのバージョン自体の確認 $ python -V >>> Python 2.7.10 あれれ?Macのデフォルトのバージョンになってしまっている、、、。 どのpythonを使っているのかの確認 $ which python >>>/user/bin/python ほーそこのを使っているのか パスの指定が/Users/xxx/.pyenv/shims/pythonじゃないとpyenvでpythonを使えないのでzprofileの確認 export PYENV_ROOT=${HOME}/.pyenv if [ -d "${PYENV_ROOT}" ]; then export PATH=${PYENV_ROOT}/bin:$PATH eval "$(pyenv init -)" fi これで問題ないはずなんですが pyenvの公式githubを見ていくと 先ほどの下から二行目の部分が違ったので変更 eval "$(pyenv init -)" を eval "$(pyenv init --path)" に変更して反映させる $ source .zprofile # 反映されたかの確認 $ python -V >>> Python 3.6.7 $ which python >>>/Users/xxx/.pyenv/shims/python おかえりpython 最後に 1ヶ月くらい前(2021/4/30)に初期化したときは問題なかったので pyenvの仕様が最近変わったっぽいですね 参考 pyenv
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む