Category Archives: Eclipse

ContentProviderを自動で実装する

AndroidのContentProviderを実装するのって非常に面倒ですよね。
いつも実装するたびに、「何でこんなめんどくさいんだー!」と愚痴りたくなるのですが、これを自動生成する方法があったので書いておこうと覆います。

EclipseのプラグインでMOTODEV Studioというのがあるのですがこれを利用します。
もともとはAndroid開発用のプラグインのようなのですが、この中にSQLite関係のクラスを自動生成してくれる機能があって、それを利用します。
まずは、Eclipse MarketPlaceでMOTODEV Studioで検索してインストールします。(ユーザー登録を求められたと思います)

次に必要なテーブル定義をしたSQLiteのDBファイルをSQLite用のクライアントツールなどで作成します。(僕は、TkSqliteというのを使っています。)

次に、EclipseのパースペクティブをMOTODEV Databaseに切り替えて、MOTODEV DatabaseExplorerビューの中の、「Create Database Management Classes」というアイコンをクリックします。
すると、設定ダイアログが開きますので、DataBase File の箇所に先ほど作成しておいたSQLiteファイルを指定します。
あとは、必要な箇所を入力して「完了」をクリックすれば、先ほどのテーブル定義に対応したSQLiteOpenHelperクラスとContentProviderクラスを一瞬で生成してくれます。
また、先ほど指定したSQLiteファイルはassets配下にコピーされていて、生成されたSQLiteOpenHelperクラスを見ると、コンストラクターの中で上記のSQLiteファイルを適切な位置、(/data/data/packagename/databases/)にコピーする処理が書かれています。
つまり、DBの初期化時にDBファイルごとコピーしてしまうのですね。なので、必要なレコードを最初からインサートしておいておく、といったことも可能です。

という感じに非常にらくちんな機能なのですが、一つだけ残念な点があって、それは、これで生成されるコンテンツプロバイダーは、各テーブルごとに別々のコンテンツプロバイダーとして生成される、っと言うことです。つまり、ひとつのDBで3つのテーブルがある場合コンテンツプロバイダーも3つになってしまいます。
これで何が問題かというと、OpenHelperも個別になってしまうので、場合によっては、Database locked などのExceptionが発生してしまう可能性があるという点です。
これについては、ちょっと長くなってしまうので別の機会に書きたいと思います。

ちなみに、上記の機能以外にも、スニペットというビューがあって、一般的によく使用するようなコードがスニペットになって並んでいます。エディターにドラッグすることでコードを挿入できるので、こちらも使い方によっては重宝するかもしれないです。(自分は使ってないですが)

JavaScriptデバッグツールJSDT

最近Eclipseでのデバッグがマイブームで、何かJSのデバッグができるプラグインはないかと探していたら、JSDTというのを見つけました。
実際普段のデバッグではFirebugのステップ実行で十分なのですが、Eclipseでステップ実行とかしたら気持ちいいかと思い、、、。
まずは、上述サイトのアップデートサイトURLを使ってインストール。
http://jsdt.googlecode.com/svn/trunk/org.ayound.js.debug.update
次に、Eclipseの実行>デバッグの構成、でJavascriptDebugを選択し、左上の新規作成アイコンをクリックして新規構成を作ります。
JSDTのデバッグでは、JSDTがプロキシサーバーの役割を果たすようで、URLはhttpから始まる絶対パスを記述します。
ポートはデフォルトの8088をそのまま使用。ブラウザーの欄に適宜ブラウザパスを設定します。
これでデバッグボタンをクリックすると、先程設定したブラウザでURLが開かれ、デバッグが開始されます。
パースペクティブをJSDTにしてブレークポイントを張れば止まるのでしょう。(未確認)
ですが、どうもいまひとつ使い方が判りません。
文字コードを設定し挙げても日本語(UTF-8)のページが文字化けするようです。
実行すると外部サーバーのJSファイルも含め、全てのJSを開いてしまうのも不便です。
外部のものをリモートデバッグできるのはある意味便利かもしれないのですが、、、
もう少し使ってみようかとも思うのですが、Firebugで十分かな、、、

PDT2.0+XDebugでリモートデバッグ(その2)

PDT2.0+Xdebugでデバッグに引き続いて、Eclipseの設定です。
以下、日本語化したメニュー項目で記載します。
まずは、Eclipseの、設定 > PHP で、PHPサーバーPHP実行可能ファイル、の2項目を適宜設定します。この時、PHPデバッガーの項目で、XDebugを選択します。
次に、設定 > PHP > デバッグの、PHPデバッガー欄でXDebugを選択します。
これでデバッガの設定ができました。最後に実際のデバッガ構成の設定です。
Eclipseメニューの、設定 > 実行 > デバッグの構成、をクリックしてデバッグ構成ダイアログを表示します。
ここで、左のメニューで、PHP Webページを選択し左上の「新規の起動構成」をクリックして新規構成を選択します。

  • サーバー・デバッガー:XDebug
  • PHPサーバー:先程設定したサーバー

を選択します。

デバッグ構成

デバッグ構成

「ファイル」の欄は実行ファイルを直接指定できますが、今回はCakePHPでのデバッグをしますので、アプリのルートとなるURLとして「/」を入力しました。ブラウザでアクセスできるURL形式で指定します。
ここで、「ファイルが存在しません」と×マークが出ますが、気にしなくてOKです。
また、CakePHPのようなフレームワークの場合、「最初の行でブレーク」はチェックをはずした方がよいでしょう。(でないと自分設定したブレークポイントに行き着くまでにかなりのステップが必要になります)
あとは、Eclipseのカブトムシアイコンから先程作った設定を選択して実行すれば、設定したブレークポイントでとまってくれます。
終了ボタンをクリックするまではデバッグモードが続いていますので、画面遷移やフォーム送信など行って、実際の処理の中でステップ実行ができます。
今まで、fireCakeやfirePHPを使って変数のチェックなどをしていましたが、格段にやりやすくなった気がします。
また、ステップインしていくことでコアライブラリの中で何が行われているのかを見ることもできるので、コアライブラリの挙動の理解にもつながった気がします。

PDT2.0+XDebugでリモートデバッグ(その1)

PDT2.0+Xdebugでデバッグ環境を構築してみようと思います。
思い立ったきっかけは、普段使っているCakePHPでのデバッグに役立てたいためです。
今回は

  • Windows-7 64bit
  • Eclipse3.4
  • PDT2.0
  • Apache2.0.63
  • PHP5.2.9-2

という環境がすでに整っているところから始めます。

まずは、Xdebugのダウンロードページからバージョンにあったものをダウンロードします。
最適なバージョンがわからない場合、実行環境のサーバー上でphpinfo();を実行し、そのHTMLソースをインストラクションのページのテキストボックス貼り付けて、Analyse my phpinfo() output をクリックすると、最適なバイナリバージョンが提示されます。
なお、今回OSはWindows7の64bitですが、PHP自体は32bit用(5.2.9までは64bit版はない?)がインストールされているので、ここでも32bit用のバイナリを選択しました。
※今回、上記のインストラクションのページでXdebug 2.1.0rc1 が提示されたのですが、これをインストールしてみると変数が表示されないという問題があり、最終的に2.0.4を使うことになりました。こちら詳細が記載されているようです。(PDT2.0のバグのようです)

つづいて、php.iniの設定
以下をphp.iniに追記ましす。

[xdebug]
zend_extension_ts="C:\PHP\ext\php_xdebug-2.0.3-5.2.5.dll"
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_mode=req
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_log="C:\Program Files (x86)\Apache Group\Apache2\logs\xdebug.log"
xdebug.manual_url = "http://jp2.php.net"
;xdebug.collect_params = On
;xdebug.dump.GET = *
;xdebug.dump.POST = *

これでデバッグの準備ができました。
Eclipseの設定・実行手順いついては次回に書きたいと思います。

Eclipse上でXdebugによるデバッグ

Eclipse上でXdebugによるデバッグ環境を整えたのですが、かなりてこずったので備忘録的に。
実際のインストール・設定はのちほど書こうと思います。
で、どこではまったかというと、今回2台の端末でそれぞれ同じ環境構築をしたのですが、なぜか1台だけでeclipseのデバッグボタンを押しても、うんともすんともいいません。で、eclipseのログ(ワークスペース配下の.metadata/.log)を見てみたのですが、なんのこっちゃ的な内容でわかりません。次にApacheのerror.logを見たのですがこちらは何もありません。今度はwindowsのシステムログを見てみたりしたのですがこちらもそれらしいものはありません。
で、xdebug.log(php.iniで設定)を見てみると、ファイルが出力されているのでデバッグは実行されているのかな?
そこで、デバッグ用のポートがふさがっているのでは?と考え、コマンドプロンプトで netstat -ano を叩いてみると、正常にデバッグできる端末と比較して違いが。
正常な方は9000,9980,10000のポートを同じPIDが使用しているのですが、デバッグできない方は10000だけ他のPIDに割り振られています。
(9000はXdebug、10000はzendDebuggerが使用するポートです。9980はは不明)
そもそも、このPIDはなんぞや、を調べるために、コマンドプロンプトで tasklistを叩いてみます。(tasklistはタスク一覧を表示するコマンドのようです。)9000,9980 はEclipseが使っていたのですが、10000をAgentsvc.exeというプロセスが使用している模様。
Agentsvc.exeって何?と思いググって見ると、どうやらMSOfficeのイルカ君らしい。なんじゃそりゃ、、、。で早速タスクマネージャでこのサービスを終了させてEclipseを起動するとめでたくリモートデバッグが実行されました。感動的、、、
でも、ブレークポイントでとまっているのですが変数が表示されません、、、、何で?
Read more »

eclipseのプラグインインストール

getting health insurance in new york buy clomid online UK major health insurance companies buy levitra uk online what are wells fargo hours buy finasteride affordable health insurance for children accutane no prescription medical center of trinity viagra online uten resept midwestern university wellness center dapoxetine top individual health insurance companies viagra ireland