最近のAndroidの外部sdcardへのコピーを考える

MSCに最近のAndroidは対応していないので、外部sdcardに対してROBOCOPYが使えなくて困る。

もちろん、外部sdcardを引っこ抜いてカードリーダなりで読み込ませれば良いのだけど、毎回それをやるのもバッテリーを外さないと出来ない機種も有って面倒だ。rsyncはUSBで出来てることをわざわざネットワークでやるのも…というわけで除外。USBで繋がればそれでいいのだ。

仕方無いので、find . -type f -print0 | xargs -0 ls -l --full-timeでファイルリストを出力し、sedで整形したあとに、コピー元と比較したらcp --parents コピー元 コピー先とシェルスクリプトを吐き出すスクリプトをpythonで作成した。

あとはこれをローカルで実行してコピー先に出来たファイルをMTPで普通に外部sdcardに移動させればよい。

そうそう、jpmarkdownプラグイン入れました。マークダウン記法はやはり楽だ。

6~7月の近況

例によって生存報告がてら。

旧版Fireタブレットを入手した

だいぶ前の話になるが3月に(今となっては旧版となる)Fireタブレットを入手した。自分はあまりamazonを使っていないので、Androidタブレットとしては出来ることは限られている。端末エミュレータは問題無く動作。amazonサービスをよく使う人なら良いタブレットなんだろうね。

GNU nano v2.8.5がリリースされた

GNU nano 2.8.5がリリースされている。allow negative lineって何のことか一瞬分からなかったけど、要は最終行からの指定が出来る様になったということね。最終行からの検索が必要になったときに威力を発揮するかもしれない。

v2.8.5-36あたりからは遂に全角の折り返し対応がされたので、自分で書いていたパッチが要らなくなった。自分の感覚だと>と<の表現が逆が好みなので、そこのパッチは充てているが。

EveryPhone ACを購入した

6インチのスマホが欲しかったので、安かったこれを購入。普段はUQモバイルを使っているのだが。

実際に使ってみて思うのは画面が大きいのはやはり良いということだ。勿論、携帯性は犠牲になるけど、それ以上に視認性の向上は大きい。

自分はターミナルで作業することも多いので、ある程度の大きさが欲しいのだ。

少し困るのは通常の端末と、BackキーとRecentAppキーが逆なことだ。RecentAppキーにBackキーを割り当てて、それぞれのLongPressにRecentAppキーを改めて割り当てる。所詮アプリの切り替えはそこまで頻繁にやるものでもないし、慣れるまでの暫定ということで。

サイトをHTTPS対応にした

いい加減に対応させないとと思っていたので、意を決して実行。まだcronとかは設定していないので、自動化はこれからすることにする。

GNU nano2.6.3をAndroid Terminal Emulatorで日本語を打てるように

8/10にGNU nano2.6.3が公開された。今回のポイントはAlt+3でコメント化ができるようになったことだろう。Ctrl+矢印もそれなりに使い勝手が上がりそうである。

早速Build。一部関数名が違っていたりするのでパッチの修正はそのぐらい。相変わらずglobには対応させていない。

現状、自分がAndroid用にコンパイルしているncursesはja_JP.UTF-8を決め打ちで返すようにしてしまっている。自分が使う分にはまったく困らないのだけど、公開するとなると気が引けているのが実情。

とりあえず、パッチを当てるときに嵌まった点を列挙。

MB_MAX_LENとMB_CUR_LEN

日本語パッチを作ろうとして大嵌まりしたのはこれにつきる。NDKだと1なのよね。マルチバイトまわりをmusl実装で置き換えたときに期待通りに動かなくてかなり悩んだ。

再定義して事なきを得たけど、UTF-8環境では4か6か、どちらで定義するのかという問題がある。

本来5オクテット以上の表現は不正なのだから、4だというのはわかるのだけど、6オクテットまでは例えそれが不正な形式とはいえ、形式上は取りうることができるのだからと言う理由で6で定義。もちろん、それが不正な形式を許容してよいという意味ではない。

もっとも、UTF-8の第1オクテットを見れば、その時点で5オクテット以上になるかどうかはわかるのだから、4で問題ないはずなんだけど。

ttynameとgetpwentとglob

NDKで実装されていない関数。

ttynameはひとまず使わなくてもすむように強制コメント化。

getpwentはなにもしない実装して空ぶらせることに。~userみたいなのはどうせ使わないから、なにもしない実装で困ることはないだろうということで。

globの実装は2.5.3と同様に見送り。2.2相当のファイル指定ができれば、自分は困らないので優先度を落とした。

2016-07あたりの近況

生存報告がてら。

nano 2.5.3日本語対応版パッチ

暫定パッチは出来た。が、肝心のタブレットが故障。環境が回復するまでスマホで確認することに。その後Android 5.1のタブレットを購入できたので、動作確認したらOK。最初PIEにするのを忘れて怒られたが。公開するためにはちょっと手直しが必要かな。

phina.js

phina.jsを使って、タッチ時の移動ルーチンとかを作成してみた。意外とすんなり書けるものだなぁと。ドキュメントも見るけど、どちらかと言うとソース本体を見ながら書いている。JavaScriptの勉強にもなるし。

Windows10のアップデート関連

XPS17をWindows10にアップデート。期限前にギリギリ滑りこませた形。aspire switch 10EはAnniversary updateに。

nano 2.5.3をAndroid Terminal Emulatorで日本語が使えるようにビルドした。

Linux環境でのテキストエディタはメインにnanoを使っている。jedも併用してるけど、nanoの方が気楽ではある。

Androidのターミナルでもnanoを使っているのだけど、通常だと日本語で文字化けしてしまう。日本語を開く機会はあまりないのだけども、文字化けしないに越したことはないので、nano 2.5.3をutf-8に対応させるべく、ソースからビルドしてみることに。予めapt-getでgcc-arm-linux-androideabiを入れておく。

 

まずはncursesが必要なので、ncursesをビルドすることにする。
ビルドするにあたっては下記サイトを参考にした。
Compiling GNU Nano for Android at Compdigitec Labs

その後fty_num.cのソースを一部変更。
この時点ではnanoのconfigureを通すのが目的なのでこれ以上の変更はしない。
そしてmake && make install。ncurseswのライブラリが作成された。

次はnanoのビルドにとりかかる。

configureを実行したところ通らないので修正して強引に通す。

android用のライブラリは一部実装されていないのものがある。例えばmblen、mbtowc、wctomb、getpwentはそもそもの実体がないのでリンクの時にエラーが出る。UTF-8の実装はmuslを使うことにする。

ncursesをロケール決め打ちの実装にする。そしてマルチバイト周りをmuslの実装を呼び出すようにして再度ビルド。

次にnano側でmuslのUTF-8の実装をする。getpwentはgetenv(“HOME”)で代用。globはinclude用に使われているので、ひとまず2.2.6相当で読めればなんとかなるからglobを実装から外す。ttynameもちゃんとした実装されていないから、呼び出さなくて良いように変更。

HTML Generating Time : 0.054 s