a-Shellからobjc_utilを動かす
皆さんお久しぶりです。1年ぶりでしょうか...
今回の記事はiOSアプリであるa-Shellからobjc_utilを使うという記事です。
結論から言いますとPythonista3からダイレクトに輸入してもそのままでは動きません。
objc_utilの1151行目にあるinspect.getargspec(method)をinspect.getfullargspec(method)にしたりする必要があります。
逆に言えば変更箇所はその程度で動きます。
さて、今度はa-Shellでスクリプトを動かしてみたいと思います。
pome-taさんのスクリプトを今回は使います。
import pdbgをコメントアウトして使います。
動かすと...そのまま「python 231010_1947.py」とやるとクラッシュすると思います。
対処方法は...力技ですが..以下追記します。
def main():
ovc = ObjcUIViewController.new()
present_objc(ovc)
def _main():
import sys, os, concurrent.futures, time
_file = sys.argv[0].replace('.py', '').split(os.sep)[-1]
def target(_file):
exec('import {};print({}.main())'.format(_file, _file), globals())
while True:
time.sleep(1)
with concurrent.futures.ThreadPoolExecutor(os.cpu_count() * 9999) as thread:
thread.submit(target, _file)
thread.shutdown()
if __name__ == '__main__':
_main()
こちらの対処方はスクリプトからスクリプトを読み込む禁忌の手法でスクリプトを起動し、マルチスレッドで無限に待ち続ける対処方法です。
こちらを追記してようやくクラッシュしなくなりました。
こちらを応用すればa-Shellからコマンド一つでUIが起動するようになったりします。
夢が広がりますね!
今回はここまでにします。また次回お会いしましょう( 。・ω・)ノシ
iOS端末からWindowsへ純正アプリだけで画像と動画を送る話
どうもです、今回はiOS純正アプリや機能でWindowsに画像や動画を送る話です。
まず、下準備として「python3.x」が必要になります。
ここからWindows版python3.xをダウンロードしてきます。
今回はx64版python3.xをパソコンにインストールしておきます。
インストール方法は他のサイトでも掲載されているので割愛しますが、環境変数に追加という項目にチェックだけは入れて置いてください。
次はWindowsをiOS機器からデータを受け取れるようにモジュールを追加していきます。
コマンドプロンプトを管理者権限で起動してから
python -m pip install -U wsgidav cheroot
と入力します。
モジュールのインストールが終わりましたら次はサーバーの設定ファイルを作成します。
ここから設定ファイルを任意の場所に保存して置きます(例: C:\ServerConfig\ServerConfig.yaml)
次に設定ファイルを変更していきます。
3行目の「port: 80」の「80」を任意の数字にします。これがサーバーを立てる時に必要なポート番号となります。(デフォルトでは80番ポートを設定してあります)
次に13行目の「'/': './'」の「./」を任意のフォルダー場所にします。(デフォルトでは設定ファイルの場所になっています)
次に23行目~24行目を変更します。
23行目の「'test':」の「test」を任意の英文にします。これがユーザー名となります。
24行目の「password: 'password'」のシングルクォーテーションつまり「'」で囲っている「password」を任意の文字列にします。これがサーバーのパスワードです。
次にサーバーにする為にバッチファイルを作成します。
メモ帳を開き
「@echo off」と1行目は書き、2行目に「wsgidav --config=C:\ServerConfig\ServerConfig.yaml」と書きファイル名を「Server.bat」などと入力して設定ファイルのある場所に保存します。
次にバッチファイル単体ではパソコンを起動時にコマンドプロンプトが出てきてしまうので、コマンドプロンプトを出さないように一工夫します。
またまたメモ帳を開きまして
1行目に「Set ws = CreateObject("Wscript.Shell") 」と入力し、
2行目に「ws.run "C:\ServerConfig\Server.bat", vbhide 」と入力します。
(ここではバッチファイル名は「Server.bat」としています)
ファイル名を「StartServer.vbs」などとして設定ファイルがあるフォルダに保存します。
次はタスクスケジューラーにサーバーを登録します。
「基本タスクの作成」から名前を任意の名前にします。
ここでは「PythonAirDrop」とします。
次にトリガーを「ログオン時」とし、操作を「プログラムの開始」にします。
プログラム/スクリプトの項目は「wscript.exe」として引数を先程のvbsファイルがある場所を入力します。
ここでは「"C:\ServerConfig\StartServer.vbs"」とします。
完了してから作ったタスクを実行してあげるとサーバーの完成となります。
次にiOS機器の設定です。
ここからショートカットアプリのスクリプトをダウンロードして置いてください。
次に「WinAirDrop」というショートカットを開きます。
先程Windowsで作ったサーバーを入力して行きますが、サーバーのURLは「http://パソコンの機器名.local:設定ファイルで指定したポート番号」としておくとルーター内でiPアドレスが変わっても一々設定しなくて済みますがわからない場合は「ipconfig」とWindows上で入力して「IPv4 アドレス」の項目のiPアドレスと設定ファイルに記述したポート番号でもいいです。
入力箇所は「http://localhost.local:80/」の部分に置き換える形で入力します。
次に「ユーザー名とパスワードの設定」ですが、設定ファイルに記述したユーザー名とパスワードを「ユーザー名:パスワード」という感じに「user:password」と書かれた所に置き換える形で入力します。
以上で初期設定は完了です。
あとはウィジェットとして使うもよしですし、画像を共有する時に「WinAirDrop」を選択するもよしで、簡単にWindowsへ動画と画像を送信することができます。
※なお、本スクリプトはWindowsと同じWi-Fi下でないと動作しませんので、実際はAirdropとは違います。
※2023年2月9日 更新: フォルダをアップロード時の日時で作成し、そこにファイルをアップロードするようにしました。
※2023年2月9日 更新 フォルダを何度も作成してしまう不具合を直しました。
※2023年2月9日 更新 MOVファイルを送信する時にすべてテキストファイルになってしまう問題を修正しました。
Yahoo天気から地震情報だけをスクレイピングして取得してみる
またまた過去に作ったもののご紹介。
「Yahoo天気」から地震情報のみをスクレイピングして取得してみました。
本ツールには「BeautifulSoup4」と「html5lib」を使用しないバージョンもありますが、こちらは正規表現だけでHTMLの解析を行っており、外部モジュールはカラーコードを使うには必須な「Colorama」のみとなっています。
動作には違いはありませんが、外部モジュールを削った分実行速度は早くなってるはずです。
また、本ツールはMITライセンスとなっているのでMITライセンス内でご自由にお使いください。
◆作成の経緯
地震情報の取得を簡単にできて文字列のみで取得できないものかと調べていて、なかったので「そうだ。私にはかじりかけのPythonがあるんだ。どうにかできないかな?」と思ったのがきっかけで、Pythonをまだほぼ知らない状態で1年かけて作ったものとなります。(のちに手直しした時に作成したのが「BeautifulSoup4」を使わないバージョンでした)
◆本ツールの動作環境
基本的にPython3が動く環境であれば動作しますが、Pythonista3はそのままでは動かないので、Pythonista3用に作成したバージョンもありますのでそちらをお使いください。
Pythonista3用(BeautifulSoup4とColoramaを使用するバージョン)
Pythonista3用(Coloramaのみを使用するバージョン)
◆本ツールの実行方法
python3 EarthQuakeInfomationTool.py
python3 ColorEarthQuakeHistory.py
と実行すると各スクリプトから色分けされた形で以下のように地震情報が取得できます。
ffmpegによる再帰的な画像の拡大化ツールを作りました
お久しぶりです。
だいぶ前に作ったツールのご紹介です。
タイトルの通りですが、世の中にはWaifu2xなどの画像拡大とノイズ除去ツールがあるなかでiOSでも動く画像一括拡大ツールがなかったので当初はa-Shellというアプリで動かすことを想定していたツールのお話です。
画像の様な感じにフォルダ内の画像ファイルを一括で指定した数値で拡大します。
[スクリプト名(pythonスクリプト)] [フォルダ(「/(スラッシュ)」を含めない様にしてください)] [拡大する倍率(小数点はエラーになると思いますので整数で指定してください)]
例: main.py test 3
で指定したフォルダ内の画像をPNGでかつ、指定した倍率へ一斉変換します。
ただし、ノイズ除去はしていないので場合によっては画質が悪くなるかもしれません。
※iOSではffmpegをネイティブで搭載していて、Pythonが動くアプリはa-ShellのみのようですのでiOSではa-Shellをお使い下さい。
a-ShellのffmpegはどうやらArm版のffmpegを搭載しているようですのでiSHなどのアプリよりは結構処理は早いです。
※ただしa-Shellのffmpegは動画の加工や画像の加工には使えるようですが、ライセンス等の問題からGPLライセンス等を使う機能はオフにしてあり、SSLオプションも使えないffmpegのようです。
(ffmpegはGPLライセンス等をオフにしたら実装自体は比較的簡単だったと作者様のTwitterに書いてありました。)
pythonでgnome-shellプロセスの監視
お久しぶりでございます。
今回はPythonでgnome-shellプロセスを監視しようと思います。
本題に入る前に最近のお話を少し…。
当環境では21.04にしてから「gnome-shell」プロセスがCPU使用率100%になることがしばしばありました。
今回はそんな「gnome-shell」を監視して、100%にならない様に事前に防ごうって話です。
まず、CPUを食いまくってるプロセス「gnome-shell」がCPUを食ってるという情報を取ってくる必要があります。
/usr/bin/ps -C gnome-shell --format %cpu | grep -v %CPU
上記のコードを端末(Terminal)で実行すると
2.8
といった感じに表示されるはずです。
今回はこの数値が変動するたびに特定のコードを実行するといったコードを書きます。
githubに載せましたが、今回のはif文まみれです。
条件としては「CPU使用率が以前よりも高い場合にgnome-shellを再起動」を基本としています。
コード内に「Restart_GS」というコマンドがありますが、中身はこれです。
https://github.com/CrossDarkrix/Auto-Restart-Gnome-Shell_Tool/blob/main/Restart_GS
「GS」は「gnome-shell」という意味です。
「Restart_GS」は「/usr/bin/」に配置して置いてください。
また、「Refresh-Gnome-shell.py」はデーモン化を想定していて、導入する場合はデーモンを個別に作成してください。
※デーモン起動時やスクリプト起動時にgnome-shellが再起動するのは仕様です。
「psコマンド」で監視している部分のコードを書き換え、実行するコマンドの部分も書き換えれば別のプロセスを監視して「CPUが高くなった時に」任意のコマンドを実行することができます。
本当は「プロセスがCPUを特定の数値まで消費した時に任意のコマンドを実行」としたかったのですが、特定のプロセス(今回はgnome-shell)はpsコマンドで監視するしかなかったのとそんな都合のいい感じにPythonでは制御できないので断念しました。
PulseAudio関連でエラーが出た時の対処法やdefault.paを消した場合の対処法
今回はUbuntuのお話。Ubuntuって実は軽くてWindowsいらないくらいな使い勝手なんです。
[pulseaudio] module.c: Failed to load module "module-native-protocol-unix" (argument: ""): initialization failed.
[pulseaudio] backend-ofono.c: Failed to register as a handsfree audio agent with ofono: org.ofono.Error.InUse: The resource is currently in use
と出た時の対処法が結構複雑だったので自分用にまとめ。
対処法1
apt reinstall ofono
対処法2
「/etc/pulse/default.pa」に追記
load-module module-native-protocol-tcp
上記の箇所を
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1; auth-anonymous=1
にして
#load-module module-native-protocol-unix
上記を
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket
にする。
対処法3
「/etc/environment」に追記
PULSE_SERVER = 127.0.0.1
にする。
当然ながら「auth-anonymous=1」でセキュリティーが低くなるのでファイアーウォールはオン。
shairport-syncのために5000ポートの許可をしておく。
「/etc/pulse/default.pa」がそもそもない場合(消した場合)
対処法:
isoファイルを「https://www.ubuntulinux.jp/products/JA-Localized/download」から持ってくる。
isoファイルをアーカイブマウンターで開き「/casper/filesystem.squashfs」を開く
開いたら「etc/pulse/」と開き、「default.pa」を開き内容をコピー。
母艦(PC本体)の「/etc/pulse/」を開き「default.pa」にさっきコピーした内容をコピー。
pulseaudio -k && pulseaudio -D
を実行する。
「default.pa」が読み取り専用でコピーできない場合
cd /etc/pulse && ls -l
をしてみる。
default.pa -> /etc/pulse/default.pa.BeforeVMwareToolsInstall
と書かれていた場合はVMWareから引っ張ってきたまたはVMWareで動かしているOSなので、
「/etc/pulse/」直下に「default.pa.BeforeVMwareToolsInstall」を作成。
echo>/etc/pulse/default.pa.BeforeVMwareToolsInstall
先程コピーした内容を「default.pa.BeforeVMwareToolsInstall」にコピーして
pulseaudio -k && pulseaudio -D
する。
エラー対処時に参考にした記事
- https://lugia.hatenablog.com/entry/20100402/1270200902
- https://www.foell.org/justin/raspberry-pulse/
Arc Menu用日本語訳ファイルを作ってみました。
今回は翻訳に3時間かけたArc Menuの翻訳ファイルについてのお話。
今回は海外でそこそこ人気があるUbuntuなどのLinux用のメニューで、Windowsメニューに近いArc Menuの日本語化に挑戦してみました。
※以下の使い方はUbuntu 20.04での方法です。
使い方
Arc menuをgit cloneするところから始まります。
git clone https://gitlab.com/arcmenu/ArcMenu.git
としてgit cloneをします。
ここで疑問に思うでしょうが、なぜ本家の「arcmenu-team」の方にしないのか、ですがこちらは開発者がArc Menuの開発から手を引くようで本家は開発が停止されたので、開発を引き継ぎした「AndrewZaech」様の方の「Arc Menu」を選ぶことにしました。
次に私の翻訳ファイルもgit cloneします。
git clone https://github.com/CrossDarkrix/Arc-Menu-Japanes-Translate-File.git
として、「ja.po」をgit cloneした「ArcMenu/po」へコピペします。
次にTerminalにて
cd ArcMenu
make install
として、インストールします。
次に「alt + F2」を押して「r」と入力します。