投稿者「mod_poppo」のアーカイブ

MyOPACの使い勝手を上げるGreasemonkeyスクリプト

東大図書館のMyOPACというサービスがあるが、このログインページも良くない作りをしていて、良くない。

IDとパスワードの入力欄でリターンキーでログインできるのはUT-mateよりも優秀と言えるのだが、この挙動をサブミットボタンではなくてJavaScriptでイベントを捕捉することにより実装しているため、

  1. ブラウザが補完候補を表示
  2. 表示された候補をリターンキーで確定しようとする
  3. フォームのサブミットが行われる(正確には、サブミット前に行われるチェックで、パスワード欄が空白だというエラーが出る)

という、ブラウザの補完機能に頼っている人にとっては微妙に使い勝手が悪いことになる。UT-mateの時も思ったが、こういうフロントエンドを作ってる人は頭が悪いのか。ログインボタンは普通にHTMLのサブミットボタンで書いて、JavaScriptを使うのはフォームの検証にとどめておけばいいものを…。

というわけで、この挙動を修正するGreasemonkeyスクリプトを書いた→Better_MyOPAC.user.js

GreasemonkeyをインストールしたFirefoxを使っている人ならば、上のリンクをクリックすることでインストールできる。

今はログインページの修正だけだが、今後他のページもいじりたくなったら機能を追加するかもしれない。

関連:UT-mateの使い勝手を上げるGreasemonkeyスクリプト

さくらのレンタルサーバーにGHC+Cabalを導入した

環境

  • さくらのレンタルサーバー スタンダード
  • FreeBSD 9.1-RELEASE-p15 (x86_64)
  • もちろんroot権限なし
  • ここでは、シェルはbashを使う(デフォルトはcshだった気がする)
  • ここでは、プレフィックスは $HOME/usr にする($HOME/usr/bin とか $HOME/usr/lib にファイルが入るということ)

1. GHCをインストールする

FreeBSD向けにはHaskell Platformは出ていない。しかしGHCのバイナリは配布されているので、ここからとってくる。この記事を書いている2014年7月6日の時点では、最新バージョンは7.8.2である。

$ curl -O http://www.haskell.org/ghc/dist/7.8.2/ghc-7.8.2-x86_64-portbld-freebsd.tar.xz
$ tar xf ghc-7.8.2-x86_64-portbld-freebsd.tar.xz
$ cd ghc-7.8.2
$ ./configure --prefix=$HOME/usr

この後に gmake install をするのだが、ghc-pkgやghcが使っている共有ライブラリにパスが通っていないので、 LD_LIBRARY_PATH を設定してやる。…なんかもっといい方法があると思う。

$ echo "export LD_LIBRARY_PATH=$HOME/usr/lib/ghc-7.8.2/terminfo-0.4.0.0:$HOME/usr/lib/ghc-7.8.2/bin-package-db-0.0.0.0:$HOME/usr/lib/ghc-7.8.2/binary-0.7.1.0:$HOME/usr/lib/ghc-7.8.2/Cabal-1.18.1.3:$HOME/usr/lib/ghc-7.8.2/process-1.2.0.0:$HOME/usr/lib/ghc-7.8.2/pretty-1.1.1.1:$HOME/usr/lib/ghc-7.8.2/directory-1.2.1.0:$HOME/usr/lib/ghc-7.8.2/unix-2.7.0.1:$HOME/usr/lib/ghc-7.8.2/time-1.4.2:$HOME/usr/lib/ghc-7.8.2/old-locale-1.0.0.6:$HOME/usr/lib/ghc-7.8.2/filepath-1.3.0.2:$HOME/usr/lib/ghc-7.8.2/containers-0.5.5.1:$HOME/usr/lib/ghc-7.8.2/bytestring-0.10.4.0:$HOME/usr/lib/ghc-7.8.2/deepseq-1.3.0.2:$HOME/usr/lib/ghc-7.8.2/deepseq-1.3.0.2:$HOME/usr/lib/ghc-7.8.2/array-0.5.0.0:$HOME/usr/lib/ghc-7.8.2/base-4.7.0.0:$HOME/usr/lib/ghc-7.8.2/integer-gmp-0.5.1.0:$HOME/usr/lib/ghc-7.8.2/ghc-prim-0.3.1.0:$HOME/usr/lib/ghc-7.8.2/rts-1.0:$HOME/usr/lib/ghc-7.8.2/haskeline-0.7.1.2:$HOME/usr/lib/ghc-7.8.2/ghc-7.8.2:$HOME/usr/lib/ghc-7.8.2/transformers-0.3.0.0:$HOME/usr/lib/ghc-7.8.2/template-haskell-2.9.0.0:$HOME/usr/lib/ghc-7.8.2/hpc-0.6.0.1:$HOME/usr/lib/ghc-7.8.2/hoopl-3.10.0.1" > ~/ghc-ld-path.sh
$ source ~/ghc-ld-path.sh
$ gmake install

2. Cabalをインストールする

このへんからCabalのソースコードを落としてくる。

$ curl -O http://www.haskell.org/cabal/release/cabal-install-1.20.0.2/cabal-install-1.20.0.2.tar.gz
$ tar xf cabal-install-1.20.0.2.tar.gz
$ cd cabal-install-1.20.0.2
$ emacs bootstrap.sh

本来なら cabal-install-* の中にある bootstrap.sh を実行すればいいのだが、sedの仕様の違いかなんだか知らないがリンカのコマンドがおかしなことになるので、テキストエディタで bootstrap.sh を編集してリンカを ld に決め打ちしてやる。

LINK=/usr/bin/ld

また、そのままだと tar が /dev/sr0 だかなんだかにアクセスして死ぬので、ググって出てきた情報を元に tar の代わりに tar -f - を使うようにする。これは bootstrap.sh を書き換えなくても環境変数で上書きできる。

あと、Haddockでドキュメントを生成するのがうまくいかなさそうな気配を感じたので、 --no-docをつけてドキュメントを生成しないようにする。

$ TAR="tar -f -" ./bootstrap.sh --no-doc

これでインストールされるはず。

環境変数 PATH がcabalとかを見に行くように、.bash_profile をいじってやる。

$ emacs ~/.bash_profile
export PATH=$HOME/.cabal/bin:$HOME/usr/bin:$PATH

あとは普通にcabalが使える。

$ cabal update
$ cabal install cabal-install

3. せっかくなのでCabalでいろいろインストールしてみる

なんとなくIdrisを入れてみよう!と思った。依存関係がよくわからないが、コマンドとしては

$ cabal install --upgrade-dependencies --force-reinstalls idris

ぐらいでいけるはず。…だが現実はそううまくはいかない。

遭遇した問題としては大きく分けて二つあって、テンポラリディレクトリ /var/tmp 以下で作業してるのがなぜか実行権限が与えられなくてconfigureとかでこけるのと、ソースコード中に非US-ASCII文字が入っていてこけるの。

前者は、テンポラリディレクトリを自前で用意したディレクトリに変えれば良い。つまり ~/tmp 的なディレクトリを作ってやって、環境変数 TMPDIR=~/tmp とすればよい。

後者は、 hGetContents が失敗する的なエラーが出る。

hGetContents: invalid argument (invalid byte sequence)

file コマンドで問題のファイルを見るとUS-ASCIIではなくUTF-8になっているのが分かる。そこで、問題のファイルから非US-ASCII文字を探し出してやって、それをUS-ASCII文字で置き換えてやればファイルがUS-ASCIIになって hGetContents で問題なく読み込める…という方法でビルドしたが、冷静に考えてHaskellはUnicode対応してるはずだし hGetContents でUTF-8を読み込めないのがおかしい。終わった後に気づいたが、おそらく文字エンコーディングが設定されていない的な問題な気がするので、 LANG=en_US.UTF-8 あたりを指定すれば良かった。

結局、

$ mkdir ~/tmp
$ TMPDIR=~/tmp LANG=en_US.UTF-8 cabal install --upgrade-dependencies --force-reinstalls idris

とすれば深いこと考えずにビルドできるはず。

以前やった時はどこかで挫折してしまっていたが、今回は気合いでなんとか頑張った。普段OS X と (Arch) Linux ばかり触っていて、 FreeBSD はよくわからないのだが、まあなんとかなった。

あとはレンタルサーバーの環境にnode.jsが入れば楽しそうなのだが…。

共用サーバーに処理系をいろいろ入れていろいろやりたいというのが間違いで、そういうのがしたいならVPSでも契約しろというのは正論だろう。

Five LemmaのダイアグラムチェースをするWebページを作った

最近、Webの標準技術であるSVGとMathMLを組み合わせて、Webページ上で数学の図式などを表現できないかと考えている。

このブログでもたまに図式や証明図を載せているが、今までのは画像として貼り付ける形だった。静的なコンテンツならこれでもいいのだが、JavaScriptを使ってインタラクティブなコンテンツを作ろうとした時に、画像では動的に内容を変えるというようなことがやりにくい。そこで考えられるのが、Web標準技術のSVGやMathMLといった、HTMLやJavaScriptと相性のいい技術を使って数学の図式を記述するということである。

SVGは基本的に図を記述する言語で、MathMLは数式を記述する言語だが、ブラウザが対応していれば、SVGの図の中にMathMLを埋め込むことは難しくない。だが、数式の幅、高さを見ながら図のレイアウトを決めてやるのは正直楽しい作業ではない。JavaScriptを使えば、ブラウザがレンダリングした数式の大きさを見て適切に位置を合わせるということができるだろう。また、JavaScriptを使えば、ユーザーのクリックに反応して数式を変えたり、色を変えたりできるだろう。

SVGは最近のブラウザならだいたい対応しているが、MathMLのブラウザ側の対応はまちまちである。Firefoxはかなり昔からMathMLに対応していた。Safariは最近対応したようだが、筆者はあまり触っていない。Chromeは、数年前に見聞きした話では対応する意思がないらしい。

という感じで、とりあえず作る時はFirefoxで表示させることを優先させる。Safariは余力があれば対応させたい。Chromeは知らん。

というわけで、そういうのを実験的に実装してみた。このページは、みなさんお世話になっているであろう圏論的な直積の図式を表現している。

直積の図式を表示てきたはいいものの、これは動きがない。ユーザーの操作によって表示が変わるようなものを作ろう。というわけで、Five Lemmaのダイアグラムチェースによる証明(真ん中の射がmonicであることを示す)をするページを作った。クリックするとダイアグラムチェースが進む。かなりやっつけな書き方をしているので、例えばAndroid上のFirefoxでは表示が崩れた。Safariでは文字が途切れる。JavaScriptのソースコードもかなり汚い。改善の余地は大きいだろう。

演算子オーバーロードのないJavaScriptであまり複雑なことをしても記述性が悪い。例えばHaskellのような言語で記述してJavaScriptにコンパイルするという手順を取ると良いのかもしれない。

The middle 3×3 lemma

先週に続いて、Categories for the Working MathematicianのAbelian Categoriesの章で勉強している。

ExercisesのThe middle 3×3 lemmaを証明しようとしたのだが、どうにも証明できそうにない。Nine lemma 1問題文曰く、上の図式の全ての列、それに第一行と第三行が短完全列ならば第二行も短完全列であることを証明せよ、だそうだ。与えられた短完全列の両端に0を付加すると次の図式になる。
Nine lemma 2

手始めに、真ん中の行の2つの射を合成すると0となることを証明しようとしたが、どうにも方法が浮かばない。先週は勘違いでさんざん悩んだので、これはもしや成り立たないのではないか、と思って、調べてみることにした。(反例を考えるのは面倒くさかった)

手持ちの別の本を参照したところ、真ん中の行の2つの射を合成すると0となることは仮定しなければならないそうである。反例もあった。ググって出てきたnLabの項にも書かれていた。

アーベル圏を勉強している

せっかく作ったブログをいつまでも放置するのもアレなので、最近勉強していることを書くことにする。

先学期の授業で登場したけど全然理解しないまま終わったホモロジーとかを理解したくて、どうせやるならと思ってアーベル圏の勉強をしている。本はCWMの、アーベル圏の章を進めている。

アーベル圏というのはどういう圏のことを言うのかというと、単純なものから順に定義を書いておくと

Preadditive category (前加法圏)

各 hom-set にアーベル群の構造が入っていて、射の合成が bilinear になっている圏を preadditive category という。CWMでは Ab-category と呼んでいる。

Kernel, cokernel や biproduct などの概念を定義することができる(kernel, cokernel は preadditive category でなくても、ゼロ射さえあれば定義できる)。

Additive category (加法圏)

Preadditive category であって、ゼロ対象と biproduct (直和) をもっている圏を additive category という。

Abelian category (アーベル圏)

Additive category であって、全ての射が kernel と cokernel を持っていて、全ての monic 射が kernel であり、全ての epi 射が cokernel である圏を abelian category という。

Abelian category では、射の image や coimage の概念を定義することができる。また、完全列の概念も定義できる。

…という風になる。

アーベル圏で完全列を定義できるということは、five lemma とか snake lemma を定式化できるということである。この辺のレンマの証明は、CWMではアーベル圏の章のセクション4に書かれている。

このセクションの最初の方にアーベル圏 A の短完全列の圏 Ses A が加法圏であるとさらっと書かれているが、最初に読んだときに Ses A もアーベル圏なんだと勘違いして証明を考えるのに数週間費やしてしまった。おかげで図式の扱いには慣れた気がするし、短完全列の射のカーネル、コカーネルがどうなるのかという話はスネークレンマに繋がってくるとはいえ、とんだ時間の浪費だった。

アーベル圏を勉強する前は、授業などでこれらの補題の証明にいわゆる “diagram chase” を使っているのを見て(加群の圏上ではあったが)、
「元を取ってdiagram chaseなんてしたら圏論的な証明にならないのでは!?」
と思っていたが、蓋を開けてみたら、一般のアーベル圏上で「元」に相当する概念を定義して、その「元」に対して monic や epi がそれぞれ普通の単射、全射と同じような振る舞いをすることを証明し、five lemma や snake lemma などの補題の証明では元を取って証明していたのだった。もちろん、圏論的な証明であるから、「dual を取って証明の半分を省略する」というようなことはできる。

ffmpegを使って微速度動画を作るメモ

この記事では、連続撮影した静止画を動画に変換する方法について書く。状況としては、微速度撮影・タイムラプス撮影のように、カメラで写真を一定時間ごとに撮影したものを動画にしたい、というものを想定している。

ここで使うのはffmpegという、動画や音楽ファイルのフォーマットを変換するのに使われる無料のプログラムである。マウスで操作するようなGUIはついておらず、コマンドラインからコマンドを叩いて使う。ffmpegのインストール方法は割愛する。

この記事を書いている時点でのffmpegの最新版は2.2.1なので、ffmpeg 2.2.1の使い方について書く。おそらく、多少バージョンが違っても同じように使えるのではないかと思う。

まず、動画の各コマとなる静止画を用意する。適当にフォルダを作って、その中に使いたい画像をコピーする。静止画の形式はJPEGにしておく。ファイル名は連番になるようにする。

ターミナルを開き、先に画像ファイルを準備したフォルダに移動する。ffmpegコマンドの使い方はおおざっぱに言うと

ffmpeg [入力に関するオプション] -i (入力ファイル名) [出力に関するオプション] (出力ファイル名)

となる。以下、オプションの詳細について。

入力に関するオプション・入力ファイルの指定

  • -framerate (rate)
    • 入力ファイルを動画とみなす場合の、フレームレートを指定する。
    • 画像の場合25がデフォルト。つまり、1秒あたり25フレームということである。
    • (rate) は、整数、小数、分数、または名前で指定できる。詳しくは公式のドキュメント(英語)を参照。
  • -s:v (size) または -video_size (size)
    • 各コマのサイズ。
    • (size)(幅)x(高さ) の形で指定する。あるいは、 vgahd720 のような名前も使える。詳しくは公式のドキュメント(英語)を参照。
    • 指定しなかった場合は最初の画像から適当に判断される。
  • -start_number (n)
    • 入力ファイル名の連番を何番から始めるかを指定する。
  • -i (ファイル名)
    • 入力ファイル名、もしくはファイル名のパターン。
    • 入力ファイル名が IMG_nnnn.JPG という形をしていれば、パターンとしては IMG_%04d.JPG を指定する。
    • 詳しいパターンの指定方法は公式のドキュメント(英語)を参照。

出力に関するオプション・出力ファイル名

  • -r:v (fps)
    • 出力する動画のフレームレート(1秒あたりのフレーム数)を指定する。
    • (rate) は、整数、小数、分数、または名前で指定できる。詳しくは公式のドキュメント(英語)を参照。
  • -s:v (size)
    • 各コマのサイズ。
  • -b:v (bitrate)
    • ビットレート。大きな数値を指定する方が高画質になる。bpsで指定する。
    • k (103)や M (106)などの接尾辞も使えるようだ。
  • -vcodec (codec) または -codec:v (codec)
    • 動画のコーデックを指定する。mpeg4h264 など。利用できるコーデックはffmpeg -codecs で確認できる。
  • (ファイル名)
    • 出力ファイル名。ファイル形式は拡張子から適当に判断される。

オプションの一部は入力にも出力にも指定できる。入力と出力に異なるフレームレートを指定した場合、一部のコマが複製されたり取り除かれたりする。各コマのサイズは入力と出力どちらにも指定できるが、どちらに指定するとどう変わるのか筆者はよく分かっていない。

コマンドの実行例は、例えば

ffmpeg -framerate 24 -start_number 7836 -i 'IMG_%04d.JPG' -r:v 24 -b:v 10M -s:v 1080x720 -vcodec mpeg4 output.mov

となる。この場合、IMG_7836.JPG から始まる連番のファイルが処理対象となり、出力ファイルは output.mov となる。

distccとclangを使って異なる環境のマシンで分散コンパイルする

distccという、ネットワーク越しに複数のマシンを使って分散コンパイルを行うツールがある。これを使うと、最低限の設定で、同じアーキテクチャ・OSのマシン複数台での分散コンパイルができる。だが、アーキテクチャ・OSの異なるマシンを使いたい場合はどうか。その場合はクロスコンパイラを使う必要がある。

しかし、全てのマシンにクロスコンパイラを導入するのは面倒である。特に、ビルドしたいターゲットの環境のGCCがパッケージ管理システムに登録されていない場合は、わざわざ自前でGCCをビルドしなければならない。これはできればやりたくない。

そういう時は、コンパイラとしてclangを使おう。最近のclangは、-targetオプションを指定することでクロスコンパイラとして使うことができる(昔は-ccc-host-tripleだった)。clangは大抵の環境でパッケージとして用意されていると思うので、容易に導入できるだろう。-targetオプションに指定する文字列は、$ clang --versionで出てくる文字列を使えば良いだろう。

例えば、必ずしもMacばかりではないマシンを使って、Mac向けのプログラムをビルドしたい場合、configureには次のようなオプションを与えれば良い:

$ ./configure CC="distcc clang -target x86_64-apple-darwin13.1.0" CXX="distcc clang++ -target x86_64-apple-darwin13.1.0"

ただし、DISTCC_HOSTSなどの環境変数は適切に設定されており、ビルドに使うマシンではdistccdが動いているものとする。あとは$ make -j10のように適当に並列ビルドのオプションを指定すれば、適当に分散コンパイルしてくれる。

distccにはプリプロセッサの処理も分散させるpump modeという動作モードがあるが、どうも-targetオプションには対応していないようで、うまく動いてくれなかった。

ImageMagickの使い方に関する自分用メモ

自分で使ったときのメモ。備忘録。

加算合成・比較明合成

入力を1.jpg, 2.jpg, ..., n.jpg、出力をoutput.jpgとする。

加算合成:

$ convert 1.jpg 2.jpg ... n.jpg -background none -compose plus -flatten output.jpg

比較明合成:

$ convert 1.jpg 2.jpg ... n.jpg -background none -compose lighten -flatten output.jpg

 アニメーションGIFを作る

2つの画像が切り替わる(2コマ)アニメGIFを作りたい。

1コマ目をa.png, 2コマ目をb.pngとし、0.01*t 秒で1コマ目から2コマ目に切り替わるとする。繰り返しはしない。

$ convert -delay t -loop 1 a.png b.png output.gif

-loop 1-loop 0に変えると無限ループになる。詳細はこの辺とかを参照。

UT-mateの使い勝手を上げるGreasemonkeyスクリプト

東大の後期課程や大学院に在籍する人は必ずお世話になるであろうUT-mateだが、その使い勝手はお世辞にも良いとは言えない。まず、ログイン画面でEnterキーを押してもログインできない。他にもいろいろある。

さて、世の中のWebブラウザには、ユーザー側でWebページの見た目とか使い勝手をいじくれるものがある。Firefoxの場合はGreasemonkeyという拡張機能をインストールすれば、そういう”user script”を導入できるようになる。つまり、Greasemonkeyを導入したFirefoxであれば、user scriptによってUT-mateのページを構成するHTMLとかをいじることができ、使い勝手を向上させられる可能性があるということだ。(他のブラウザは筆者はあまり使っていないのでこの記事では扱わない)

というわけで私が書いたuser scriptがこれ→Better UT-mate.user.jsになる。Greasemonkeyを導入済みであれば、このリンクをクリックすることでこのuser scriptをインストールできるはずだ。ソースを見れば分かる通り、至極簡単なスクリプトであって、怪しい動作はしない。

現在のところ、実装している機能は

  • Enterキーでログインできるようにする
  • 「シラバス参照」で、Enterキーで「授業科目決定」ボタンや「検索開始」ボタンを押せるようにする
  • 【2014年9月30日更新】タイムアウトを阻止

である。気が向いたらさらに機能を追加するかもしれない。

【2015年9月3日】GitHubに公開。user scriptへのリンクをGitHubのものへと変更。

デジタル一眼レフカメラとスマートフォン、タブレットの連携

デジカメで撮った写真の転送については先の記事に書いた。この記事では、撮影時の連携について書く。デジカメと書いているが、ここに書くような連携に対応しているのはほとんどがデジタル一眼レフカメラだと思う。

携帯端末で詳細な設定をしながら撮影する(携帯端末にUSBホスト機能がある場合)

デジタル一眼レフとパソコンをUSBで繋いで連携させる話は知っているだろうか。デジタル一眼レフに繋いだパソコンでライブビューができたり、パソコンで設定をいじって撮影できたりするアレだ。もしも携帯端末がUSBホストに対応していれば、携帯端末で同じことができる。

USBホスト付きAndroid端末でデジタル一眼レフを制御する例はググるといくつか見つかったが、iPadでそれをしたという情報は見当たらなかった。iPadでは技術的に不可能なのか、それともAppleの制限が厳しくて許可されていないのか、あるいは単に誰もアプリを作っていないのかは知らない。ここでは、USBホストを搭載したAndroid端末での話をする。

Android端末に搭載されているのはmicroUSBポートなので、適切な変換ケーブルを介してデジタル一眼レフに繋ぐことになる。この用途に使えるAndroid側のアプリとしては、Canon製一眼レフ向けではDSLR Controller (BETA)(有償)というのが定番のようだ。他社製一眼レフカメラについては、少なくともNikon向けのものはアプリがあるようだ(Helicon RemoteはCanon製カメラと一部のNikon製カメラに対応。アプリは無料だが全ての機能を使うには有償のライセンスが必要)。

携帯端末を赤外線リモコンとして使う(携帯端末が赤外線通信に対応している場合)

多くのデジタル一眼レフカメラはワイヤレスリモコンに対応している。別途発売されている専用ワイヤレスリモコンを使えば、ワイヤレスでシャッターを押せるというわけだ。このワイヤレスリモコンは赤外線を使っているので、もしお手持ちの携帯電話が赤外線通信に対応していれば、わざわざ専用のワイヤレスリモコンを買わなくても携帯電話をワイヤレスリモコンとして使える可能性がある。

iPhoneが赤外線通信に対応していないのは周知の通りである。ではAndroid端末はどうかというと、赤外線通信に関するAPIはAndroid標準ではなくメーカーの独自機能になっている。シャープは赤外線通信・リモコンに関するAPIを公開(ここから参照)しているので、赤外線機能のついたシャープ製端末についてはアプリを作ることで端末を赤外線リモコンとして使えるようになる。

そのようなアプリはもうすでにあって、IRリモコン for DSLRNexRemoteがある。どちらも、カメラの方は複数のメーカーに対応しているが、端末の方はシャープのみである。

シャープ以外の携帯電話メーカーが赤外線に関するAPIを公開しているという話は聞かないので、シャープ以外の端末向けにこのようなアプリを作ることはできなさそうだ。古き良きフィーチャーフォン(ガラケー)はキャリアごとにその辺の仕様が決まっていたので、フィーチャーフォン向けのアプリでカメラ用のリモコンアプリを作ることは一応可能だろうが、実際にそういうアプリが存在するのかは筆者は知らない。

携帯端末本体に赤外線通信機能がなくても、イヤホンジャックなどを使って赤外線LEDを外付けすることはできる。イヤホンジャックに付けた赤外線LED向けのリモコンアプリを作ることは一応可能だろうが、あるのかどうかは筆者は知らない。

有線リモコンとして使う(…?)

デジタル一眼レフのリモコンとしては、赤外線リモコン以外に有線リモコンもある。しかし、有線リモコン用の端子は大抵メーカー独自なので、出来合いのケーブルを使って携帯端末と繋ぐことはできない。

ただ、もちろん電気的にはとても単純だと考えられるので、頑張ればスマートフォンなどのイヤホンジャックなどにつなげるケーブルを作ることはできるだろう。健闘を祈る。

その他

SmartTriggerという製品があって、iPhoneからデジタル一眼レフカメラのシャッターを押せるらしい。iPhoneとSmartTriggerの間はBluetooth LEで繋ぎ、SmartTriggerとデジタル一眼レフカメラは有線リモコンの端子、または赤外線で繋ぐようだ。

理想を言えば、カメラ自身がWi-FiまたはBluetoothに対応して、余分な機器なしに携帯端末と連携できるようになると良い。実際、最近の一部のカメラはWi-Fiに対応しており、スマートフォンと連携できるようである(参考)。