2013年7月29日月曜日

iPhone4のホームボタンの調整

家族にあげたiPhone4のホームボタンの反応が悪くなってきたので、調整することにしました。
いくつかウェブを検索すると、指ではじくといったものや無水アルコールで洗浄する方法などがありましたが、効果はいまいちのようでした。また、アップルに修理に出す方法や、自力で部品交換する方法もありますが、ちょっと気軽にできません。その中で割りと簡単にできて、効果があると書いてあるページも多い、スリープボタンを併用してソフトウェア的に調整する方法を試しました。
結果は、調整後は反応はややよくなったように感じます。劇的によくなったと書いてあるページもありますが、ちょっと微妙です。それと、1回しかボタンを押していないのに、2回押したようになる(チャタリング)はたまに起きるままです。

私は以下の方法を試しました。iOSのバージョンは6.0.2です。


  1. iPhoneを起動します。
  2. ストックアプリケーション(iPhoneを購入時に付属しているアプリケーション)を立ちあげます。私はカレンダーにしました。ウェブサイトによっては、ストックアプリケーションと書かず、なんでもいいとしているところもあるようです。
  3. スリープボタン(電源ボタン)を長押しすると、電源オフの表示が出ます。
  4. 最後に、その表示の状態でホームボタンを長押しし、ホーム画面が出るまで待ちます。サイトによっては、やや軽めに押すとよいと書いてあります。


以上ですが、2.のアプリケーションの選択と4.の押す強さは注意してみてください。何回かやってみるといいかもしれません。
今回は、多少はボタンの反応はよくなったと思いますが、これにAssistiveTouchも使って、ホームボタンの劣化を押さえてもらおうと思います。
ホームボタンの反応が悪い人は試してみてはどうでしょうか。よくなるかもしれません。

2013年7月21日日曜日

fileコマンドがテキストファイルでエラーになる問題の回避

昨日、WindowsやLinuxで作成したテキストファイルの文字コーディングを調べようとしたら、fileコマンド( /usr/bin/file )でエラーがでました。
fileコマンドは、ファイルの音声や画像などの種類や、テキストファイルの場合文字エンコーディングなどを表示してくれるコマンドです。
やりたかったのは、UTF-8以外のファイルを探して、必要ならばUTF-8に変換しようと思ったのですが。

例えば以下の内容のファイル(UTF-8)をfileコマンドで調べると、ERRORとなります。(OS X 10.8.4)


$ cat test.txt
- 外部キー
  他のテーブルの主キーとなるキー
  外部キーは表の結合に用いる
od -c -t x1 test.txt
0000000    -      外  **  **  部  **  **  キ  **  **  ー  **  **  \n    
           2d  20  e5  a4  96  e9  83  a8  e3  82  ad  e3  83  bc  0a  20
0000020       他  **  **  の  **  **  テ  **  **  ー  **  **  ブ  **  **
           20  e4  bb  96  e3  81  ae  e3  83  86  e3  83  bc  e3  83  96
0000040   ル  **  **  の  **  **  主  **  **  キ  **  **  ー  **  **  と
           e3  83  ab  e3  81  ae  e4  b8  bb  e3  82  ad  e3  83  bc  e3
0000060   **  **  な  **  **  る  **  **  キ  **  **  ー  **  **  \n    
           81  a8  e3  81  aa  e3  82  8b  e3  82  ad  e3  83  bc  0a  20
0000100       外  **  **  部  **  **  キ  **  **  ー  **  **  は  **  **
           20  e5  a4  96  e9  83  a8  e3  82  ad  e3  83  bc  e3  81  af
0000120   表  **  **  の  **  **  結  **  **  合  **  **  に  **  **  用
           e8  a1  a8  e3  81  ae  e7  b5  90  e5  90  88  e3  81  ab  e7
0000140   **  **  い  **  **  る  **  **  \n                            
           94  a8  e3  81  84  e3  82  8b  0a                            
0000151
$ file test.txt
test.txt: ERROR: line 22: regexec error 17, (illegal byte sequence)

fileコマンドで、regexec関数を呼び出していて、その関数が不正なバイトの並びを見つけたというエラーのようです。test.txtは3行しかありませんので、行番号の22は、コマンドかライブラリのソースコードの行番号でしょう。
以前は、このようなエラーを見たことがなかったのですが、いつから出るようになったのでしょうか。

いろいろ試行錯誤したところ、localeの環境変数(LANGなど)を消すかCにすると正常に表示されるようになりました。

echo $LANG
ja_JP.UTF-8
$ LANG=C file test.txt
test.txt: UTF-8 Unicode text
$ unset LANG
$ file test.txt
test.txt: UTF-8 Unicode text

あまり、めでたしめでたしではないですが、暫定的には解決できました。

2013年7月17日水曜日

DuckDuckGoという検索エンジン


最近、米国中央情報局(CIA)元職員の情報漏洩事件で、米国国家安全保障局(NSA)が米国市民や国外との通信情報を収集していることを告発し、問題になっていますね。
NSAがさまざまな情報を収集しているということは、過去にもいわれていましたが、今回はより具体的な話が出てきたということになります。
例えば、NSAからGoogleやApple, Facebook, VerisonといったIT企業や通信会社に対して、利用者の情報を提供をするよう要請が出されている等、元職員は話しているようですね。たとえ国といえども、プライバシーに関する情報を勝手に集めるのは許されないと問題にしている人も多いようです。

そんな中で、最近DuckDuckGoという検索エンジンが注目を集めているようです。
DuckDuckGoは、ユーザの情報を収集・保存しないということをポリシーとしている検索エンジンです。収入源は、DuckDuckGo経由でAmazon等のショッピングサイトでユーザが買い物をした場合に入る報酬だそうです。
DuckDuckGoは、アクセス情報、検索履歴等を保存していないため、政府機関から情報提供の要請があっても出す情報自体がないという訳です。(日本では、アクセスログなどを保存しないといけない法律が検討されているようですが)

個人的にも興味があり、どんなものか使ってみました。
検索エンジンなので、その性能自体が悪いと仕方ないので検索の使い心地を調べてみました。全部、体感レベルの話でちゃんとした計測はしていません。
実行速度については、他の検索エンジンと変わらないようです。
また、検索機能についてですが、まずデフォルトの設定で使用すると検索ワードが英語の場合、英語のサイトが多く出てきて、日本語の情報はあまり出てきません。設定で地域(region)をJapanにすると日本語ページも上位に出てきて使いやすくなります。
検索精度の印象ですが、時事的な内容(例えばアシアナ航空の事故など)でも、ちゃんと引っかかるようで特に問題は感じませんでした。専門的な内容だとちょっと物足りない場合もあり、Googleの方がより適切な情報を示してくれることもありました。
DuckDuckGoの精度が悪いというよりは、Googleが私の検索履歴、IPアドレス等を利用してより精度を高めている印象です。
また、DuckDuckGoの方が検索欄に入れる言葉の順序による影響が大きいです。
全体としては、予想よりも使えそうなので、もうしばらく使ってみようと思います。

本当はプライバシーについても書こうとしたのですが、長くなってきたのと自分でも整理できていないことがわかったので、別の機会に書こうと思います。(整理できたかどうかは別にして)

また、気になる人は、ウェブブラウザーのトラッキングやトラッキングクッキー、プライベートブラウジングについての設定も調べるといいと思います。
Safariでは、環境設定->プライバシー->Webサイトによるトラッキング、FirefoxやChromeでも同様の設定があります。ただ、現状ではWebサーバー側で対応しているところは少ないようです。

2013年7月9日火曜日

terminal-notifierを使ってみる(続き)


前の記事で紹介したterminal-notifierですが、ひとつ気になる点がありました。前回の記事にも書いていますが、標準入力を受け取って表示できない点です。
調べてみると、標準入力を受け取るようにしてほしいという要望は出ているようです。そして、RubyGem (Rubyのパッケージシステム)でインストールした場合は、Rubyの中からは標準入力が使えるようになっているようです。
ということで、ソースコードを見てみました。関係あるところは下記のようです。


unless ARGV.include?("-message")
  ARGV.push(*["-message", STDIN.read.chomp])
end


あまり、人のことは言えませんが、ちょっと手抜きかもですね。
-messageオプションが指定されていなかったら、強制的に標準入力を読むようですが、-messageは必須ではないので、期待しない動作になるかもしれません。
それと、標準入力は、Ruby側でなく、terminal-notifierの本体側で処理すべきな内容にみえます。

私は、RubyGemを使わずインストールしたのと、terminal-notifierをシェル(bash)で使いたいので似たようなラッパスクリプトを書いてみました。


#!/bin/sh

TNCMD=/opt/local/libexec/terminal-notifier.app/Contents/MacOS/terminal-notifier

if [ -t 0 ]; then
    $TNCMD "$@"
else
    msg=`cat -`
    $TNCMD -message "$msg" "$@"
fi


このスクリプトでは、標準入力が端末以外(コマンドのパイプなど)になっている場合、そこからcatコマンドで読むようにしています。
本当は、else部で-messageオプションが使われているかどうか調べる方がいいんですが、手抜きですね。-messageオプションが重複している場合、"$@"の中で-messageオプションが使われていると、そちらが実行されるようです。

もうひとつ、terminal-notifierで通知を表示する場合、アイコンがジェネリックなアプリケーションアイコンになるのもできれば改良してもらえるとありがたいですね。

でも、通知センターがMac OS Xの標準機能になったためか、growlnotifyでは時々取りこぼしが起きていたのが、terminal-notifierでは起きないようです。

2013年7月7日日曜日

terminal-notifierを使ってみる

今まで、Mac上での定期的な通知にはgrowlnotifyをよく使っていました。でも、最近のMac OS Xでは、growlに似た通知機能がOSの通知機能(Notification Center)として提供されています。そこで、growlnotifyの代替を探してみると、terminal-notifierというものがありました。
ここで、alloyという方が開発提供されています。

そこからダウンロードしてもいいんですが、普段使っているMacPortsでインストールすることにしました。MacPortsで導入する方が、アップデートがあったかどうかがわかりやすいかなと思ったからです。
Rubyで使いたい人は、gemでもインストールできるようですね。

インストール後の使い方ですが、ターミナルから以下のように、引数なしでコマンドを入れて確認できます。

$ terminal-notifier 
terminal-notifier (1.4.2) is a command-line tool to send OS X User Notifications.

Usage: terminal-notifier -[message|list|remove] [VALUE|ID|ID] [options]

   Either of these is required:

       -message VALUE     The notification message.
       -remove ID         Removes a notification with the specified ‘group’ ID.
       -list ID           If the specified ‘group’ ID exists show when it was delivered,
                          or use ‘ALL’ as ID to see all notifications.
                          The output is a tab-separated list.

   Optional:

       -title VALUE       The notification title. Defaults to ‘Terminal’.
       -subtitle VALUE    The notification subtitle.
       -group ID          A string which identifies the group the notifications belong to.
                          Old notifications with the same ID will be removed.
       -activate ID       The bundle identifier of the application to activate when the user clicks the notification.
       -open URL          The URL of a resource to open when the user clicks the notification.
       -execute COMMAND   A shell command to perform when the user clicks the notification.

When the user activates a notification, the results are logged to the system logs.
Use Console.app to view these logs.


通知を表示し、更にURLを開いたりコマンドを実行できるなどの機能もあるようですが、今回は使いません。
例えば、以前の記事のgrowlnotifyの例は、こんな感じにすればいいみたいです。

$ terminal-notifier -message "`date +今日の%H:%M%n金魚にえさ`" -title crontab -group feed

表示はこんなふうになります。


標準入力をterminal-notifierに渡す方法がなさそうなので、時刻などはメッセージの中にdateコマンドを埋め込んで表示しています。
-groupオプションは、同じID(ここでは、feed)が指定してあるメッセージを上書きするようなイメージです。
-titleをcrontabにしているのは、この通知をcrontabで定期的に表示させたいためです。

また、表示スタイルを変更したい場合は、システム環境設定の通知で少しだけ変更できるようです。

とりあえず、growlnotifyの代替として使えそうです。