iOSでSDカード上の任意のファイルを有線で取り込む脱法的ユーティリティ群「OrangeMint」
価値ある情報をユーザー視点で発信するブログ
iPhoneなどのiOS搭載機は、SDカードカメラリーダーやCamera Connection Kitなどの周辺機器を使ってメモリカードから画像を取り込むことができます。
以前はiPadのみの特権でしたが、近年はiPhoneにも対応機種が拡大。
この方法での取り込みはWiFiストレージと違って転送スピードが高く、WiFi接続までにかかる手間がない上、挿せば読み込み画面が勝手に立ち上がってきて大変便利。
しかし、SDカードカメラリーダーで取り込めるのは画像や動画などに限られ、それ以外のファイル、例えばテキストファイルなどは対象外です。
画像、動画以外のファイルでもWiFiストレージ機器を使えば無線でやりとりが可能ですが、iOSは接続先SSIDの優先順位を設定できず、また接続先SSIDを指定してのWiFi接続が一部のアプリにしか許されていないため、WiFi接続の使い勝手が今一つなところがあります。
そこで、画像に任意のファイルを埋め込んで、無理やりSDカードカメラリーダーで取り込ませようと考え、それを実現するユーティリティ群を作成しました。
名付けて「OrangeMint」。
なぜその名前。
もくじ
OrangeMintはダミー画像の後ろにメタデータやファイルの中身を連結し、偽装ファイル化。任意のファイルをiOSからは画像として取り扱わせることによって、SDカードカメラリーダーなどによる取り込みを可能とします。
取り込んだ後はOrangeMintが提供するiOS用のユーティリティによって冒頭のダミー画像を読み飛ばし、本命ファイルを取り出すわけです。
この至って単純なる仕組みは基本的に大変うまく行きます。
下掲はMS-DOS版Mobile Gearでテキストファイルを作成し、偽装ファイル化。Camera Connection Kitを使ってiPhone 7 Plusに取り込んでいる場面を撮影した動画です。
VZ Editor 1.6とATOK8で文書作成。VZ Editor 1.6からOrangeMint形式偽装ファイル作成コマンドOMINT.EXE実行マクロを「Ctrl+I、O」で起動し、編集中のファイルを偽装ファイル化。このワンアクションで取り込み準備が完了するので、即座にSDカードをCamera Connection Kitに挿し込み、iOS側でOrangeMint.pyを実行。ファイルが埋め込まれたオレンジとミントのツートン画像を選択して、中に隠されたテキストファイルを取り出しています。
ファイルを埋め込んで掘り返してと
文書作成環境としては現在に至るも卓越したパフォーマンスを発揮しながらも、WiFi内蔵SDカードが使えないhp 200LX、MS-DOS版Mobile Gearにおいては感動的な瞬間ではないでしょうか。
偽装ファイルからのファイル復元に開発環境Pythonista 3を利用しているため、ファイルを取り出してからの処理はおおよそ考え付く限りのことが可能で、その柔軟性もOrangeMintの魅力といえましょう。
※DOS汎用2画面ファイラー
このユーティリティー群により、以下のような代表的な組み合わせでSDカードカメラリーダーを経由したiOS側への迅速な(テキスト)ファイル取り込みが実現します。
ポメラは第三世代以降のFlashAirと組み合わせると、Lua実行機能でテキスト保存毎にOrangeMint形式の偽装ファイルを自動作成させられるので手間なしです。FlashAirなのにWiFiは使わないわけです。
Pocket WZ EditorとPocket ATOKが使えるWindows CE(Handheld PC)もテキスト作成環境としては捨てがたいものがあるので、OrangeMint形式の偽装ファイル作成手段をいずれ用意したいところです。
同じ手順をこちらの記事でも解説しているので、文字だけではピンと来ない人は参考にしてください。
※Windows用のiCloudをインストールのこと
OrangeMint形式の偽装ファイルの入ったSDカード等をSDカードカメラリーダー等でiOS搭載機に接続し、OrangeMint形式の偽装ファイルをiOS搭載機側に取り込んだら、Home画面に設置したOrangeMint.pyの起動アイコンをタップ。
画像選択画面が開くので、オレンジとミントグリーンのツートン画像をタップ。
デフォルトでは偽装ファイルに格納していたのがテキストファイルなら(※)……。
※とりあえず拡張子txtを持つファイルのみをテキストファイルと判定しています
といった感じで満艦飾的活用が可能です。不要な処理はOrangeMint.py冒頭の設定部分を書き換えるとオフにできます。
# ------------------設定部--------------------- # テキストファイル時のみ後処理(True or False) copyToClipboard = True shareText = True # 後処理 (True or False) saveAsFile = True openIn = True # saveAsFileをTrueに設定する必要あり # ファイル保存先ディレクトリ destinationDirectory = "OrangeMint" # --------------------------------------------
偽装ファイルに格納していたのがテキストファイルでなければ、無論1と3はなしで、ファイル保存時の変換もなしとなります。
もちろん、URL Scheme経由で自分で好みのアプリと直接連携する処理も書けます。
以下は取り出したテキストをTwitterの投稿画面にセットする例
#!python2 #coding: utf-8 import photos import os import clipboard import dialogs import console import urllib #←追加 import webbrowser #←追加 #(割愛) # 末尾に追加↓ webbrowser.open("twitter://post?message=" + urllib.quote(txt))
hp 200LXやMS-DOS版Mobile Gearでの利用を想定。
最低限の準備はOMINT.EXEをパスの通った場所にコピーするだけです。
基本の使い方は以下のようになります。
OMINT <ドライブレター> <処理対象ファイルのパス>
具体的には以下のようになります。
OMINT A: A:\TEXT\TARGET.TXT
hp 200LXでも、MS-DOS版Mobile GearでもSDカードはA:になるので、ドライブレターはA:でしょう。
この場合、「A:\DCIM\100ORANG」というディレクトリが作成され、その中に「OM000001.PNG」といった感じでOrangeMint形式の偽装ファイルが保存されます。
複数回実行すると「OM000001.PNG」がカウントアップしながら複数出来ていきます。
恐らく今DOSを使っている人は2画面ファイラーK-Launcherを使っているのではないでしょうか。
その起動メニューへの登録は、KL.CFGの起動メニューのパートを下記のように書き換え、KLCUST.EXEを実行します。具体的には、一番末尾に「偽装ファイル化」という行を加えています。
KF.CFGを書き換えても、KFCUST.EXEを実行するまでは変更内容が反映されませんのでご注意ください。
;-------------------------------------- [,]起動メニュー M_exec = { K,KmTermX ,,KTX L,KL cust ,,%j%0 VZ KL.CFG%:KLCUST D, ,,DUMP %C U, ,,UNDELETE F,Whereis ,S,%" Find file "dir /s /b /a %P>%'TMP'$%v1%'TMP'$ %J R,HSB reset ,,%M4 E,Delete LFN ,,%K4 O,偽装ファイル化 ,,OMINT A: "%C" ,,, }
起動メニューの起動は「,」キーです。偽装ファイル化したいファイルにカーソルを合わせたら「,」でメニューを表示し、「O」(オー)キーでOMINTによる処理が実施されます。
文章作成にVZ Editor 1.6を使っているなら、VZ EditorからもOMINT.EXEで編集中のファイルを素早く偽装ファイル化が可能です。
. ├── AX/ │ ├── AX.DEF │ ├── VZAX.COM │ └── VZAX.DOC (割愛) ├── VZFL.DEF ├── VZIBMJ.COM ├── VZIBMJ.DEF (割愛) └── OMINT.DEF
OrangeMint付属のOMINT.DEFをVZ Editorの実行ファイルがあるディレクトリにコピーし、VZIBMJ.DEF(環境によって異なるので、自分が使っている初期化ファイル)を次に示すように書き換えます。
まずは、VZIBMJ.DEF冒頭にある2ストロークキーの設定部分に^Oを追加。これでCtrl+Oが2ストロークキーの1段階目に指定できます。
初期状態では以下のようになっているのを……。
* C コマンドキー 00 ^Q ^K [ESC] ;2ストロークキー(最大6個)
このように書き換えます。
* C コマンドキー 00 ^Q ^K ^O [ESC] ;2ストロークキー(最大6個)
さらに、VZIBMJ.DEFの703行目辺りにある以下の部分。
* E その他 1 vzfl 2 editfile 3 .doc .txt .bat .def .H .C .CPP .inc .asm .nif .mix
この1の行の末尾に+omintを加えます。
* E その他 1 vzfl+omint 2 editfile 3 .doc .txt .bat .def .H .C .CPP .inc .asm .nif .mix
これでVZ Editorを再起動すると「Ctrl+O、O」でOMINTによる編集中のファイルの偽装ファイル化が素早く実行されます。
次の瞬間、書き出し先に指定したSDカードを引き抜き、SDカードカメラリーダー等に差し込んでiOS搭載機で読み込み可能となります。
ディスク上のファイルが使われるので、先に文章をセーブしてください。
OrangeMint付属のOrangeMint.lua.txt(※)は、Luaが実行できるFlashAirのW-03もしくはW-04で使用可能です。
※なぜluaファイルに拡張子txtを付加しているかというと、こうしても動作に支障はないばかりか、こうしておけばポメラ自身で編集することが可能だからです。
. ├──OrangeMint/ ① ├──SD_WLAN/ ③ │ └── CONFIG └──lua/ ② ├── OMINT.PNG └── OrangeMint.lua.txt
① FlashAirのルートにOrangeMintディレクトリを作成。
② FlashAirのルートにluaディレクトリを作成。luaディレクトリの下にOMINT.PNGとOrangeMint.lua.txtをコピー。
③ ルートディレクトリ下にある不可視ディレクトリSD_WLAN内のファイルCONFIGをテキストエディタで編集。「LUA_SD_EVENT=/lua/OrangeMint.lua.txt」という行を追記して保存します。
[Vendor] (割愛) PRODUCT=FlashAir VENDOR=TOSHIBA UPLOAD=1 WEBDAV=1 LUA_SD_EVENT=/lua/OrangeMint.lua.txt
これで準備はOK。
ポメラでファイル操作をするたびに監視対象であるOrangeMintディレクトリ内のテキストファイルが調査され、その中で最新のファイルが偽装ファイル化されて「/DCIM/100ORANG」に書き出されます。
. ├── DCIM │ └── 100ORANG │ └── OR000001.PNG ←ここに偽装ファイルが書き出される ├── OrangeMint ←このディレクトリ下が監視されている │ ├── foo.txt │ └── bar.txt ├── SD_WLAN │ └── CONFIG └── lua ├── OMINT.PNG └── OrangeMint.lua.txt
従って、OrangeMintディレクトリ以下で作業をする限り、テキストを保存したらすぐFlashAirをポメラから引き抜いて、SDカードカメラリーダー等を使いiOS搭載機で取り込めます。
偽装ファイルOR000001.PNGは常に上書きされ、/DCIM/100ORANGディレクトリ内にはOR000001.PNG一つしかない状態が正常です。ファイル操作をするたびに処理が走るので、そのたびに別の画像として書き出していたら大変なことになってしまいます。
最新のファイルとは別のテキストファイルを書き出したければ、そのファイルを開いてスペース挿入、スペース削除、保存といった感じでタイムスタンプを更新し、最新のファイルにします。
ちなみに、ポメラDM100はテキストファイル以外のものもファイラーから存在が確認できたのに対し、DM200はファイラーからテキストファイル以外のものが全く見えないばかりか、実際にはファイルがあっても「(空フォルダ)」と表示されるため、OrangeMint.lua.txtが動いているかどうか判断しづらいのは注意点です。DM30は所有していませんが、DM200と同様の状況かもしれません。
たまに、SDカードカメラリーダー等をiOS搭載機に差し込んでも読み込み画面が立ち上がってこなくなることがあります。
筆者の手元ではiOS 12のiPhone、iPadで発生したので、恐らくそこそこの頻度で発生する不具合のはず。
その場合は、iOS搭載機を再起動すると直ると思います。
iCloud同期をオンにしていると、SDカードカメラリーダーから読み込んだ画像はiCloudを経由して別のデバイスから見られるようになりますが、同期の条件によってはダミー画像の後ろにある埋め込んだパートが削除されます。
「読み込んだiOS搭載機→iCloud→macOS機」では大丈夫だが、「読み込んだiOS搭載機→iCloud→iOS搭載機」だとダメな模様。
ダミーの64×64 png(1352バイト) | ファイル名(256バイト) | 任意のサイズのファイル |
MS-DOS系にあるCOPYコマンド、Unix系で使えるcatコマンドでファイル結合しても偽装ファイルはできます。