11月 27

iPod touchはアイコンで色々なアプリケーションを起動します。とりあえず、まず、アイコン。

ですので、そこで、アイコンが消えてしまうともう何もできないわけです。それなのに、私の環境ではあるときを境にアイコンが消えてしまうという現象が散発していました。ひどいときには「設定」のアイコンが消えてしまって何も設定変更できなくなるときも。

原因がまったくわからず、なんでだろうと思っていたのですが、先日原因がわかりました。BossPrefsにアイコンを消す機能があるのですが、単純にその機能で消されていただけでした・・・。BossPrefs自体の説明は以下のあたりをどうぞ。

「ちょっとまて、自分で消しておいて怪現象はないだろう」と思われただろうと思います。はい。そのとおりです。今回の場合は犯人はおそらく娘(2歳)だと思われます。iPod touchを勝手に好き勝手いじられるとこのようなことがあるということで・・・・。今回は検索エンジンで検索しても正解にたどり着けず、ファームウェアの復元まで行ってしまったので、同じような境遇の方はほぼいないだろうと思われますが、ブログに書いておくことにしました(笑)。

11月 12

前回まではこちら。(結果的にシリーズ化しております。)

色々と調べることが積み重なっていますが、とりあえず使用できるようになることをまず最優先に、巡回をもうちょっと楽に実行する方策を考えます。現状だと、TerminalかSSHでいちいちシェルスクリプトをたたかないといけないので。

Webで検索すると以下の情報が見つかりました。(というかmoyashiさんのマネばかりしているのが現状だが・・・)

この方法でシェルスクリプトをアプリケーションとして登録可能、ということだったので、早速やってみました。

大まかな流れとしてはいかになります。

  1. アプリケーションをhoge.appというフォルダにまとめる
  2. フォルダ内に各種ファイルを用意する(Default.png、Info.plist、PkgInfo、icon.pngの4ファイルがあればとりあえずよい模様です。(要確認))
  3. Info.plistをシェルスクリプト用に書き換える
  4. 出来上がったフォルダ(hoge.app)をSCP等で/Applicationsにコピーする
  5. SSHからフォルダおよびシェルスクリプトに対して実行権限を与える
  6. ipod touchを再起動する(ipod touch自体ではなくてもよい模様)

ひとりぶろぐさんのところでサンプルとして出されているInstBuddy.appはその存在自体がすでにサンプルです。さらにそのサンプルプログラムの動作が「/var/root/Media/Installに.appをコピーしてから実行すると一発でインストールが完了する」というもので、インストールの際に便利だよ、というものです。

はじめ、InstBuddy.appを使わないとシェルスクリプトをアプリケーションとするものが作れないのかと思って混乱してしまいました。(私の頭が悪いだけですが。)

というわけで、とりあえずipod touch上のアプリをつつくと、自動巡回~オフライン閲覧ができる。というところまではできました。今後積み残しの部分を消化しつつ、さらに改良していきたいと思います。

(追記)

と、思ったのですが、何度か実行してみると、全く何もデータが取得できないことや、1つ目のURLに関して処理を実行したら、そこでスクリプトが終わってしまうケースが頻発しています。wgetの処理が完了していないのに、先に進んで(終わって)しまっているのか?これも引き続き消化しなくてはいけない積み残しになってしまいました。できれば、wgetの動作状況をリアルタイムに表示したいんだけど・・・。

11月 11

なかなかうまくいかずすっかりシリーズものになってしまいました。その1その2はこちら。

さて、前回各種ツールをインストールしたくてもインストーラーに出てこないという話を書いておりましたが、DNSを変更し、きれいに再起動してから実行したところ正常にアクセス、インストールできました。

でも、せっかくなので、思いついたアイデアの方で進めて見ます。

RSSを取得して、URIの一覧を標準出力に出力するRubyスクリプト

まずはRSSを取得~URIの一覧出力部分です。Rubyが好きなのでどうせ素敵なライブラリがあるだろうと調べてみたらすぐに素敵なサンプルが見つかりました。

かなり簡単にRSSが扱えますね。素敵です。以下はとりあえずURIを抜き出して出力するようにだけしたものです。

require 'open-uri'
require 'rss/1.0'
 
filename = 'http://r.hatena.ne.jp/ebibibi/%E6%97%A5%E6%9C%AC%E8%AA%9E/rss'
 
rss = open(filename) {|file|
  RSS::Parser.parse(file)
}
 
rss.items.each{|item|
  puts item.link
}

この調子ならindexページを作成するのも簡単ですね。後日考えてみることにします。

RSSからURIを抜き出しwgetで取得するShellスクリプト

上記のRubyスクリプトの出力をwgetに渡して、WebページをローカルにダウンロードさせるShellスクリプトを、簡単に。私は文字だけ読めればいいので、オプションはシンプルにしました。好みによってはリンクをたどって再帰的に取得させるとよいと思います。

#!/bin/sh
cd /var/mobile/Media/Downloads
ruby geturi.rb | wget -i - -N -np
exit

これを実行することで、きちんと目的のHTMLファイルをローカルに作成してくれるようになりました。

lighttpd用の設定ファイル

あとは、ビューワとしてローカル上でWebサーバーを動かします。lighttpdを選びました。

/etc/lighttpd.conf

server.modules = ( 
        "mod_access",
        "mod_alias",
 )
server.document-root = "/var/mobile/Sites/"
index-file.names = (
    "index.html", "index.htm",
)
mimetype.assign = (
    ".pdf" => "application/pdf",
    ".sig" => "application/pgp-signature",
    ".spl" => "application/futuresplash",
    ".class" => "application/octet-stream",
    ".ps" => "application/postscript",
    ".torrent" => "application/x-bittorrent",
    ".dvi" => "application/x-dvi",
    ".gz" => "application/x-gzip",
    ".pac" => "application/x-ns-proxy-autoconfig",
    ".swf" => "application/x-shockwave-flash",
    ".tar.gz" => "application/x-tgz",
    ".tgz" => "application/x-tgz",
    ".tar" => "application/x-tar",
    ".zip" => "application/zip",
    ".mp3" => "audio/mpeg",
    ".m3u" => "audio/x-mpegurl",
    ".wma" => "audio/x-ms-wma",
    ".wax" => "audio/x-ms-wax",
    ".ogg" => "application/ogg",
    ".wav" => "audio/x-wav",
    ".gif" => "image/gif",
    ".jpg" => "image/jpeg",
    ".jpeg" => "image/jpeg",
    ".png" => "image/png",
    ".xbm" => "image/x-xbitmap",
    ".xpm" => "image/x-xpixmap",
    ".xwd" => "image/x-xwindowdump",
    ".css" => "text/css",
    ".html" => "text/html",
    ".htm" => "text/html",
    ".js" => "text/javascript",
    ".asc" => "text/plain",
    ".c" => "text/plain",
    ".cpp" => "text/plain",
    ".log" => "text/plain",
    ".conf" => "text/plain",
    ".text" => "text/plain",
    ".txt" => "text/plain",
    ".dtd" => "text/xml",
    ".xml" => "text/xml",
    ".mpeg" => "video/mpeg",
    ".mpg" => "video/mpeg",
    ".mov" => "video/quicktime",
    ".qt" => "video/quicktime",
    ".avi" => "video/x-msvideo",
    ".asf" => "video/x-ms-asf",
    ".asx" => "video/x-ms-asf",
    ".wmv" => "video/x-ms-wmv",
    ".bz2" => "application/x-bzip",
    ".tbz" => "application/x-bzip-compressed-tar",
    ".tar.bz2" => "application/x-bzip-compressed-tar"
)
server.port = 80
server.username = "nobody"
server.groupname = "nobody"
server.dir-listing = "enable"

lighthttpd自動起動用の設定ファイル

/Library/LaunchDaemons/net.lighttpd.lightppd.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 
<dict>
    <key>Label</key>
    <string>net.lighttpd.lightppd</string>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/lighttpd</string>
        <string>-f</string>
        <string>/etc/lighttpd.conf</string>
    </array>
</dict>
</plist>

と、こんな感じにしたのですが、自動起動してくれないし、ページにアクセスしようとすると、403 – Forbiddenで怒られてしまうという現象がでてかなり悩みました。

自動実行に関してはとりあえずあとで調べることにして以下のコマンドで実行してその場をしのぎました(要調査)。(※ipod touchの設定ファイルの正しい置き場所がわからないのが現状です。とりあえず/etc以下に置いてます。(要調査))

/usr/sbin/lighttpd -f /etc/lighttpd.conf

403に関しては結局lighttpdの実行権限に問題があったようです。動作させるユーザー、グループの指定の部分をコメントアウトするとうまく動くようになりました。ここは何か明示的にユーザー、グループを作成して、それを指定するのかいいのかもしれません。www-dataなんて感じに作ろうか・・・。(要調査)

こんな感じで何とかWebの巡回とオフライン閲覧は実現できました。が、自動巡回にさせたいし、オフラインにダウンロードしたファイルの世代交代もしたいです。日時、あるいは数あたりで制限を設けたいし・・・・。まだまだやりたいことがあるので、引き続き試していこうと思います。