ActivePerl 5.10.0.1005 + Visual Studio 2005 SP1 上で PAR::Packer を使って実行可能ファイル化したものの、今日別の環境で動かしたら「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした」というエラーがでてしまった。
今まで Visual Studio 6.0 で PPM パッケージの作成やら PAR::Packer による実行可能ファイル化をしていたので気がつかなかったのだが、調べてみると Visual Studio 2005 以降だとどうもいろいろ面倒らしい。
ActivePerl + PPM パッケージだと自分で PPM リポジトリを用意しておくことで、開発環境の統一が楽になるという利点があったのだけれどもしばらく一筋縄ではいかなさそうなので、別の Perl ディストリビューションを使ってみることにした。
Windows 上の Perl としてしばらく使ってみることにしたのは Strawberry Perl。現在のバージョンは 5.10.0.6。 以前にもちょっと入れてみたことはあったけれども、きちんと使ってみるのは初めて。
MinGW や dmake が同梱されており、CPAN.pm を使って UNIX 上と近い感覚で Perl モジュールのインストールができる。 PAR::Packer を使って実行可能ファイル化した Perl スクリプトも実行できることを確認。
しばらく乗り替えてみることにする。
REGZA 37Z1 で PC 上の動画を再生できるようにしたいので設定を。 最初は MediaTomb をちょっと設定したみたのだが、REGZA 側で認識しないようなのでヤメ。結局 Samba 経由で動画を観られるようにした。
REGZA 側から書き込めるかどうかが肝らしい。 書き込めないと登録のための一覧にすら表示されないので注意。 実際に録画リストから動画を表示・再生させるとファイル共有ディレクトリに *.chap ファイルや *.meta ファイルが書き込まれるので、そのため書き込み権限が必要らしい。
あとは REGZA の動画再生に対応した動画ファイルをファイル共有ディレクトリに置けば OK。サブディレクトリを作ってそこに置いた場合は REGZA の録画リストでフォルダとして表示されてフォルダを選んで中を見ることができる。
肝心の動画ファイルについては FFmpeg で試行錯誤中。YouTube の HD 720p の動画は変換して再生することができた。IXY DIGITAL 210 IS で撮った 640x480 の動画はまだ再生できず。試行錯誤が必要だな。
Xperia SO-01B も Android 2.1 になったわけだけれど、NTTドコモも次々 Android 端末出してるし Xperia も後継機種の噂が出ているしで、ビジネス的にも開発リソース的にも Android 2.2 以降へのアップデートの可能性はちょっと低くなってるんじゃないかなと思う今日このごろ。 であればそろそろ root 化にチャレンジしてもいいよね?
ということで Web で調べ調べしながら root 化。
マーケットで z4root を検索してインストール。 起動したら画面中央の Root ボタンを押す。 「USB デバッグが有効になってないよ」という主旨のダイアログが出たので、ボタンを押すと Xperia の[アプリケーション設定]画面が開く。[開発]の中の[USBデバッグ]をチェック。
再度 z4root を実行して Root ボタンを押す。
しばらく待つと再起動がかかる。
再起動後 z4root を実行するとスーパーユーザ権限与えてねダイアログが出るので許可する(1度ここでもたもたしてたら Root 取れなかったみたいで再度 Root ボタンを押してやりなおした)。
root が取れると z4root の画面は Re-root と Un-root の2つのボタンが表示されるようになる。
Android 開発環境は以前インストールしてあったので、その中にある tools ディレクトリの下の adb コマンドを使う。
adb devices
すると
List of devices attached ???????????? no permissions
と表示される。udev の設定が必要らしい。
echo 'SUBSYSTEM=="usb",SYSFS{idVendor}=="0fce",Mode="0666"' > /etc/udev/rules.d/51-android.rules
して /etc/init.d/udev restart。adb 系のプロセスが動いていれば kill。
この状態で
adb shell
を実行して
$
というプロンプトが出たらリモート接続成功。
Xperia の /system/build.prop というテキストファイルを書き換えればいいらしい。
adb shell で入っている状態で su を実行。
$ su
初めての場合 z4root がインストールしてくれた Android アプリ 「Superuser」が Xperia 上で開いて /system/bin/sh にスーパーユーザ権限を与えて良いかときいてくるので許可する。 うまくいくと adb のプロンプトが # にかわる。
次に /system を書き込めるように remount する。
# mount ← どこにマウントされているか確認。 # mount -o remount,rw /dev/block/mtdblock2 /system ← rw で remount。
これまた z4root が インストールしてくれている、UNIX コマンドラインユーティリティをひとまとめにした BusyBox を使う。/system/bin/busybox としてコマンドが入っているのでこれを適宜呼び出す(busybox ファイルを ls やら grep やら vi やらといった名前でコピーするかシンボリックリンクを張るかすると、直接その機能が実行されるようになるのだが、ここではその設定は今はやらないでおいた)。
# busybox cp /system/build.prop /system/build.prop.original ← 編集前を残す。 # busybox vi /system/build.prop ← vi で開く。
で vi エディタが開くので /system/build.prop ファイルを編集。
ro.camera.sound.forced=1
を
ro.camera.sound.forced=0
これでカメラの設定画面中のシャッター音で OFF が選べるようになった。
マーケットから Drocap2 をインストール。 drocap2 を実行して、メニューボタンから[設定]を選び、[撮影モード]で[通知で撮る]を選択。 そうすると通知バーを引き出した中に[drocap2トリガー]というのがあらわれるようになるので、スクリーンショットをとりたいときにそれを実行する。
初回は Android アプリ 「Superuser」がスーパーユーザ権限を与えて良いかときいてくるので許可する。 これでスクリーンショットが端末単独でとれるようになった。
めでたしめでたし。
2011年1月19日のソフトウェア更新でマルチタッチ対応した Xperia SO-01B では z4root が使えなくなった。 かわりに Flashtool で root 化ができる。→ 設定方法
[ Android アプリレビュー ]
プライベートなリモート Git リポジトリを使えるように設定したんだけれど、実はローカル側で22番ポートで外に出れないというオチがついた。
ということで無料でプライベートリポジトリのもてる Buitbucket を使ってみることに。 username を最初 Naney にしたけど UNIX 系的にぽくないよねということでやっぱり naney に変えたという以外はあっさりと。
SSH でも HTTPS でもどちらでも接続できるので22番ポート問題も解決。ちょっと遅いかなと感じる以外はいい感じ。
あとついでに GitHub という SNS にも登録しておいた。
Twitter API v1.1 に対応していないスクリプトがあって、たしか OAuth 対応はしてあるけど RSS 形式を使っていたので JSON で取得して処理するようにしなければなーと思ってたんだけれど、そもそも OAuth 対応すらしてなかった。
なので Net::Twitter::Lite を使うように書き換え。
あと、いままで1つのスクリプトで「Twitter API を呼び出してタイムライン取得」「シリアライズしてファイルに保存」「Wiki 形式に整形して書き出し」をしていたんだけれど、UNIX 哲学に従って小スクリプトに分割してパイプで受け渡すように変更するなど。
スクリプト間のやりとりは構造化テキストデータなので JSON にしたんだけれど、若干これでいいのかなぁ感はある。テキスト形式だし最近の主流フォーマットではあるんだけれど、それでもシェルから見ると複雑な形式な気がするんだよね。でもあと軽量な構造化テキストフォーマットだと YAML ぐらいかなぁ。
ぼちぼち Haskell を実行してみたり。すごいH本だと ghci で対話モードでの例示が多いんだけれど、個人的にかったるい。
UNIX ならワンライナーでしょ shebang でしょ。で確認したら GHC の ghci の方じゃなくて ghc の方でワンライナーはできるのね。
ghc -e 'putStr "Hello, World!"'
それと shebang での実行は runghc を使えば OK だった。
#!/usr/bin/runghc main = putStr "Hello, World!"
みたいな感じ。
C MAGAZINE と言えば1989年から2006年まで出版されていたプログラミング雑誌。その C MAGAZINE が電子書籍で復刻というトピックがSBクリエイティブがで出ていた。
高校生の時に読み始めて、付録として収録されていた LSI C-86 試食版で C の世界に足を踏み入れた(それまでは BASIC 中心だった)。初めて Perl というものを知ったのも C MAGAZINE (記事)。
C MAGAZINE はオブジェクト指向などのパラダイムやいろいろなアルゴリズムなどのプログラミングについてのいろいろな事を知るきっかけとなっていた雑誌だった。当時はまだ World Wide Web にも触れておらず、プログラミングついての情報は雑誌・書籍が中心だった。
その後 UNIX Magazine や Software Design なんかで UNIX 系に触れていくことになったり。
コンピュータ雑誌を定期購読しなくなってから久しく、情報は Web から得られる時代にはなったけれど、やはり雑誌を通していろいろなきっかけを得るというのはまだまだ悪くないと思うんだよね。
ソフトウェアエンジニアビギナーのための推薦図書とかの話とか定期的にでるけれど、そういう層は特にコンピュータ雑誌を定期的に読むといいと思うんだよね。そこでいろいろなことに触れて面白そうなことを見つけて出発点とすれば良いと思う。
拡張子 md の Markdown ファイルを「バックアップと同期」アプリで新規に同期したり、 Web 版の Google ドライブでアップロードしたりすると MIME タイプが text/markdown となり全文検索対象にならない。不便。
StackEdit は Google ドライブに送る時の MIME タイプを設定で text/plain を選べるようにすることで問題を回避しているようだ。
クラウドストレージ上のファイルを管理するためのコマンドラインプログラム rclone でアップロードするとどうだろうと思ってやってみたところ、ちょっと設定をいじれば拡張子 md の Markdown ファイルを text/plain で Google ドライブにアップロードできることがわかった。
rclone では Google Drive API で新しいファイルを作成する際に、rclone 側で MIME タイプを判定している。内部的には Go の mime パッケージを使っている。
このパッケージは UNIX 系の環境では mime.type ファイルがあれば参照するようになっていたので macOS Catalina にあった /etc/apache2/mime.type ファイルの text/plain 行に md を追加して試したところ、めでたく text/plain として Google ドライブにアップロードできた。全文検索対象になることも確認。
ちなみに「バックアップと同期」アプリは /etc/apache2/mime.type 変更の影響を受けなかった。
rclone での方法が分かったわけだけれど、実際のところ Markdown ファイルの Google ドライブとの同期や読み書きを rclone だけに限定するわけにもいかないな。引き続き拡張子 txt で管理するのが現実的のようだ。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。