ブログ・ア・ラ・クレーム

技術的なメモとかライフログとか。

Redmine がError message: Cipher is not a module で動かない件

自宅のサーバ上で、Redmine をPassenger でデプロイしているのですが、いつの間にかアクセス時にエラーを吐くようになっていました。
環境は以下の通り。

$ cat /etc/redhat-release
CentOS release 5.7 (Final)
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
$ rails -v
Rails 2.3.5

ちなみにRedmine のバージョンは、Redmine 0.9.3.stable

そして、passenger が吐くエラーメッセージはこんな感じ。

Error message:
  Cipher is not a module
Exception class:
  TypeError

どうも、ruby 1.8.7 のopenssl ライブラリが原因の模様。
下記URLを参照しつつ、ソースを引っ張ってきて、ライブラリを再インストールすれば大丈夫な模様です。
http://posterous.mclov.in/how-to-solve-the-cipher-is-not-a-module-error

最近の事、睡眠障害の事

最近、夜に上手く寝付けない事が多く困っています。
それゆえ、バイトや講義、ゼミにほとんど睡眠をとれていない状態で参加せざるを得ず・・。
もう8月中旬くらいからこの状態になっていたので、いい加減病院に行こうかと考えています。


眠れない。その原因の一部はストレスかも知れない。
上手い事研究が進んでいない。手応えを感じない。そうして今している事に自信が持てず不安感が拭えない。
なかなか難しい事です。あまり研究に向いていないのだろうか、などと思ってしまいます。
1年少々やったくらいで適正を占えるのか、という点は議論の余地がありそうですが。どうにも自信を喪失してしまっています。

Auto Network Switcher アップデート

ネットワーク接続を自動的にON/OFFするAndroidアプリ「Auto Network Switcher」をアップデートしました。

https://market.android.com/details?id=jp.syucream.ans&feature=search_result


更新箇所は以下の通り

  • 通話中に誤って機内モードへ移行しないようにした
  • 「今すぐ接続状況をチェック」ボタンを実装
  • その他細かい修正

IntelliJ IDEA 上でAndroid アプリのパッケージ名変更時に気を付けたいこと

IntelliJ IDEA を使用してAndroid アプリを書いているのですが、リファクタ機能を用いてパッケージ名を変更した後、ビルドは通るものの以下のようなエラーが吐かれアプリの起動が上手く行かない・・・などといった症状に陥りました。

ActivityManager: Starting: Intent { comp={XXX/XXX} }
ActivityManager: Error type 3
ActivityManager: Error: Activity class {XXX/XXX} does not exist.

どうやら上手くディレクトリ名が変更されてなく、かつAndroidManifest.xml の記述もおかしかったので修正。
しかしまだ同様のエラーが吐かれる。

そこで旧パッケージ名でgrep してみると、IntelliJ IDEA の設定ファイル ./.idea/workspace.xml が怪しい。
このファイル中の旧パッケージ名を新パッケージ名に置換したところ、上手く動きました。
なるほど、どうやらIntelliJ IDEA のAndroid 向けプラグインは自分の設定ファイルを用いてアプリ起動などさせているみたい?

rspec の実行を加速しストレスフリーな開発環境へ

クーガーの兄貴は言いました。「お前に足りないものは、それは〜  情熱思想理念 ... (中略) ... 速さが足りない!!」

さて最近Rails アプリケーションのテストをrspec で記述しているのだけど、テスト数が1000 を越えてくるとなかなかどうして全てのテストが走り切るのに大変時間がかかる。
遅いというのは大変ストレスが溜まります。
そこで最近は、autotest とspork の組合わせによりテストの実行を高速化し、ストレスフリーな開発をしています。



autotest はファイルの変更を監視し変更分のみのテストを回してくれます。
そしてspork はテストの初期化処理周りをキャッシュしてテストの実行開始を高速化してくれます。
また、autotest は差分のテストがsuccess した後に全体のテストを回してくれます。開発中はこれは毎度廻らなくてよい(と思われる)ので、以下のようなオプションをつけて差分テストのみ回すようにするとベターかも。

$ autotest -cf

Android でソフトウェアバックキーを提供する

iOSアプリをAndroidに移植したい時に需要が有る筈。
iOSアプリの、画面上部にあるBackボタンをAndroid でも提供します

Back ボタンと同じ動作をさせたいのなら、普通にActivityを終了させればOK

Button backButton = (Button)findViewById(R.id.backkey);
backButton.setOnClickListener(new View.OnClickListener(){
    public void onClick(View view){
        finish(); // 画面上のBackボタンが押されたらActivityを終了する
    }
});

ネットワーク接続を自動的にON/OFFするAndroidアプリ「AutoNetworkSwitcher」を公開しました。

最近趣味で作ったAndroidアプリを、Android Market にて公開しました。

ネットワーク接続を自動的にON/OFFするAndroidアプリ「AutoNetworkSwitcher」
https://market.android.com/details?id=jp.syucream.ans&feature=search_result

このアプリはネットワークの接続状況を監視し、端末のネットワーク機能を自動的にON/OFFします。
具体的には、以下の様な動作をします。

  • 端末が圏外のときは、自動的に「機内モード」に移行して消費電力を削減する
  • WiFi接続が不可能なときは、自動的にWiFi機能をOFFにする
  • 定期的にネットワークが利用できるか監視し、利用可能ならその機能をONにする。

注意事項:
本アプリは自動的に端末を「機内モード」に変更する可能性があります。
「機内モード」中は通話を受ける事が出来なくなりますので、ご使用の際は気を付けて下さい。
本アプリの設定項目、3G設定の「自動OFFを有効にする」のチェックを外す事で、「機内モード」への移行を抑制することは可能です。

このアプリは、主にAndroid のサービスとブロードキャストレシーバで構築されています。
サービスで定期的なネットワーク接続状況の判断を行います。
ブロードキャストレシーバではネットワーク接続が変更された際に即座にネットワーク接続の有効性を判別します。


以下、余談です。どうしてこんなアプリを開発するに至ったのかという話です。

僕はSoftbank から昨年提供されているX06HT(HTC Desire)を愛用しているのですが、3G回線の品質が良くない。大学構内で、しょっちゅう圏外になってしまうのです。
そして、携帯端末は一般的に圏外の状態でもネットワーク接続を維持しようと努力をし、結果消費電力が向上してしまう。
そこで僕は、「AutoNetworkSwitcher」を自作し、圏外である場合には機内モードに移行させ、消費電力の低下を図るようにしたのです。

また、大学構内にはWi-Fiアクセスポイントがあるのですが、このネットワークがユーザ認証を行わないと外に出られない仕様になっていまして。
スマートフォンがそれらのアクセスポイントを拾って、結果ネットワーク接続が途絶えてしまう事が多々あるのです。
そこで、「AutoNetworkSwitcher」にはWi-Fi 接続に関しても、「外のネットワークに出られるか」を判別し出られない場合は自動的に切断する事を可能にしています。
これにより、使用出来ないネットワーク、あるいは接続状況が悪いネットワークからの自動的な切断を行ってくれて、人間の操作のコストを若干減らす事が可能になります。


現在、試験的にAuto Network Switcher を公開しています。
バグ報告や改善案、レビューなど頂けると幸いです。