Archive for the ‘Tech’ Category.

jQuery を使って checkbox の上限選択数を制御する

HTML フォームの checkbox を選択できる上限を任意に設定するための処理を jQuery で書いてみた。指定数以上を選択したとき alert() でダイアログボックスを出す例はたくさんあるようだが、ここではダイアログボックスを出さずに選択済みのものをひとつ減らすようにしている。ダイアログボックスが出ないので、上限値を越えたときの選択操作が楽だと思う。

HTML の記述は次のようになる。class や id 属性の値はこのサンプルと同じである必要はなくて自由に設定して構わない。また name 属性はこの処理では使っていない。

<input type=”checkbox” class=”chkbox_cls” id=”chkbox_0″ name=”chkbox” value=”foo” onclick=”ltd_chkbox(this)” />foo
<input type=”checkbox” class=”chkbox_cls” id=”chkbox_1″ name=”chkbox” value=”bar” onclick=”ltd_chkbox(this)” />bar
                :
<input type=”checkbox” class=”chkbox_cls” id=”chkbox_N” name=”chkbox” value=”baz” onclick=”ltd_chkbox(this)” />baz

それぞれの checkbox における onclick イベント発生時に呼び出すのが次の JavaScript 関数。変数 limit_len に選択可能な上限数を設定しておく。サンプルでは 3 としているので、仮に checkbox が 10 個あったとしても 3 個以上はチェックできない。4 個めをチェックするとすでにチェック済みのものから 1 個のチェックが自動的に外れる。コード中に jQuery() と記述している部分は、もちろん $() としても構わない。

function ltd_chkbox(obj) {
  var limit_len = 3;   # 選択可能な上限値
  var attr_name = ‘.’ + jQuery(obj).attr(‘class’) + ‘:checked’;
  var checked_len = jQuery(attr_name).length;

  var tail = false;
  for (var i = 0; i < checked_len; i++) {     if (jQuery(jQuery(attr_name)[i]).attr('id') == jQuery(obj).attr('id')         && i == checked_len - 1) {       tail = true;     }   }   if (checked_len > limit_len) {
    var idx = tail ? 0 : checked_len – 1;
    jQuery(jQuery(attr_name)[idx]).attr(‘checked’, false);
  }
}

Eclipse における TAB キーと空白入力

最近、Android アプリケーションに手を付けるため Eclipse を使っている。コード編集時には TAB キー入力を空白に置き換えたかったので、次の手順でメニューをたどっていき、そのダイアログに出ている “Insert spaces for tabs” を有効化した。

“Window”→”Preferences”→”General”→”Editors”→”Text Editors”→”Insert spaces for tabs”

これで TAB キー入力で空白が入るようになったのだが、Java コードのときだけは TAB キーが TAB コードのまま挿入されることに気付いた。調べてみると前述の設定以外に Java コードに特化した設定項目があることが分かった。次の手順でたどりつけるダイアログである。

“Window”→”Preferences”→”Java”→”Code Style”→”Formatter”

ここからさらに “Active profile:” のいずれかを選択してから “Edit…” ボタンを押すと別のダイアログが表示される。さらにそこの “Indentation” タブにある “Tab policy:” を “Spaces only” にしなければならない。

ところがデフォルトのプロファイルである “Eclipse [built-in]” は組み込みプロファイルということで編集することが出来ない。このデフォルトプロファイルを元にして新しいプロファイルを作り、そこで “Spaces only” を設定する必要がある。もちろん以降は、この新しいプロフィールを使うことになる。これで Java コード編集時も TAB キー入力は空白に変換される。

それにしてもメニュー階層が深い。それだけ Eclipse には非常に多くの設定可能な項目があることがわかる。

Android 開発環境の設定手順

久しぶりに Android 開発環境をインストールしたので、その手順を忘れないうちにメモしておく。基本的に本家 Web サイトの情報に従って作業すれば問題ない。

http://developer.android.com/
http://developer.android.com/intl/ja/

Java のインストール

当然ながら Java 実行環境は必須。JDK でなく JRE でも OK。今回使っているバージョンは 1.6.0_20。ところで Oracle 版 Update 21 を使うと Eclipse がクラッシュするという情報あり( http://bit.ly/cw94bC )。自分のところで確認していないが要注意。

Eclipse のインストール

Eclipse Helios 3.6.1 をインストール( http://www.eclipse.org/ )。現時点で Android のサイトによると不具合のため 3.6 は非推奨となっているが、つい最近の情報によるとこの問題は直ったようだ。また、実際に手元の環境でも今のところ問題は顕在化していない。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=318108

Eclipse の日本語化プラグインもあるが Android の開発には必須でないので、今回はインストールしていない。

Android SDK のインストール

http://developer.android.com/sdk/installing.html

Android SDK の zip パッケージをダウンロードして任意のディレクトリに展開。現在のバージョンは r07。続いて SDK を展開したディレクトリの中にある /tools へ PATH を通しておく。

Android Development Tools のインストール

http://developer.android.com/sdk/eclipse-adt.html

ADT のインストールは Eclipse のメニューから実行する。Eclipse を使わないときは直接 ADT をインストールすることも可能。

  1. Eclipse の Help メニューから Install New Software –> Add を選択。
  2. “Name:” 欄に “Android Development Tools Plugin” など任意の文字列、”Location:” 欄は https://dl-ssl.google.com/android/eclipse/ を入力して OK ボタンを押す。ここで問題が起きたら Location の https を http に変更すると解決出来る場合もある。
  3. 一覧に Developer Tools と表示されるので、これをチェックして Next ボタンを押すと、Install Detail 画面になるのでさらに Next ボタン。
  4. ライセンス内容を確認して同意できるのであれば Finish ボタンを押す。これで ADT のインストールが始まる。途中で Security Warning が出るので内容を確認して次へ。
  5. ADT のインストールが完了したら Eclipse を再起動。

ADT Plugin の確認とアップデート

Eclipse 用 ADT Plugin の確認を行なう。

  1. Eclipse の Window メニューから Preference を選択。
  2. 開いたダイアログで Android をクリックし Android SDK の設置場所と Android プラットフォーム(SDK のターゲットバージョン)一覧を確認する。
  3. 同じダイアログの Java メニューで Java ランタイムのバージョンを確認できる。複数の JDK や JRE がインストールされている環境では、それらを切り替えることができる。
  4. ADT をアップデートするときは Eclipse の Help メニューから “Check for Updates” を選択。

http://developer.android.com/sdk/index.html
http://developer.android.com/sdk/adding-components.html

SDK component のインストール

ここまでで SDK は Core だけがインストールされた状態なので、さらに必要な component をインストールする。

http://developer.android.com/sdk/adding-components.html

  1. Window メニューから “Android SDK and AVD Manager” –> “Available Packages” を選ぶ。
  2. 表示されている URL を選んで “Install Selected” を押すと、実際にインストールするパッケージを選択する画面へ移る。
  3. Google API と USB ドライバに “?” マークが付いているが、ここではとりあえずこれらすべてを選択する。
  4. インストールを開始する。一連のインストール作業の中でここが一番時間が掛かる。今回は 10 分程度。

これですべてのインストールが完了。これ以降は本家サイトにあるチュートリアルなどを参照すれば良い。リファレンスもこのサイトにまとめられている。

http://developer.android.com/resources/
http://developer.android.com/reference/packages.html
http://groups.google.co.jp/group/android-sdk-japan?hl=ja

Android 端末の GPS と 3G — その後

3G を切断して Wifi だけでインターネットに接続した環境で、Android 端末の GPS 利用アプリケーションが位置を正確に特定できなくなっているという記事を以前に書いたところ、yananob さんという方からコメントをいただき、やはり同じような状況が他でも発生していることが分かった。

ところが先週にリリースされた「モバイル Google マップ」のアップデートを適用したところ、3G を切断したままの状態でもまた以前のように正確な位置特定が出来るようになった模様だ。このアプリケーションは Andoid 端末に元からインストールされていたものだが、今回のアップデートで GPS や位置情報を処理する共用ライブラリのようなものが更新されたのではないかと推測している。このアップデート以降、Foresquare クライアントでも発生していた同様の不具合は解消された模様。ただし、これらアプリケーションで位置情報を確定するまでの時間が以前よりも長くなったように感じている。

Android 端末の GPS と 3G

最近 NTT 東日本の「光ポータブル」(PWR-100F)を導入した。Android 端末(HT-03A)の 3G を完全に遮断し、外出先でも光ポータブルを経由して HT-03A を利用するためである。これによって出先における HT-03A とノート PC のネット回線を一本化し経費を半減できると考えた。

これまで Android、PC ともに光ポータブル経由で問題なく利用出来ていたのだが、Andoroid 端末の Google Map や Foursquare クライアントソフトで GPS による位置特定がうまく出来ないことに気付いた。光ポータブルとつながっている基地局らしき場所までは判別しているようなのだが、端末があるピンポイントの場所を識別出来ないように見えるのだ。

そこで試しに 3G を一時的に復活させてみたところ、すぐにピンポイントの位置特定が可能になった。Tricorder という別のソフトによると 3G を遮断した状態でも GPS 情報は捕捉しているように見えるので、Google Map などでは恐らく衛星からの情報に加えて、どこかのサーバとの連携によって位置を割り出しているのではないかと推測している。なお、一時的な 3G 復活時には約 1,000 パケットが送受信されていた模様。

このままでもまあそれほど問題は無いのだが、正確な GPS 情報にアクセス出来ないのはちょっと悔しい。かといって GPS を使うときだけ 3G を復活させていると、思ったよりもパケットを消費しそうで、そうなると 3G 回線を一本化した意味が無くなってしまう。悩ましいところだ。ちなみに光ポータブルは SIM ロックフリー版で、E-mobile の SIM を挿している。まさかこれが原因ということは無いだろうと思う。

Windows7/64 ビット版と Android 開発環境

Windwos7/64 ビット版上に Android の開発環境を構築した。その際、Java SDK が 64 ビットに対応していたため、Eclipse も 64 ビット対応のもので揃えることを試みた。実は Windows 用 Eclipse の 64 ビット対応版は正式にはリリースされていない。

http://www.eclipse.org/downloads/

しかし、次のサイトにある Latest Release のリンクをたどっていくと 64 ビットに対応していると思われる Eclipse (eclipse-SDK-3.5.2-win32-x86_64.zip)を入手することができる。

http://download.eclipse.org/eclipse/downloads/

これによって 64 ビット版(と思われる)Eclipse は特に問題なく起動することができた。

続いて Android 開発用の Eclipse プラグインである ADT (Android Development Tools)のインストールを開始したのだが、次のようなメッセージとともにインストールを完了させることが出来なかった。

Cannot complete the install because one or more required items could not be found.

この状況については頻発しているようで、検索すると対応策をすぐに見つけることができる。必要なモジュールが足りないから、それらを補完するためリポジトリを追加設定すれば良いということらしい。検索結果に基づいて Eclipse の Help > Install New Software > Add を使い、Available Software Sites リストに次の URL を追加した。

http://download.eclipse.org/releases/galileo

ところがこのリポジトリには必要と思われるモジュール群が見つからず、結局は ADT のインストールを終了させることが出来なかった。

やはり Eclipse のダウンロードサイトに 64 ビット版が掲載されていないことから、これ以上調べても無駄と判断して 32 ビット版 Eclipse に切り替えた。そうしたところ ADT のインストールは問題なく完了し、Android SDK との連携から AVD (Android Virtual Device)の起動まで確認することができた。

ちなみに今回インストールした Eclipse は Galileo 3.5.2 である。

Windows7 における HHK の英語キー配列による日本語入力

デスクトップマシンを新調するとともに、あまり乗り気ではなかったものの Windows7 を導入した。キーボードは従来から使っている Happy Hacking Keyboard (英語キー配列)をそのまま継続使用するつもりだったが、新マシンにプリインストールされた OS が日本語キー配列の設定になっていたため、色々と手を入れる必要があった。その手順をメモしておく。

まずはキーボード用のデバイスドライバが日本語キー用になっていたため、ドライバ更新機能を使って PC/AT 101/102 キー用のドライバに変更した。以前に WindowsXP を使っていたときはこれだけで英語キー配列が使えた記憶があるのだが、今回はうまくいかず英語キー配列を正しく認識してくれなかった。

調べてみると Windows7 ではレジストリにも手を入れる必要があるらしいことが分かった。検索すると修正手順を解説したサイトがたくさん見つかるのだが、その中から Naney さんのサイトに記載されていた情報に従ってレジストリの修正作業を実施した。

http://www.naney.org/diki/d/2009-12-04-ThinkPad-X200.html

一応、その内容をここにも転載しておく。

  • レジストリ : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
  • LayerDriver JPN : kbd106.dll → kbd101.dll
  • OverrideKeyboardIdentifier : PCAT_106KEY → PCAT_101KEY
  • OverrideKeyboardSubtype : 2 → 0

これで一応英語キー配列を正しく認識するようになったが、もうひとつ問題が残った。以前から日本語入力には ATOK と Google 日本語入力を使っていて、日本語入力モードへの切り替えは [Alt] + [`] で行っていた。しかし、今回はこのキーによる切り替えが効かなくなってしまった。タスクバーにある日本語入力メニューを使ってモードを切り替えれば何とかなるものの、このままでは少々煩わしい。そんなときにふと左側の [Alt] を使ってみたところ、問題なくモード切り替えが出来ることが分かった。これまでは左右両方にある [Alt] キーのうち右側しか使ったことがなかったので、以前から左の [Alt] が有効だったかどうかは不明である。

ERP5 への道 — 導入編4

はじめに

前回、「ERP5への道 — 導入編3」で ERP5 のインストールまでこぎ着けたものの、そのまま手付かずになっていた。久しぶりに ERP5 を触ってみようと思ったら、buildout を利用したインストールが出来ることが分かった。ちなみに buildout のことは知らなかったのだが、Zope 環境で動作するプロダクトなどを配布ならびにインストールするための make のようなものと理解した。

手順の概略

インストール手順は基本的に erp5.org の Web サイトに記載されている情報に従った。

以降で具体的な手順について順番に記載していくが、ここでの内容は次の環境で実施したものである。

  • OS : Mandriva 2010.0 on 32 bits x86 CPU
  • HOST : VMware Player 3.0.1 (メモリ割り当て 768MB、HDD 20GB、NAT 接続)

RPM パッケージのダウンロード

まずリポジトリを設定してから buildout に必要な RPM モジュール群をインストールする。実際の作業は root アカウントで実施した。

# urpmi.addmedia –update nexedi http://www.nexedi.org/static/mandrivalinux/2010.0/i586/
# urpmi.addmedia –distrib –mirrorlist ‘http://api.mandriva.com/mirrors/basic.2010.0.i586.list’
# urpmi task-erp5-buildout

この手順によって ERP5 に必要なバージョンの Python と Zope などに加えて MySQL もインストールされる。

各モジュールのインストール途中で「複数バージョンが存在するので、どれをインストールするのか?」といった趣旨の問い合わせがある。Python などが必ずしも最新バージョンをインストールするわけではないことと関連していると思うが、すでにインストール済みのバイナリパッケージなどのバージョンを調べながら、出来るだけ一致したバージョンのものを選択したほうが良いと思う。

MySQL の設定

前項の手順を踏むと MySQL がインストールされているはずなので、そこに ERP5 用のデータベースとユーザを登録する。

  • データベース名 : erp5
  • ユーザ名 : erp5user

この名前はこれから実行する buildout で作られるbuildout.cfg 内にデフォルトで設定されている値である。データベース名などを変更するときは、buildout.cfg も編集する必要がある。

buildout の準備

ここからの作業は一般ユーザアカウントで実行する。buildout を実行する前に buildout を実行するユーザのホームディレクトリに ~/.buildout/default.cfg というディレクトリとファイルを作っておく。default.cfg の中身は次のようになる。

[buildout]
# Directory where built dependencies will be shared
eggs-directory = /home/<CHANGETHIS>/.buildout/eggs
# Directory to store downloads
download-cache = /home/<CHANGETHIS>/.buildout/download-cache

さらに default.cfg 内で指定した位置に eggs と download-cache ディレクトリを作っておく。この設定をしておくとキャッシュが有効となって buildout を繰り返した時の処理時間が短縮される。これらのディレクトリには buildout の実行ユーザが読み書き可能なパーミッションを設定する。

buildout の実行

まず ERP5 の buildout パッケージを取り出す。

$ cd <YOUR_WORKING_DIRECTORY>
$ svn co https://svn.erp5.org/repos/public/experimental/erp5.buildout/

ここで https を指定しているにも関わらず、証明書が自己生成のものなので確認を求められる。画面に表示される証明書情報を一応確認した上で、常に承認する旨の回答を選択しておく。

チェックアウトが完了すると、現在のディレクトリには erp5.buildout というディレクトリが作られる。そのディレクトリに入ってから、bootstrap/bootstrap.py と bin/buildout コマンドを実行すれば、erp5 のインストールが完了する。

$ cd erp5.buildout/
$ python2.4 -S bootstrap/bootstrap.py
$ python2.4 -S bin/buildout

実はここまでの記述は原本の HowToUseBuildout とは若干異なっている。原本では apt-get を使って gcc などの開発環境を整えているが、こちらではすでに urpmi コマンドを使って完了している。また、原本では データベース名が erp5db となっているが、buildout.cfg にデフォルト設定されている名前が erp5 となっているので、ここでもデータベース名は erp5 としている。さらに原本では buildout 実行時に python にはオプション指定が無いが、erp5.buildout/README.TXT をみると -S オプションを指定するようになっている。実は -S オプションの意味が十分に把握できていないのだが、ここでは -S を付けて実行している。

また buildout の途中で SOAP 関連のライブラリ欠如のためにエラーが出る。恐らく urpmi task-erp5-buildout では SOAP がインストール対象となっていないことが原因と思われる。このままでもインストールは完了して zope/erp5 は立ち上がるが、buildout 実行前に SOAP 関連のライブラリなどを手作業でインストールしておけばエラー発生は回避できると思う。

buildout コマンドを実行すれば、あとは erp5 のインストール完了を待つだけなのだが、実際には処理が途中でフリーズしたように見える現象に遭遇した。その時のプロセス状況を確認してみると、途中の svn co を実行したまま待ち状態になっているようなのだ。このままではどうしようもないので、一旦処理を中断してからもう一度 buildout コマンドを実行してみると、今度は最後まで実行が完了する、といったことを数回経験した。止まってしまうところは毎回異なるので、原因はつかめていないのだが、その後に ERP5 は問題なく実行できている。VMware Server 環境だとこのようなことは発生しないという報告もあるので、VMware あるいは マシン 固有の問題なのかもしれない。

buildout 終了後、次のコマンドで zope を立ち上げる。

$ bin/zopectl fg

なお fg の代わりに –help を指定すれば fg 以外のオプション機能を確認することができる。

続いてブラウザで次の URL にアクセスして ERP5 のログイン認証画面となれば、一応インストール作業が完了したものとする。

http://localhost:18080/erp5

ここでユーザ名 zope、パスワード zope を入力すれば ERP5 のトップ画面にアクセスすることができる。

日本語リソース導入のためのビジネステンプレート導入

ERP5 のメニュー表記などを日本語表示するためには、日本語化のためのビジネステンプレートを導入する。まず始めにHow To Install Business Templates における “Install Business Template from repositories” の項に記載されている手順に従って erp5_l10n_ja というローカライゼーション用のビジネステンプレートをインストールする。

  1. ERP5 トップ画面左上の “My favourites” メニューから “Manage Business Templates” を選択する。
  2. メニューバーにある “Import/Export” アイコン(青と赤の横矢印がすれ違うデザイン)をクリックする。
  3. “Update Repositories Informations” 画面になるので、そこにあるテキストエリアにリポジトリの URL http://www.erp5.org/dists/snapshot/bt5/ を入力してから、下部にある “Update Repositories Information” ボタンを押す。
  4. 同じ画面に成功メッセージが表示されたら、セレクトメニューから “Install Business Template” を選択する。画面にはインストール可能なビジネステンプレート一覧が表示される。
  5. 一覧から erp5_l10n_ja を探してチェックボックスで選択したら、画面最下部にある “Install Business Templates from Repositories” ボタンを押す。
  6. 確認画面になるので “Validate Installation” ボタンを押す。
  7. 画面右上にある言語選択メニューに “日本語” という選択肢が追加されていることを確認する。これを選べばメニューなどが日本語で表示されるようになる。

これで日本語化された ERP5 を利用できるようになる。

最後に

buildout による ERP5 のインストールは、途中で想定外の動作に遭遇するなど、まだ完全に把握できていない状態である。そのため本稿の内容には間違った記述や誤解が含まれている可能性があり、それらをご指摘いただければ幸いである。

FREE <無料>からお金を生みだす新戦略

「FREE <無料>からお金を生みだす新戦略」(クリス・アンダーソン 著、高橋則明 訳、小林弘人 監修・解説、6NHK 出版)を読了。最近では特に Web 系のサービスにおいて無償を基盤とする戦略が顕著だが、これらのビジネスモデルに関する歴史的な背景や構造を体系的にとても良く理解できる。本書の翻訳版を NHK 出版が手掛けている点も興味深い。Twitter と同じように週刊ダイヤモンドが3月13日号で「FREE の正体 0円ビジネス全解剖」という大特集を組んでおり、本書の副読本の様相を示している。本書と週刊ダイアモンドのいずれも書店では山積み状態になっており、かなり売れているようだ。

以下、本書の目次。

プロローグ
第1章 フリーの誕生
無料とは何か
第2章 「フリー」入門 — 非常に誤解されている言葉の早わかり講座
第3章 フリーの歴史 — ゼロ、ランチ、資本主義の敵
第4章 フリーの心理学 — 気分はいいけど、よすぎないか?
デジタル世界のフリー
第5章 安すぎて気にならない — ウェブの教訓 = 毎年価格が半分になるものは、かならず無料になる
第6章 「情報はフリーになりたがる」 — デジタル時代を定義づけた言葉の歴史
第7章 フリーと競争する — その方法を学ぶのにマイクロソフトは数十年かかったのに、ヤフーは数カ月ですんだ
第8章 非収益化 — グーグルと二一世紀型経済モデルの誕生
第9章 新しいメディアのビジネスモデル — 無料メディア自体は新しくない。そのモデルがオンライン上のあらゆるものへと拡大しているのが新しいのだ
第10章 無料経済はどのくらいの規模なのか? — 小さいものではない
無料経済とフリーの世界
第11章 ゼロの経済学 — 一世紀前に一蹴された理論がデジタル経済の法則になったわけ
第12章 非貨幣経済 — 金銭が支配しない場所では、何が支配するのか
第13章 (ときには)ムダもいい — 潤沢さの持つ可能性をとことんまで追究するためには、コントロールしないことだ
第14章 フリー・ワールド — 中国とブラジルは、フリーの最先端を進んでいる。そこから何が学べるだろうか?
第15章 潤沢さを想像する — SFや宗教から、<ポスト稀少>社会を考える
第16章 「お金を払わなければ価値のあるものは手に入らない」 — その他、フリーに対する疑念あれこれ
結び — 経済危機とフリー
巻末付録1 無料のルール — 潤沢さに根ざした思考法の10原則
巻末付録2 フリーミアムの戦術
巻末付録3 フリーを利用した50のビジネスモデル
謝辞
日本語版解説(小林弘人)

Google App Engine 超入門

知人の会社で実施している社内向けのミニセミナーに講師として呼ばれた。どんな話題でもよい、ということだったので、Google App Engine の概略を解説することにした。1時間という貴重な時間を割いて集まっていただいた皆さんに満足してもらえる内容だったかどうか不安が残る。とりあえずその時に使った資料を次の URL で公開しておく。

http://bit.ly/9b2bwx

終盤の Google Apps との連携部分についてはうまく説明出来なかったので、十分に理解してもらえなかったかもしれない。